【SpriteKit】火の玉を発射する敵を追加してみた

今までの敵キャラは左右に動くだけでしたが、それだけだと物足りないと思い、敵キャラで火の弾を発射するものを追加してみました。

火の玉を生成する

火の玉の生成のために以下のコードをGameSceneに追加しました。

    func fireballSpawn(bee:Bee){
        let absolutePosition = self.convert(bee.position, from: bee.parent!)
        let fireball = Fireball(pos: absolutePosition)
        self.addChild(fireball)
        fireball.fire()
    }

ハチの位置情報を引数にして火の玉をインスタンス化します。

生成した火の玉はGameSceneに追加し、fireで発射するようにしました。

敵キャラを管理する

ハチを引数にして火の玉を生成するコードは作成できました。

それではハチを引数にして渡すにはどうすれば良いでしょうか。

ノードをコピーする時にハチを取り出して配列に入れておきます。

            for child in node.children{
                if let bee = child as? Bee{
                    bees.append(bee)
                }
            }

次に、定期的に火の玉を発射させるために、GameSceneのupdate関数に以下を追加します。

        if fireballTime == 0 || currentTime - fireballTime > fireballInterval
        {
            for bee in bees{
                fireballSpawn(bee: bee)
            }
            fireballTime = currentTime
        }

update関数の中では、ハチが死んだ時に配列から削除するコードも追加しておきます。

//死んだハチを配列から消す。
bees = bees.filter{$0.parent != nil}

こんな感じ。