我从我的GameScene
调用了下面的类func update(_ currentTime:TimeInterval)
因为它在那里被召唤,所以我的班级每秒都被召唤,这引导我去做。我目前有自我物理系统?.linearDamping = 0.6但是我如何增加这个数字以便我也可以提高速度?我打算使用另一个Timer,直到我意识到我的SKSpriteNode类每秒都被调用。不太确定如何解决这个问题,任何想法?我基本上希望每2.0秒减少一次这个数字,而不会让更新功能受阻。
答案 0 :(得分:2)
任何时候你想在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
的{{1}},但我认为要更改生成对象的速率,您必须删除并重新创建SKAction,您可以在doThing
的设置器中执行此操作。
你不应该在SpriteKit中真正使用NSTimer,因为SpriteKit引擎将不知道计时器正在做什么并且无法控制它(一个例子是即使你设置场景,计时器仍在运行并做东西暂停了。)