GLSurfaceView不断呈现,尽pipe改变渲染模式

我正在尝试创build一个显示游戏区域的地图的GLSurfaceView。 当玩家移动时,游戏活动调用highlightSpot,这反过来会触发渲染请求。 我只想重新画一个视图的时候是玩家移动的时候。

但是,在我目前的实现中,尽pipe在我的GLSurfaceView上调用了setRenderMode(RENDERMODE_WHEN_DIRTY) ,但它的渲染模式似乎仍然是连续的。 为了检查,我在我的onDrawFrame方法中抛出了一个println语句,当我运行我的应用程序时,输出很快就填满了我的logcat而没有播放器移动一次 – 显然这不是我想要的。 还有什么我需要做的,以使视图渲染只有当被问及?

(这段代码的大部分源自http://insanitydesign.com/wp/projects/nehe-android-ports/上的教程,为了简洁起见,省略了我的onDrawFrame,OnSurfaceChanged和onSurfaceCreated方法,因为我是不改变渲染模式或者在这些方法的任何地方请求渲染,如果有人认为它可能是相关的,我也可以发布。)

 public class SurfaceViewClass extends GLSurfaceView implements Renderer { public SurfaceViewClass(Context context) { super(context); ... this.setRenderer(this); this.setRenderMode(RENDERMODE_WHEN_DIRTY); } public void highlightSpot(int x, int y) { /* change some variables here */ ... this.requestRender(); } } 

Solutions Collecting From Web of "GLSurfaceView不断呈现,尽pipe改变渲染模式"

好吧,我认为我已经整理出来了。 设置渲染模式的地方似乎是包含您的GLSurfaceView对象的类,而不是在GLSurfaceView构造函数中。 另外(我认为我忽略了GLSurfaceView的Android文档中 ),您不能设置GLSurfaceView的渲染模式,然后再设置它的渲染器。 这也许是为什么试图在构造函数中设置渲染模式不起作用。

这似乎迫使它只在我想要的时候渲染,这正是我想要的:

 public class Game extends Activity { private GLSurfaceView glSurface; private SurfaceViewClass svc; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); glSurface = (GLSurfaceView) findViewById(R.id.SurfaceView01); svc = new SurfaceViewClass(this); glSurface.setRenderer(svc); glSurface.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); } public void movePlayer() { svc.highlightSpot(location[PLAYER], 0); glSurface.requestRender(); } }