使用我迄今为止所使用的语言和库,总有一个选项可以将程序的主循环(游戏或任何具有不断变化的上下文的内容)同步到当前显示的刷新率。所以我可以选择打开VSYNC,或者让循环每秒执行多次。我指的是SDL2,带GLFW的OpenGL 3.0,HTML5画布等。
我现在在OpenGL ES 2.0中寻找类似于Android的东西,但到目前为止我能找到的所有示例代码都只使用了睡眠的变化并将帧速率设置为60或30.所以它们基本上计算了自从那以来的时间量。最后一次迭代,并且仅在已经过了给定时间量的情况下进一步前进并调用requestRender()函数(在每秒60帧的情况下为0.016ms等)。
我只是想知道是否有比这更好的选择。我只是担心并非每部手机都具有相同的屏幕刷新率,因此任何数量的硬编码似乎都不是理想的方法。据我所知,弄清楚给定手机的刷新率并不是那么简单,或者至少用“纯”Java和OpenGL是不可能的。
您需要做的是匹配显示器的帧速率,并根据自上一帧开始经过的时间推进游戏状态。有两种方法可以解决这个问题:
来源:https://source.android.com/devices/graphics/arch-gameloops