我正在制作一款使用更新功能的游戏,每次运行时将SKSpriteNode的位置向下移动6个像素。
它适用于第一个游戏,但后来我在另一个视图控制器的应用程序商店。当我在访问商店后尝试返回游戏时,似乎更新功能的运行速度是原来的两倍。
下面是代码:
override func update(currentTime: CFTimeInterval) {
roadStraight.position.y -= 6.0
}
有没有办法获得更新功能的触发速度,所以我可以保持它不变?感谢
答案 0 :(得分:0)
一些事情:
我会做这样的事情(我希望你使用的是Swift 2.0,这样更漂亮):
let speed = 0.01
var prev : CFTimeInterval!
override func update(currentTime: CFTimeInterval) {
defer { prev = currentTime }
guard prev != nil else { return }
let dt = currentTime - prev
roadStraight.position.y -= speed * dt
}
答案 1 :(得分:0)
好吧,正如您所看到的,update:
函数采用类型为CFTimeInterval
的参数。这给出了从开始经过的时间。因此,您可以创建一个可以在update:
内使用的属性,以便在每次调用update:
时检查时差。但是,update:
函数是Sprite-kit帧渲染的一个组成部分,因此您不能简单地对其进行限制。 Sprite-kit按此顺序运行以呈现每个帧:
而且,您可能已经知道屏幕右下方的每秒帧数或fps计数器远非常数。如果你需要以恒定的速率执行或运行事物,你最好的选择是使用更新:方法,或者,如果绝对必要,那么你可以像我之前描述的那样得到时间差并将它乘以某个常数改变你正在进行的任何动作或定位的大小。