ステージを増やしたので、次は敵の種類も増やしていきます。ステージが進むに従って敵が強くなっていくようにします。
まずは敵画像を追加します。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.