連載
iOS 9のReplayKitでゲームプレー動画を撮影&シェア:iOS SDKとSwiftで始めるゲーム作成入門(7)(2/4 ページ)
iPhoneゲームをSwift言語で作成してみたいという初心者向けにiOSのゲームフレームワークを使った作り方を一から解説する入門連載。今回は、ステージを1から3に増やし、出てくる敵の種類もステージに応じて変わるようにします。さらに「ReplayKit」というフレームワークも使ってプレー動画の撮影・共有機能を実装します。
ステージによって敵の種類を変える
ステージを増やしたので、次は敵の種類も増やしていきます。ステージが進むに従って敵が強くなっていくようにします。
まずは敵画像を追加します。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.
関連記事
開発者向け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の基礎―変数、定数、型、演算
本連載では、これからプログラミングやiPhoneアプリ開発を始めてみたい方を対象に、開発に必要な知識を基礎から解説していきます。今回は、Swiftの変数、定数、型、演算などについてサンプルプログラムを交えて解説します。iOSアプリ開発でObjective-CからSwiftに移行するための手順、注意点まとめ〜言語仕様の違いは? 連携時の呼び出し方は?
開発生産性や品質を向上させたいiOSアプリ開発者のためにObjective-CからSwiftへ移行するメリットや手順、注意点など勘所をまとめて紹介します。