我正在创建一个游戏循环,我需要能够调用onDrawFrame (从渲染器内部手动调用),以便在我发现自己在进程中落后时“跳过帧”。
目前,我有一个GLSurfaceView类,它调用
setRenderer(glSurfaceRenderer);有了这样的设置,我知道onDrawFrame被称为“每一个滴答”。
我试着将上面的调用放在一个方法中,这样我就可以从我的游戏循环中调用它,但是在游戏循环的第二次运行时,我崩溃了,并显示以下消息
setRenderer has already been called for this instance有没有办法每一帧都手动调用渲染器?
将只调用
onDrawFrame方法正常工作。或者,在使用openGL时,以这种方式控制渲染器不是一种好做法吗
发布于 2011-09-15 04:06:41
我不认为在游戏循环中调用setRenderer()或手动调用onDrawFrame()会解决任何问题。你应该重构你的渲染调用,以考虑绘制所需的时间,换句话说,就是基于时间的动画。在任何情况下,在任何绘制调用之前手动调用onDrawFrame()而不调用eglMakeCurrent()将不起作用,因为您同时具有渲染器和游戏循环线程绘制。
编辑:由于你使用的是GLSurfaceView,如果你觉得RENDERMODE_CONTINUOUSLY对你来说太慢,你可以从你的游戏循环调用requestRender()来触发渲染。
https://stackoverflow.com/questions/7421976
复制相似问题