SwiftのSpriteKitで実装―タワーディフェンスゲームの大枠の作り方とコツiOS SDKとSwiftで始めるゲーム作成入門(2)(2/3 ページ)

» 2015年11月12日 05時00分 公開
[杉本裕樹マネーフォワード]

素材を表示して動かしてみる

画面に敵を表示してみる

 続いて、画面に敵を表示してみます。

 GameSceneの先頭とdidMoveToViewの最後に下の処理を追加します。これは敵を画面に表示する処理です(7〜8行目)。

class GameScene: SKScene {
    let enemy = SKSpriteNode(imageNamed: "Enemy")
    
    override func didMoveToView(view: SKView) {
        // …略
        
        enemy.position = CGPoint(x:50, y:300)
        addChild(enemy)
    }
}

 これで画面に敵が表示されました。

敵を移動する

 次に敵がゴールに向かって移動する処理を書いていきます。今回は右端をゴールだと仮定して、敵はゴールに一直線に向かうようにします。

 GameScene.swiftにupdateメソッドを追加します。その中にenemy.position.xを1ずつ増やす処理を記述します。

override func update(currentTime: NSTimeInterval) {
    enemy.position.x += 1
}

 これで敵が左から右に移動するようになりました。

各ゲームシーンを設定

 GameSceneに下記を追加します。三つのゲームシーン「Playing」(ゲーム中)「GameClear」(ゲームクリア)「GameOver」(ゲームオーバー)を設定します。

class GameScene: SKScene {
    enum State {
        case Playing
        case GameClear
        case GameOver
    }
    var state = State.Playing
    
    // ...略
}

ゲームオーバー処理

 ゲームオーバー処理を追加します。敵が右端に到達したらゲームオーバーになるようにします。

 敵がゴールに到達したかどうかを判定します。updateメソッドを下のように書き換えてください。

class GameScene: SKScene {
// ...略
 
    override func update(currentTime: NSTimeInterval) {
        if state == .Playing {
            enemy.position.x += 1
            
            if frame.width < enemy.position.x {
                state = .GameOver
                
                let myLabel = SKLabelNode(fontNamed: "HiraginoSans-W6")
                myLabel.text = "ゲームオーバー"
                myLabel.fontSize = 45
                myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame) - 20)
                addChild(myLabel)
            }
        }
    }
}

下の2点を変更しました。

  1. stateが「Normal」のときだけ(5行目)敵が移動するようにする
  2. 敵が画面の右端まで移動したら(8行目)、stateを「GameOver」にして(6行目)「ゲームオーバー」ラベルを表示する(9行目)

 これで敵が右端に到達したときに「ゲームオーバー」と表示されるようになりました。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。