动作不会等到函数调用结束
action does not wait till function call ends
我有 2 个动作按顺序排列。在第一个动作中,我调用了一个方法来计算下一个动作的新等待时间。下一个动作只是等待这个持续时间,但第二个动作总是立即执行,所以时间必须为 0。我调试了它,在 spawnFlowers 方法中我得到的时间返回为 3.5 秒。
这是我的 2 个动作
let spawnFlowerAction = SKAction.run {
self.WaitTime = self.calculateWaitingTime()
}
let waitForNewFlower = SKAction.wait(forDuration: self.WaitTime)
我是这样执行的:
let spawnSeq = SKAction.sequence([spawnFlowerAction, waitForNewFlower])
let spawnRepeat = SKAction.repeat(spawnSeq, count: 4)
self.run(spawnRepeat)
结果:4 次生成而无需等待,在控制台中通过 calculateWaitingTime 函数(生成发生的时间)打印 4 个不同的计算时间
解决这个问题的好方法是什么?
问题在于尝试在创建动作后动态更改 SKActions 中使用的值。例如,当您的 WaitTime
变量发生变化而 运行 spawnFlowerAction
时,waitForNewFlower
操作的等待时间不会动态变化,因为它没有引用 WaitTime
。相反,它的等待值是您声明 let waitForNewFlower = SKAction.wait(forDuration: self.WaitTime)
时变量 WaitTime
的值(我猜最初是 0)。同样的概念也适用于您的其他两个生成操作。
我通常使用 dispatch Queue 来处理这些事情,但要使用 SKActions,这里有一个函数。只需调用一次并输入您希望它重复的次数。
func spawnRepeat(count: Int) {
//Put whatever code to spawn flower here
print("SPAWN FLOWER")
if count > 1 {
//Recalculate WaitTime
WaitTime = calculateWaitingTime()
let waitAction = SKAction.wait(forDuration: WaitTime)
run(waitAction, completion: { self.spawnRepeat(count: count - 1) })
}
}
我有 2 个动作按顺序排列。在第一个动作中,我调用了一个方法来计算下一个动作的新等待时间。下一个动作只是等待这个持续时间,但第二个动作总是立即执行,所以时间必须为 0。我调试了它,在 spawnFlowers 方法中我得到的时间返回为 3.5 秒。
这是我的 2 个动作
let spawnFlowerAction = SKAction.run {
self.WaitTime = self.calculateWaitingTime()
}
let waitForNewFlower = SKAction.wait(forDuration: self.WaitTime)
我是这样执行的:
let spawnSeq = SKAction.sequence([spawnFlowerAction, waitForNewFlower])
let spawnRepeat = SKAction.repeat(spawnSeq, count: 4)
self.run(spawnRepeat)
结果:4 次生成而无需等待,在控制台中通过 calculateWaitingTime 函数(生成发生的时间)打印 4 个不同的计算时间
解决这个问题的好方法是什么?
问题在于尝试在创建动作后动态更改 SKActions 中使用的值。例如,当您的 WaitTime
变量发生变化而 运行 spawnFlowerAction
时,waitForNewFlower
操作的等待时间不会动态变化,因为它没有引用 WaitTime
。相反,它的等待值是您声明 let waitForNewFlower = SKAction.wait(forDuration: self.WaitTime)
时变量 WaitTime
的值(我猜最初是 0)。同样的概念也适用于您的其他两个生成操作。
我通常使用 dispatch Queue 来处理这些事情,但要使用 SKActions,这里有一个函数。只需调用一次并输入您希望它重复的次数。
func spawnRepeat(count: Int) {
//Put whatever code to spawn flower here
print("SPAWN FLOWER")
if count > 1 {
//Recalculate WaitTime
WaitTime = calculateWaitingTime()
let waitAction = SKAction.wait(forDuration: WaitTime)
run(waitAction, completion: { self.spawnRepeat(count: count - 1) })
}
}