獣は月夜に何を見る...

SpriteKitでゲーム その1- SPACE SHOOTER⑦

f:id:tukumosanzou:20180702205113p:plain

今回は、 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 の数に応じてSpriteNodeindexで指定し 内部変数 life に入れなおしてそれを削除することで player の残機数をカウントしているように見せています。

今回は、ちょと短いですが以上になります。

また次回。