在Sprite Kit中的func update(currentTime: CFTimeInterval)
方法中,我有一个gameTicker
,每次更新游戏时都会增加一个整数。
当gameTicker
可以被500整除时,我暂停自动收录器,通过移除didMoveToView()
中调用的原始操作禁用产生的敌人,并启动一个简短的nextLevelDelayTicker
延迟。在nextLevelDelayTicker
到达100
后,我再次开始递增原始gameTicker
,将nextLevelDelayTicker
重置为0,然后再次开始生成敌人。
基本上,一旦nextLevelDelayTicker
等于100
,我只想运行条件一次的内容。我在那里添加了一个print("yolo")
,看看当条件满足时它是否只被称为一次,实际上它是。但是,出于某种原因runAction(spawnAction, withKey: "spawnAction")
被多次调用。一旦条件self.nextLevelDelayTicker.getTimePassed() == 100
得到满足,就会在很短的时间内产生大量的敌人。
如何多次调用runAction(spawnAction, withKey: "spawnAction")
,但print("yolo")
只被调用一次?
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
if gameTicker.isActive == true {
gameTicker.increment()
}
// If gameTicker is equal to 5 seconds, increase enemy amount
if gameTicker.getTimePassed() % 500 == 0 {
self.enemyAmount += 1
self.removeActionForKey("spawnAction")
gameTicker.isActive = false
}
// If level has been completed and last ghost has been killed, activate next level scene
if gameTicker.isActive == false && enemyArray.count == 0 {
self.nextLevelDelayTicker.increment()
if self.nextLevelDelayTicker.getTimePassed() == 100 {
print("YOLO")
self.gameTicker.isActive = true
self.nextLevelDelayTicker.reset()
let spawnAction = SKAction.repeatActionForever(
SKAction.sequence([
SKAction.waitForDuration(2),
SKAction.runBlock({
[unowned self] in
self.spawnEnemy()
})
])
)
runAction(spawnAction, withKey: "spawnAction")
}
}
}
答案 0 :(得分:0)
事实证明我是渡渡鸟头。 runAction(spawnAction, withKey: "spawnAction")
不被多次调用,它是:
if gameTicker.getTimePassed() % 500 == 0 {
self.enemyAmount += 1
self.removeActionForKey("spawnAction")
gameTicker.isActive = false
}
多次被召唤,向self.enemyAmount
全局变量添加大量敌人,该变量用于确定在spawnAction
运行时产生的敌人数量。
我为条件添加了一个标志,每个级别循环只调用一次,而每个游戏周期只有300次:
if gameTicker.getTimePassed() % 500 == 0 && gameTicker.isActive == true{
self.enemyAmount += 1
self.removeActionForKey("spawnAction")
gameTicker.isActive = false
print("STOP SPAWNING")
}