2016-03-26 29 views
2

我试图在SpriteKit游戏中产生敌人的波浪。 我认为这段代码会起作用。我怎样才能让runAllWaves()等待每一波完成,然后再调用下一个波? (我知道,如果一切都失败了我就可以增加waveWait时间人为地从一开始就不是每一波结束计数)SpriteKit Swift 2操作:产生敌人的波

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])) } 

} 

回答

0

你为什么不实行runNextWave功能和调用,在结束的runWave?你有数组来定义每个波的属性;如果数组中的第一个元素确定了波形的属性,那么在runWave期间,您可以删除这些条目,并在runWave的末尾再次调用runWave,直到数组为空或满足其他条件。