2010-11-05 35 views

回答

3

请勿使用帧速率来测量时间。用时间来衡量时间。 GC通行证可能需要3/10秒,其他任务可以在后台启动等等。

总是有一个系统/设置会比您想象的慢。

然后,您不指定以像素为单位的速度,但以像素/秒为单位。每帧动画需要一定的时间等等。在你的游戏引擎中,当计算下一帧时,你的输入之一是“从最后一帧开始已经过了多少时间”。您将该值确定为秒的一小部分,并将速度/秒乘以该分数。结果是Given Thing从最后一帧开始移动了多远。

请注意,非常慢的帧速率可能会对碰撞检测造成严重破坏,特别是对于快速移动的物体。如果事情1在帧之间完全通过第2项,只是检查BBoxes或半径不会削减它。睡眠()是你的朋友。在帧处理开始时,请致电System.currentTimeMilis()。在帧处理结束时(包括渲染),再次检查当前时间。如果差异不够长,需要足够的时间睡眠(N)以匹配您期望的帧速率。所以如果你想要20fps最大,那么每个帧应该需要50ms(1000ms/20 = 50ms)。如果一帧只花了10ms来模拟和渲染,那么在移动到下一帧之前,您需要睡眠另一个(50ms - 10ms =)40ms。

或者,您可以尽可能快地继续运行模拟,并且每隔一段时间只渲染一次屏幕。这对电池寿命没有多大帮助(虽然OpenGL硬件加速如果来自我的Evo的热量有任何迹象,但价格昂贵),但可以提供非常流畅的体验。哎呀,你可以开始计算这个点上的运动模糊。

相关问题