动作不会等到函数调用结束

时间:2018-11-23 13:49:04

标签: sprite-kit skaction

我有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次而无需等待,从consoleWaitingTime函数(发生生成的情况)中在控制台中打印4个不同的计算时间

什么是解决此问题的好方法?

1 个答案:

答案 0 :(得分:1)

问题是尝试创建动作后动态更改SKActions中使用的值。例如,当您的WaitTime变量在运行spawnFlowerAction时发生更改时,waitForNewFlower Action的等待时间将不会动态更改,因为它没有引用WaitTime。相反,它的等待值是您声明WaitTime时变量let waitForNewFlower = SKAction.wait(forDuration: self.WaitTime)的值(我想最初是0)。您的其他两个生成动作也具有相同的概念。

我通常将调度队列用于此类事情,但是要使用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) })
    }
}
相关问题