【发布时间】:2014-12-23 13:41:11
【问题描述】:
在我的场景中,我已经覆盖了默认的-(void) update: (CFTimeInterval) currentTime 函数。值得注意的是,currentTime 变量实际上是自可能的任意系统时间开始以来经过的时间,而不是自上一帧以来的经过时间。此更新功能贯穿我所有的角色,并根据每秒速度和自上次更新以来经过的时间(以秒为单位)应用它们的移动。获取自上次更新以来经过的时间(以秒为单位)的常用方法是在您的类中有一个 NSTimeInterval 来存储上次更新,然后从当前更新时间中减去上次更新时间,得到经过的秒数。但是,初始经过的时间不为零。因此,从一个非常大的数字中减去零会产生数万秒的感知经过时间。因此,任何已经在第一帧开始运动的角色都会移动到很远的地方。
对此的明显解决方案是最初将上次更新时间设置为初始经过的时间。但是,我在SKScene,或者更具体地说,在-(void) didMoveToView: (SKView *) view 中看不到任何方法来访问它。
另一种解决方案是将初始 CFTimeInterval 设置为负数,例如 -1。然后,检查每个更新函数的时间是否为-1。如果是这样,则将自上次更新以来的经过时间设置为0,否则将执行普通的elapsedTime = currentTime - lastUpdate。然而,每一个更新函数都执行这个 if 语句看起来很混乱且不需要。
有没有其他方法可以准确地找到自上次更新以来经过的时间?
【问题讨论】:
-
除非您的游戏是实时模拟,否则以这种方式使用时间间隔是否有意义?如果游戏跳过一两次更新,让角色立即跳到新位置有意义吗?这对用户公平吗?另外,当用户按下 Home 键然后稍后重新启动游戏时,elapsedTime 会发生什么情况?
标签: objective-c sprite-kit skscene