4

我在为我的第一款游戏创建游戏循环时遇到了问题。我已经阅读了很多关于它的内容,但仍然无法弄清楚。它基于 OpenGL,所以我使用 onDrawFrame 作为游戏循环,它在我的手机上运行良好。问题是 onDrawFrame 的刷新时间取决于硬件,因此它在某些设备上运行速度太快。所以我想要的是添加一个单独的游戏循环,它会在所有智能手机上以恒定的时间周期自我刷新。(并且 onDrawFrame 只会处理应有的图形)

至于现在我有:

  • myGameRenderer 类与所有 openGl 东西一个 onDrawFrame
  • 支持触摸事件的 myGLSurfaceView
  • 我的游戏活动

onDrawFrame 激活 myGameUpdate 函数,该函数根据来自 myGLSurfaceView 的信息控制游戏中所有对象的位置变化

我尝试过创建新的 Runnable,但它似乎不起作用,我不知道如何启动该 runnable 以及我应该将它放在哪里(我试图将它放在 myGameRenderer 类中,但它没有t似乎工作,没有什么动静:

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 中以启动它,但没有效果。所以 - 一般的想法可以吗?以及如何开始循环?放在哪里?或者我应该使用其他方式吗?

4

1 回答 1

0

好的,这很简单——我只是想念 r.run(); 但总有一些东西。现在它可以按我的意愿工作了——我的意思是帧不依赖于硬件,但一切都不像以前那么流畅了——3d 中的部分对象正在闪烁。似乎有些物体明显绘制得更快,有些物体绘制得更晚,看起来很难看。那么我做错了什么?有没有更好的办法?

于 2013-02-12T20:13:32.473 回答