Tyl*_*own 8 time xcode sprite-kit swift xcode6
我是编程和Spritekit的新手,我有兴趣探索毫秒和帧率之间的关系,以及如何将更新函数用作两者之间的中介.
帧率与毫秒
从本质上讲,帧速率和时间之间的主要区别在于时间始终是一致的,而帧速率则不然(由于密集的图形程序,它可能会下降).但是,时间通常在SKScene的更新事件(每帧调用)期间进行检查和设置,所以我想弄清楚时间是如何正确计算的,当你不知道有多少帧会在一秒钟内.
例
我目前正在观看太空射击游戏的更新事件,其中更新功能负责计算产生另一个外星人之前的时间间隔.您可以在此处查看完整代码:http://www.globalnerdy.com/2014/08/10/a-simple-shoot-em-up-game-with-sprite-kit-and-swift-part-one-最后一件事-第一最完整的项目/
// Called exactly once per frame as long as the scene is presented in a view
// and isn't paused
override func update(currentTime: CFTimeInterval) {
var timeSinceLastUpdate = currentTime - lastUpdateTime
lastUpdateTime = currentTime
if timeSinceLastUpdate > 1 {
timeSinceLastUpdate = 1.0 / 60.0
lastUpdateTime = currentTime
}
updateWithTimeSinceLastUpdate(timeSinceLastUpdate)
}
Run Code Online (Sandbox Code Playgroud)
问题
我似乎无法弄清楚为什么timeSinceLastUpdate被设置为1.0/60.我知道它与帧率和秒之间的协调有关,但有人可以向我解释这个吗?另外,为什么我们允许使用小数?我认为时间间隔属于Int类型.
更重要的是,这是为了保持游戏玩法在帧速率下降时减速?谢谢阅读!
ric*_*ter 10
SpriteKit不知道一秒钟内会有多少帧,但它可以告诉你自完成绘制前一帧以来已经过了多少时间.如果您的游戏代码具有任何与时间相关的逻辑,那么您就会想知道这一点.例如,你可能正在做一些类似于position += velocity * timeSinceLastUpdate移动精灵的东西,因为你不需要一个完整的物理引擎.
帧速率是每秒帧数:SpriteKit尝试以每秒60帧的速度运行游戏.这意味着帧之间的时间是1/60秒(约0.01667秒,或16.67毫秒).CFTimeInterval是一个类型别名Double,因此它可以具有非整数值(并且需要,因为您使用的帧时间是几分之一秒).
更重要的是,这是为了保持游戏玩法在帧速率下降时减速?
你得到了关于帧率下降的部分,但效果是向后的.如果帧率明显下降,你实际上想减慢你的游戏速度.
如果使用代码移动屏幕上的太空船,position += velocity * timeSinceLastUpdate如果我们连续丢弃几帧,会发生什么?它的值timeSinceLastUpdate非常高,所以船会跳得很远,而不是稍微移动一下.如果您的应用程序被暂停并且稍后返回到前台,则尤其可能发生这种情况.
此代码检查自上一帧以来是否超过一秒,如果是,则选择继续玩游戏,就像游戏以60 fps运行一样 - 避免跳跃飞船问题.
| 归档时间: |
|
| 查看次数: |
5947 次 |
| 最近记录: |