2

我正在创建一个游戏循环,如果我发现我落后于进程,我需要能够调用 onDrawFrame(从渲染器内部手动)以便“跳过帧”。

目前我有一个 GLSurfaceView 类调用

setRenderer(glSurfaceRenderer);

有了这个设置,我明白 onDrawFrame 会在每个刻度上被调用。

我尝试将上述调用放在一个方法中,以便我可以从我的游戏循环中调用它,但是在游戏循环的第二次运行中,我崩溃并显示消息说

setRenderer has already been called for this instance

有没有办法在每一帧手动调用渲染器

只会打电话给

onDrawFrame

方法正常工作。或者在使用openGL时以这种方式控制渲染器不是一个好习惯

4

1 回答 1

4

我看不出在游戏循环中调用setRenderer()或手动调用如何解决任何问题。onDrawFrame()您应该重构渲染调用以考虑绘制所需的时间,即基于时间的动画。onDrawFrame()在任何情况下,在任何绘图调用之前手动调用eglMakeCurrent()都不会起作用,因为您同时拥有渲染器和游戏循环线程绘图。

编辑:由于您使用的是 GLSurfaceView,如果您觉得对您来说太慢,您可以requestRender()从游戏循环中调用以触发渲染。RENDERMODE_CONTINUOUSLY

于 2011-09-14T20:06:41.490 回答