ゲームエリアの地図を表示するGLSurfaceViewを作成しようとしています。プレーヤーが移動すると、ゲームアクティビティはhighlightSpotを呼び出します。これにより、レンダリングリクエストがトリガーされます。ビューを再描画したいのは、プレーヤーが移動したときだけです。
ただし、現在の実装でsetRenderMode(RENDERMODE_WHEN_DIRTY)
は、GLSurfaceViewを呼び出しても、レンダリングモードは継続しているように見えます。確認するために、onDrawFrameメソッドで1つのprintlnステートメントをスローしました。アプリケーションを実行すると、プレーヤーが1回も移動しなくても、出力がすぐに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();
}
}