运行 以无限期递减的间隔等待操作的函数
Function to run a wait action at decreasing intervals indefinitely
我有代码,其中 运行 是持续 columnTime 的等待操作,然后是 运行 代码块。这导致阻塞 运行ning 一次,然后等待时间,然后阻塞,然后等待时间,等等
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
我想要以下内容:等待 5 秒,运行 块代码将列时间减少到 4.95 秒,运行 等待 4.95 秒,运行 块代码减少等待时间到 4.90 秒,运行 等待 4.90 秒,等等
我尝试了以下操作,但它 运行 一遍又一遍地执行每个操作,没有任何等待。我的输出充满了来自等待和块代码块的打印语句。
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
}
您不了解变量的工作原理,一旦您将等待分配给序列,就是这样。序列将始终是创建时分配的任何内容。创建一个新实例并不能解决这个问题,因为旧实例仍在序列中。每次 运行 通过序列时,您都需要产生一组新的动作,而不是重复动作:
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")
}
我有代码,其中 运行 是持续 columnTime 的等待操作,然后是 运行 代码块。这导致阻塞 运行ning 一次,然后等待时间,然后阻塞,然后等待时间,等等
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
我想要以下内容:等待 5 秒,运行 块代码将列时间减少到 4.95 秒,运行 等待 4.95 秒,运行 块代码减少等待时间到 4.90 秒,运行 等待 4.90 秒,等等
我尝试了以下操作,但它 运行 一遍又一遍地执行每个操作,没有任何等待。我的输出充满了来自等待和块代码块的打印语句。
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
}
您不了解变量的工作原理,一旦您将等待分配给序列,就是这样。序列将始终是创建时分配的任何内容。创建一个新实例并不能解决这个问题,因为旧实例仍在序列中。每次 运行 通过序列时,您都需要产生一组新的动作,而不是重复动作:
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")
}