iOS 9のReplayKitでゲームプレー動画を撮影&シェアiOS SDKとSwiftで始めるゲーム作成入門(7)(2/4 ページ)

» 2016年07月13日 05時00分 公開
[杉本裕樹マネーフォワード]

ステージによって敵の種類を変える

 ステージを増やしたので、次は敵の種類も増やしていきます。ステージが進むに従って敵が強くなっていくようにします。

 まずは敵画像を追加します。Assets.xcassetsからEnemyを削除してこちらのEnemy1、Enemy2、Enemy3を追加してください。今回もぴぼや様のフリー素材を使わせていただきました。

 次はステージごとの敵出し分け処理を実装します。前回のようにFactoryMethodパターンを使って保守性の高いコードを目指します。

 まずはEnemy.swiftを以下のように修正してください。

class Enemy: SKSpriteNode {
    var life = 0
}
 
// Enemy1〜3を追加
class Enemy1: Enemy {
    init() {
        super.init(texture: SKTexture(imageNamed: "Enemy1"), color: UIColor.clearColor(), size: CGSize(width: 32, height: 32))
        life = 3
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
 
class Enemy2: Enemy {
    init() {
        super.init(texture: SKTexture(imageNamed: "Enemy2"), color: UIColor.clearColor(), size: CGSize(width: 32, height: 32))
        life = 6
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
 
class Enemy3: Enemy {
    init() {
        super.init(texture: SKTexture(imageNamed: "Enemy3"), color: UIColor.clearColor(), size: CGSize(width: 32, height: 32))
        life = 9
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

 次はEnemyを作成するFactoryクラスを作ります。EnemyFactory.swiftというファイルを作って以下のように記述してください。

class EnemyFactory {
    func createEnemy() -> Enemy {
        return Enemy()
    }
}
 
class Enemy1Factory: EnemyFactory {
    override func createEnemy() -> Enemy {
        return Enemy1()
    }
}
 
class Enemy2Factory: EnemyFactory {
    override func createEnemy() -> Enemy {
        return Enemy2()
    }
}
 
class Enemy3Factory: EnemyFactory {
    override func createEnemy() -> Enemy {
        return Enemy3()
    }
}

 最後にゲーム画面での敵生成処理も修正します。GameScene.swiftを以下のように修正してください。

class GameScene: SKScene, SKPhysicsContactDelegate {
    // 省略
 
    func createEnemy() {
        guard let view = view else {
            return
        }
 
        let enemy = enemyFactory().createEnemy() // この行を修正
 
        // 省略
    }
 
    func enemyFactory() -> EnemyFactory {
        switch stage {
        case 1: return Enemy1Factory()
        case 2: return Enemy2Factory()
        case 3: return Enemy3Factory()
        default: return EnemyFactory()
        }
    }
 
    // 省略
}

 以上で敵の出し分けができるようになりました。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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