gpt4 book ai didi

swift - 以无限期递减的间隔运行等待 Action 的函数

转载 作者:行者123 更新时间:2023-11-28 16:10:38 25 4
gpt4 key购买 nike

我的代码在 columnTime 的持续时间内运行等待操作,然后运行一段代码。这导致 block 运行一次,然后等待时间,然后阻塞,然后等待时间,等等。

func startSpawning(){
print(columnTime)
let wait = SKAction.waitForDuration(columnTime)
let block = SKAction.runBlock({[unowned self] in self.spawnObstacle()})
let sequence = SKAction.sequence([wait, block])
runAction(SKAction.repeatActionForever(sequence), withKey: "spawning")
} //startSpawning

我想要以下内容:WAITING 5 秒,运行将列时间减少到 4.95 秒的 block 代码,运行等待 4.95 秒,运行将等待时间减少到 4.90 秒的 block 代码,运行等待 4.90 秒,等等。

我尝试了以下操作,但它一遍又一遍地运行每个操作,没有任何等待。我的输出充满了来自等待和 block 代码块的打印语句。

func startSpawning(){
let wait = SKAction.runBlock({[unowned self] in self.waitFunc()})
let block = SKAction.runBlock({[unowned self] in self.spawnObstacle()})
let sequence = SKAction.sequence([wait, block])
runAction(SKAction.repeatActionForever(sequence), withKey: "spawning")
} //startSpawning
func waitFunc() -> SKAction{
print("running wait func")
return SKAction.waitForDuration(getColumnTime())
}
func getColumnTime() -> NSTimeInterval {
return columnTime
}

最佳答案

您不了解变量的工作原理,一旦您将等待分配给序列,就是这样。序列将始终是创建时分配的任何内容。创建一个新实例并不能解决这个问题,因为旧实例仍在序列中。您需要在每次运行序列时生成一组新的 Action ,而不是重复 Action :

var columnTime : NSTimeInterval = 10

func startSpawning(){
let wait = SKAction.waitForDuration(columnTime)
let block = SKAction.runBlock()
{
[unowned self] in
columnTime -= 0.1
self.spawnObstacle()
self.startSpawning()
}
let sequence = SKAction.sequence([wait, block])
removeActionForKey("spawning")
runAction(sequence, withKey: "spawning")
}

关于swift - 以无限期递减的间隔运行等待 Action 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39616783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com