Android OpenGL游戏循环在onDrawFrame之外

4
我遇到了一个问题,就是在我的第一个游戏中创建gameloop。我已经阅读了很多相关资料,但仍然不能理解它的实现。由于它基于OpenGL,所以我使用onDrawFrame作为游戏循环,它在我的手机上运行良好。但问题是onDrawFrame的刷新时间取决于硬件,所以在某些设备上运行得太快了。因此,我想添加一个单独的游戏循环,在所有智能手机上以恒定的时间间隔自动刷新(而onDrawFrame只负责图形处理)。
目前为止,我有:
- myGameRenderer类,包含所有OpenGL内容和onDrawFrame - 支持触摸事件的myGLSurfaceView - myGameActivity
onDrawFrame会激活myGameUpdate函数,控制游戏中所有对象位置的变化,该信息取自myGLSurfaceView。
我尝试过创建新的Runnable,但似乎并不起作用。我不知道如何启动该Runnable和在哪里放置它(我尝试将其放置在myGameRenderer类中,但似乎没有效果,没有物体移动)。
private final Runnable mUpdateDisplay = new Runnable() {
    @Override
    public void run() {
        update();

}};

private void update() {

//some update stuff blablabla
//some update stuff blablabla


mHandler.postDelayed(mUpdateDisplay,40); //to refresh at 25 fps

}

但我想我不太明白它的概念 - 我的意思是我创建了这个可运行文件。 我尝试将其放置在onCreateSurface中以启动它,但没有效果。 那么 - 总体思路是否正确?如何启动循环?在哪里放置它?或者我应该使用其他方法?


1
你应该了解一下关于帧率独立性的内容。这个问题是一个不错的起点:https://dev59.com/LnVD5IYBdhLWcg3wU5-H。 - Geobits
谢谢,我会查看这个主题。也许它会有所帮助。 - Lucass
@Geobits - 感谢链接,此外这个回答指向了一篇讨论帧渲染/游戏更新不同方法的非常好的文章。 - kerim
1个回答

0

好的,问题很简单 - 我只是漏掉了r.run(); 但总有些问题。现在它按照我想要的方式工作 - 我的意思是帧不依赖于硬件,但一切并不像以前那么顺畅 - 3D中的某些对象闪烁。似乎有些对象可见性更快地绘制出来,有些则较慢,看起来很丑陋。 那我做错了什么?有更好的方法吗?


1
请参考 https://code.google.com/p/android-breakout/ 了解基于 onDrawFrame() 的游戏循环的示例。 - fadden
@fadden 非常感谢,我会研究一下 :) 我刚刚使用了解决方案解决了问题,所以如果有人遇到类似的问题,我也建议从这里获取解决方案:http://stackoverflow.com/questions/5888284/android-putting-the-glsurfaceview-renderer-to-sleep-as-in-thread-sleep20 - Lucass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接