onDrawFrame外部的Android OpenGL gameloop
我在为我的第一个游戏创建gameloop时遇到问题。我读了很多关于这方面的书,但还是不明白。它基于OpenGL,所以我使用onDrawFrame作为游戏循环,在我的手机上运行良好。问题是onDrawFrame的刷新时间取决于硬件,所以在某些设备上运行速度太快。因此,我想要的是添加一个单独的游戏循环,它将在所有智能手机上以恒定的时间周期刷新自己。(onDrawFrame将只处理它应该处理的图形) 到目前为止,我有:onDrawFrame外部的Android OpenGL gameloop,android,opengl-es,runnable,game-loop,Android,Opengl Es,Runnable,Game Loop,我在为我的第一个游戏创建gameloop时遇到问题。我读了很多关于这方面的书,但还是不明白。它基于OpenGL,所以我使用onDrawFrame作为游戏循环,在我的手机上运行良好。问题是onDrawFrame的刷新时间取决于硬件,所以在某些设备上运行速度太快。因此,我想要的是添加一个单独的游戏循环,它将在所有智能手机上以恒定的时间周期刷新自己。(onDrawFrame将只处理它应该处理的图形) 到目前为止,我有: myGameRenderer类,包含所有openGl内容和onDrawFrame
- myGameRenderer类,包含所有openGl内容和onDrawFrame
- 支持触摸事件的myGLSurfaceView
- myGameActivity
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
}
但是我想我不明白-我的意思是我创建了这个runnable。
我尝试将其放置在onCreateSurface中启动它,但没有效果。
那么-generall的想法行吗?如何开始循环?放在哪里?或者我应该使用其他方法吗?行很简单-我只是缺少r.run(); 但总有一些东西。现在它可以按照我的要求工作-我的意思是帧不依赖于硬件,但一切都不像以前那么平滑-3d中的部分对象在闪烁。看起来有些对象明显画得更快,有些更晚,看起来很难看。
那么我做错了什么?有更好的方法吗?你应该看看有关帧率独立性的内容。这是一个很好的第一步。Thx,我会看看这个主题。也许会help@Geobits-感谢您的链接,同时也回答了一篇非常好的文章的要点,该文章讨论了帧渲染/游戏更新的不同方法。有关基于onDrawFrame()的游戏循环。@fadden Thx很多人,我会研究:)我刚刚用solution解决了问题,所以如果有人有类似的问题,我也会从这里推荐解决方案: