ステージを増やしたので、次は敵の種類も増やしていきます。ステージが進むに従って敵が強くなっていくようにします。
まずは敵画像を追加します。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()
}
}
// 省略
}
以上で敵の出し分けができるようになりました。
開発者向けiOS 9、WatchOS 2、Swift 2、Xcode 7の新機能と新しいApple Developer Programの参考情報まとめ
Apple WatchやiPhoneのアプリを作ろう! Playgroundで学ぶSwiftの基礎―変数、定数、型、演算
iOSアプリ開発でObjective-CからSwiftに移行するための手順、注意点まとめ〜言語仕様の違いは? 連携時の呼び出し方は?Copyright © ITmedia, Inc. All Rights Reserved.