我正在尝试创建一个显示游戏区域地图的GLSurfaceView。当玩家移动时,游戏活动会调用highlightSpot,而后者又会触发渲染请求。我想重新绘制视图的唯一时间是玩家移动。
然而,在我当前的实现中,尽管在我的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();
}
}
答案 0 :(得分:7)
这似乎迫使它只在我想要它时呈现,这正是我想要的:
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();
}
}