任何时候你想在 sprite-Kit 游戏中以固定的时间间隔做某事,你可以按如下方式实现:
首先声明 2 个属性(在您的类中但在所有函数定义之外)
var timeOfLastThing: CFTimeInterval = 0.0
var timePerThing: CFTimeInterval = 2.0 // How often to do the thing
(如果你想要每 2 秒做的事情是生成一个怪物,那么你可以调用这些 timeOfLastMonsterSpawn 和 timePerMonsterSpawn,但这取决于你)
然后,在Update 中检查是否已超出timePerThing。如果是这样,请调用您的 doThing 函数,它会执行您需要的操作,然后重置自上次调用以来的时间:
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
if (currentTime - timeOfLastThing > timePerThing) {
doThing()
self.timeOfLastThing = currentTime
}
}
func doThing() {
// Your spawn code here
}
使doThing 成为一个单独的函数(而不是在update() 中排队)的优点是您可以从didMoveToView 或任何其他地方调用它以在正常时间之外生成对象-控制循环。
您可以根据需要更改timePerThing 的值,以控制事情发生的速度。
您还可以考虑创建一个 SKAction 以指定时间间隔运行 doThing,但我认为要更改生成对象的速率,您必须删除并重新创建 SKAction,它您可以在 timePerThing 的设置器中执行此操作。
您不应该在 SpriteKit 中真正使用 NSTimer,因为 SpriteKit 引擎将不知道计时器正在做什么并且无法控制它(一个示例是即使您设置了场景,计时器也会继续运行并做一些事情暂停)。