我在为我的第一个游戏创建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
}
但我想我不知道-我是说我创造了这个可运行的。
我试着把它放在一个createsurface中启动它,但是没有效果。
一般的想法可以吗?如何开始循环?放在哪里?或者我应该用别的方法吗?
最佳答案
好吧,很简单-我只是错过了r.run();
但总有一些东西。现在它按我的要求工作了——我的意思是帧不依赖硬件,但一切都不像以前那么平滑了——而且3D中的部分对象在闪烁。看起来有些物体明显画得更快,有些画得更晚,看起来很难看。
我做错什么了?有更好的办法吗?