gri*_*liz 21 android opengl-es
我有一个在Android中运行JNI的C++游戏.由于场景复杂性,帧速率从大约20-45fps变化.任何高于30fps的东西对于游戏都是愚蠢的; 它只是燃烧电池.我想将帧速率限制为30 fps.
是否有隐藏在API中的"capFramerate()"方法?有任何可靠的方法吗?
小智 38
Mark的解决方案几乎是好的,但并不完全正确.问题是交换本身需要相当长的时间(特别是如果视频驱动程序是缓存指令).因此,您必须考虑到这一点,否则您将以低于预期的帧速率结束.所以事情应该是:
在某个地方(如构造函数):
startTime = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
然后在渲染循环中:
public void onDrawFrame(GL10 gl)
{
endTime = System.currentTimeMillis();
dt = endTime - startTime;
if (dt < 33)
Thread.Sleep(33 - dt);
startTime = System.currentTimeMillis();
UpdateGame(dt);
RenderGame(gl);
}
Run Code Online (Sandbox Code Playgroud)
这样,您将考虑交换缓冲区所需的时间和绘制帧的时间.
使用GLSurfaceView时,在Renderer的onDrawFrame中执行绘图,该绘图由GLSurfaceView在单独的线程中处理.只需确保每次调用onDrawFrame都需要(1000/[帧])毫秒,在你的情况下需要33毫秒.
为此:(在您的onDrawFrame中)
而已.
归档时间: |
|
查看次数: |
29704 次 |
最近记录: |