iPhoneゲームをSwift言語で作成してみたいという初心者向けにiOSのゲームフレームワークを使った作り方を一から解説する入門連載。今回は、一般的な「タワーディフェンス」ゲームのルールにのっとりゲームの大枠を作る。衝突判定のphysicsBodyの使い方なども解説。
前回の「初心者でもiOS 9/tvOS向け2Dゲームが作れる標準フレームワークSpriteKitの基礎知識とチュートリアル」ではSpriteKitのサンプルを動かしてSpriteKitの大枠を把握しました。
今回からは実際にタワーディフェンスを作っていきます。
まずはどんなゲームを作るかを考えます。タワーディフェンスのルールを調べてみましょう。Wikipediaによるとタワーディフェンスの基本的なルールは下記6点です。
本連載では、このルールを満たすアプリを作っていきます。
今回はゲームの大枠を作ることを目標にします。敵と味方が画面に表示されて条件を満たすとゲームクリアやゲームオーバー画面が表示されることを目指します。
具体的には下の3点を実装します。
今回のゲーム作りの流れを簡単にまとめると下のようになります。
基本的にはSceneを作って、その上に処理を書いていくだけなので慣れればスムーズに制作できるかと思います。これから紹介するライフサイクルメソッド「didMoveToView」「update」の概要は、前回記事を参照してください。
まずは、Xcodeの「Create a new Xcode project」から「Game」を選択してプロジェクトを作っていきます。
「Product Name」「Organization Name」「Organization Identifier」は自分の好きなものを入れます。
プロジェクトを作ったらまずは不要な処理を削除します。「GameScene.swift」を開いて下のように最低限のコードにします。
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
}
}
SKSceneの設定を変更します。「GameViewController.swift」を開いて下のように修正してください。
// scene.scaleMode = .AspectFill // ↑ を ↓ に書き換える scene.scaleMode = .ResizeFill
この設定は「sceneのサイズをviewに合わせるかどうか」という設定です。今回は扱いやすい「ResizeFill」を使います。
背景画像を表示します。素材は「ぴぽや倉庫」のフリー素材を使わせていただきました。
こちらから「resource.zip」ファイルをダウンロードして解凍してください。その中に「Char.png」「Enemy.png」「Field.png」があるので「Assets.xcassets」の中にドラッグ&ドロップします。
画像の追加ができたらGameSceneのdidMoveToViewに下のような処理を記述します。これは背景にマップを敷き詰める処理です。
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let fieldImageLength: CGFloat = 32
for i in 0...Int(frame.size.width / fieldImageLength) + 1 {
for j in 0...Int(frame.size.height / fieldImageLength) + 1 {
let field = SKSpriteNode(imageNamed: "Field")
field.position = CGPoint(x: CGFloat(i) * fieldImageLength, y: CGFloat(j) * fieldImageLength)
field.zPosition = -1
addChild(field)
}
}
}
}
この状態で起動すると画面いっぱいに緑の画像が敷き詰められるかと思います。
開発者向けiOS 9、WatchOS 2、Swift 2、Xcode 7の新機能と新しいApple Developer Programの参考情報まとめ
Apple WatchやiPhoneのアプリを作ろう! Playgroundで学ぶSwiftの基礎―変数、定数、型、演算
iOSアプリ開発でObjective-CからSwiftに移行するための手順、注意点まとめ〜言語仕様の違いは? 連携時の呼び出し方は?
いまなら無料! Unityで始めるiPhoneゲーム作成“超”入門Copyright © ITmedia, Inc. All Rights Reserved.