【发布时间】:2018-04-24 15:26:09
【问题描述】:
我正在使用 Opengl ES 2.0 为 Android 构建一个非常简单的“游戏”。游戏玩法包含一个根据用户输入加速或减速的移动点。 当然,单帧中点覆盖的空间取决于从上一帧经过的时间量,因此要计算这个空间,我将点的速度乘以这个时间量。
我也有一个根据我的点移动的相机,但我翻转 x 和 y 轴以使相机跟随该点。
我的问题是点(和相机)移动不顺畅。顺便说一句,我不明白为什么,因为 FPS 总是 60 或至少 55(我通过外部应用程序检查它们)。
如果我在一帧和下一帧之间总是使用相同的时间,那么一切都很顺利。
顺便说一句,为了了解问题所在,我构建了一个非常简单的 FPS 计数器,并通过 Log.d 记录 FPS(或经过的时间)。在这里,我注意到值在 45 到 80 FPS 之间变化。现在,我认为如果我可以将此值锁定为最大值 60(这是大多数智能手机的屏幕刷新率),那么移动会更加流畅。 所以我的问题是:如何避免我的应用在上一帧过去 0.0166 秒之前绘制一帧?
感谢您的阅读,对不起我的英语!
【问题讨论】:
-
我认为大多数(全部?)智能手机已经使用垂直同步,因此它们肯定会被锁定为 60 fps。你如何测量你的帧速率?给我们看一些代码。
-
@Thomas 我创建了一个类,它存储最后两帧的时间并减去它们
标签: java android opengl-es opengl-es-2.0