【发布时间】:2016-07-14 02:11:36
【问题描述】:
我正在尝试在 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])) }
}
【问题讨论】:
标签: swift sprite-kit skaction completion