onDrawFrame外的Android OpenGL gameloop

时间:2013-02-12 19:25:18

标签: android opengl-es runnable game-loop

我在为我的第一个游戏创建游戏循环时遇到了问题。我已经阅读了很多关于它的内容,但仍然无法弄明白。它基于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 个答案:

答案 0 :(得分:0)

好的很简单 - 我只是缺少r.run(); 但总的来说还有一些东西。现在它按照我想要的方式工作 - 我的意思是框架不依赖于硬件,但是一切都不像它那样平滑 - 并且3d中的一部分对象是闪烁的。看起来像某些物体明显被绘制得更快,有些后来看起来很难看。 那么我做错了什么?还有更好的方法吗?