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