2

SpriteKit ゲームで敵の波を生成しようとしています。このコードはうまくいくと思いました。runAllWaves()各ウェーブが完了するのを待ってから次のウェーブを呼び出すにはどうすればよいですか? (他のすべてが失敗した場合は、waveWait 時間を人為的に増やして、各ウェーブの終わりではなく最初から数えることができます)

import SpriteKit

let waveWait =  [5, 10, 10] // pause before each wave
let waveCount = [10, 20, 50] // num. of enemies in each wave
let waveDelay = [3, 2, 1] // pause before each enemy spawns
let waveHealth = [1, 2, 3] // enemy health for each wave

var index:Int = 0

var spawn = SKAction()
var delay = SKAction()
var spawndelay = SKAction()
var repeatspawndelay = SKAction()
var wait = SKAction()
var dowave = SKAction()

var doAllWaves = SKAction()


class GameScene: SKScene {

    override func didMoveToView(view: SKView) {

        print("begin!")

         runAllWaves()
    }

    func runWave(index:Int){

        spawn = SKAction.runBlock({ self.spawnEnemy(index) })
        delay = SKAction.waitForDuration(NSTimeInterval(waveDelay[index]))
        spawndelay = SKAction.sequence([spawn, delay])
        repeatspawndelay = SKAction.repeatAction( spawndelay , count: waveCount[index])

        self.runAction(repeatspawndelay)

    }

    func runAllWaves(){
        runAction(SKAction.sequence([
            SKAction.waitForDuration(NSTimeInterval(waveWait[index])),
            SKAction.runBlock({ self.runWave(index)  }) ]),
            completion: {
                index += 1
                if index < 3 { self.runAllWaves() }})
    }

    func spawnEnemy(index:Int){ print("spawn enemy with health: " + String(waveHealth[index])) }

}
4

1 に答える 1

0

runNextWave機能を実装して、最後にそれを呼び出してみませんrunWaveか? 各ウェーブの属性を定義する配列があります。配列の最初の要素がそのウェーブの属性を決定する場合、runWaveそれらのエントリを削除し、最後に配列が空になるか、他の条件が満たされるまでrunWave単に再度呼び出すことができます。runWave

于 2016-03-26T12:58:31.487 に答える