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