SpriteKitでゲーム その1- SPACE SHOOTER⑦
今回は、 player の残機数を表示とカウントの処理を作成します。
使用するプロパティを var player: SKSpriteNode! の直前に追加
//playerの残機数を格納する配列を準備する。 var livesImages = [SKSpriteNode]() //playerの残機数の初期値。 var lives = 3 var player: SKSpriteNode!
呼び出しを createScore() の直後に追加。
createScore()
//playerの残機数を表示。
createLives()
その処理内容を func createScore() の直前に追加。
func createLives() { for i in 0 ..< lives { let spriteNode = SKSpriteNode(imageNamed: "player") //表示する位置。 spriteNode.position = CGPoint(x: frame.minX + 40 + CGFloat(i * 99) * 0.25, y: UIScreen.main.bounds.height * 0.90) //スケールを調整する。 spriteNode.setScale(0.25) //GameSceneに追加。 addChild(spriteNode) //配列に入れる。 liveImages.append(spriteNode) } }
for i in 0..< lives でlives に初期値3なのでゲーム開始直後は残機数が3つ表示される、後はこれを player が enemy と衝突するたびに-1するようにして再表示する処理を作成すればよい。
次はその処理を作成する。
func subtractLife() を作成します。
以下の呼び出しを didBegin() 内部の createPlayer() の呼び出し直前に追加します。
//playerの残機数を変更する。
subtractLife()
追加すると、以下のようになります。
func didBegin(_ contact: SKPhysicsContact) { if contact.bodyA.node?.name == "laser" || contact.bodyB.node?.name == "laser" { //省略 } if contact.bodyA.node?.name == "player" || contact. bodyB.node?.name == "player" { //省略 contact.bodyA.node?.removeFromParent() contact.bodyB.node?.removeFromParent() //playerの残数をのカウントと表示。 subtractLife() createPlayer() } }
subtractLife() の処理内容を作成します。
func createLives() の直前に追加します。
func subtractLife() { //初期値から-1する。 lives -= 1 //関数内部で使う変数を設定。 var life: SKSpriteNode if lives == 2 { life = livesImages[0] } else if lives == 1 { life = livesImages[1] } else { life = livesImages[2] } //GameSceneから削除する。 life.removeFromParent() } func createLives() { //省略 }
配列 livesImages に入っている SpriteNode を lives の数に応じてSpriteNode をindexで指定し 内部変数 life に入れなおしてそれを削除することで player の残機数をカウントしているように見せています。 今回は、ちょと短いですが以上になります。
また次回。