如何在Android应用中调节帧率?我希望游戏以恒定速度运行。我的应用程序不需要高帧率,所以我不想要一个,因为这将占用更多的电池,然后必要。
答案 0 :(得分:3)
不要使用帧率来测量时间。用时间来衡量时间。 GC通行证可能需要3/10秒,其他任务可以在后台启动,等等。
总有一个系统/设置会比你想象的要慢。
然后您不以像素为单位指定速度,而是以像素/秒为单位。每个动画帧需要一定的时间等等。在你的游戏引擎中,当计算下一帧时,你的一个输入是“自最后一帧以来经过了多少时间”。您将该值确定为秒的一小部分,并将您的速度/秒乘以该分数。结果是自上一帧以来给定物品的移动距离。
请注意,真正慢的帧速率会对碰撞检测造成严重破坏,特别是对于快速移动的物体。如果Thing 1在帧之间完全穿过Thing 2,只需检查BBoxes或半径就不会削减它。
说了这么多,sleep()就是你的朋友。在帧处理开始时,调用System.currentTimeMilis()
。在帧处理(包括渲染)结束时,再次检查当前时间。如果差异不够长,请睡眠(N)足够的时间以匹配您想要的帧速率。
因此,如果你想要20fps最大值,那么每帧应该花费50ms(1000ms / 20 = 50ms)。如果一帧只需要10ms来模拟和渲染,那么你需要再睡一觉(50ms - 10ms =)40ms才能进入下一帧。
或者,您可以尽可能快地继续运行模拟,并且只会经常渲染屏幕。这对电池续航时间没有多大帮助(尽管如果从我的Evo发出的热量是任何指示,OpenGL硬件加速是昂贵的),但可以提供非常平滑的体验。哎呀,你可以在那时开始计算运动模糊等事情。