4

如何在我的 android 应用程序中调节帧速率?我希望游戏以恒定的速度运行。我的应用程序不需要高帧率,所以我不想要一个,因为那样会占用更多的电池电量。

4

1 回答 1

3

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

总有一个系统/设置运行速度比您想象的要慢。

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

请注意,非常慢的帧速率会对碰撞检测造成严重破坏,尤其是对于快速移动的物体。如果事物 1 在帧之间完全通过事物 2,则仅检查 BBoxes 或半径不会削减它。

说了这么多, sleep() 是你的朋友。在帧处理开始时,调用System.currentTimeMilis(). 在帧处理(包括渲染)结束时,再次检查当前时间。如果差异不够长,请 sleep(N) 足够的时间来匹配您所需的帧速率。

所以如果你想要最大 20fps,那么每帧应该花费 50ms(1000ms / 20 = 50ms)。如果一帧只用了 10 毫秒来模拟和渲染,那么您需要再休眠 (50 毫秒 - 10 毫秒 = ) 40 毫秒,然后才能继续下一帧。

或者,您可以尽可能快地继续运行模拟,并且每隔一段时间只渲染一次屏幕。这不会对电池寿命有太大帮助(尽管如果我的 Evo 发出的热量有任何迹象,OpenGL 硬件加速会很昂贵),但可以带来非常流畅的体验。哎呀,您可以在那时开始计算运动模糊之类的东西。

于 2010-11-05T18:50:14.517 回答