ここでは「1日で基本が身に付く Swift アプリ開発超入門」の CHAPTER 8 P183〜186「ミサイルを発射しよう」について補足説明をします。
本書でも説明している通り、画面をタップしたというユーザーの操作は以下2つのメソッドで取得できます。
touchesBegan はタップ開始時(指が触れた時)に実行されるメソッドで、touchesEnded はタップ終了時(指が離れた時)に実行されるメソッドです。
本書では、touchesBegan メソッドを使用して、ミサイルを発射させています。
画像の読み込み方法と画面への表示方法は、自機と敵と同様ですので詳しくは説明しませんが、タップされた時にミサイルの画像を表示させるだけであれば、以下のようなコードを書きます。
import SpriteKit
import GameplayKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// ミサイル画像の読み込み
let missile = SKSpriteNode(imageNamed: "missile")
// ミサイルを画面に表示する
addChild(missile)
}
}
実行例を以下に示します。
ミサイルの表示位置の計算とコードは本書を参照ください。
touchesBegan でミサイルの表示をしましたが、移動と削除もこのメソッド内で行います。
移動と削除の方法は [CHAPTER 8] 敵を表示させるメソッドを作成しようで説明していますので参考にしてください。
敵は画面下に向かって移動するのに対し、ミサイルは画面上に向かって移動するという点だけが異なります。
ミサイルの移動に関するコードを以下に示します。
// 画面上に移動するアクションの作成
// (指定した位置(画面の上)まで0.5秒で移動させる)
let move = SKAction.moveTo(y: frame.height, duration: 0.5)
// 削除するアクション
let remove = SKAction.removeFromParent()
// アクションを連続して動かす
missile.run(SKAction.sequence([move, remove]))
画面がタップ後、ミサイルを表示して消えるまでのコード全体を以下に示します。このコードはミサイル部分のみのコードですので自機や敵の表示コードは省略しています。
import SpriteKit
import GameplayKit
class GameScene: SKScene {
//var timer : Timer?
//let motionMgr = CMMotionManager()
override func didMove(to view: SKView) {
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// ミサイル画像の読み込み
let missile = SKSpriteNode(imageNamed: "missile")
// 画面上に移動するアクションの作成
// (指定した位置(画面の上)まで0.5秒で移動させる)
let move = SKAction.moveTo(y: frame.height, duration: 0.5)
// 削除するアクション
let remove = SKAction.removeFromParent()
// アクションを連続して動かす
missile.run(SKAction.sequence([move, remove]))
// ミサイルを画面に表示する
addChild(missile)
}
}
実行結果は以下のようになり、画面をタップするごとにミサイルが上に向かって移動して消えます。