Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
onDrawFrame外部的Android OpenGL gameloop_Android_Opengl Es_Runnable_Game Loop - Fatal编程技术网

onDrawFrame外部的Android OpenGL gameloop

onDrawFrame外部的Android OpenGL gameloop,android,opengl-es,runnable,game-loop,Android,Opengl Es,Runnable,Game Loop,我在为我的第一个游戏创建gameloop时遇到问题。我读了很多关于这方面的书,但还是不明白。它基于OpenGL,所以我使用onDrawFrame作为游戏循环,在我的手机上运行良好。问题是onDrawFrame的刷新时间取决于硬件,所以在某些设备上运行速度太快。因此,我想要的是添加一个单独的游戏循环,它将在所有智能手机上以恒定的时间周期刷新自己。(onDrawFrame将只处理它应该处理的图形) 到目前为止,我有: myGameRenderer类,包含所有openGl内容和onDrawFrame

我在为我的第一个游戏创建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

}
但是我想我不明白-我的意思是我创建了这个runnable。 我尝试将其放置在onCreateSurface中启动它,但没有效果。
那么-generall的想法行吗?如何开始循环?放在哪里?或者我应该使用其他方法吗?

行很简单-我只是缺少r.run(); 但总有一些东西。现在它可以按照我的要求工作-我的意思是帧不依赖于硬件,但一切都不像以前那么平滑-3d中的部分对象在闪烁。看起来有些对象明显画得更快,有些更晚,看起来很难看。
那么我做错了什么?有更好的方法吗?

你应该看看有关帧率独立性的内容。这是一个很好的第一步。Thx,我会看看这个主题。也许会help@Geobits-感谢您的链接,同时也回答了一篇非常好的文章的要点,该文章讨论了帧渲染/游戏更新的不同方法。有关基于onDrawFrame()的游戏循环。@fadden Thx很多人,我会研究:)我刚刚用solution解决了问题,所以如果有人有类似的问题,我也会从这里推荐解决方案: