Estoy tratando de crear un GLSurfaceView que muestra un mapa de un área de juego. Cuando el jugador se mueve, la actividad del juego llama a highlightSpot, que a su vez debe activar una solicitud de renderizado. El único momento en que quiero volver a dibujar la vista es cuando el jugador se mueve.GLSurfaceView se reproduce de forma continua a pesar de cambiar el modo de procesamiento
Sin embargo, con mi implementación actual, a pesar de llamar a setRenderMode(RENDERMODE_WHEN_DIRTY)
en mi GLSurfaceView, su modo de renderizado parece ser continuo. Para comprobarlo, lancé una única instrucción println en mi método onDrawFrame, y cuando ejecuto mi aplicación, la salida rellena rápidamente mi logcat sin que el reproductor se mueva ni siquiera una vez, claramente no se está comportando como pretendía. ¿Hay algo más que deba hacer para que la vista se visualice solo cuando se le pregunte?
(La mayor parte de este código se deriva de los tutoriales en http://insanitydesign.com/wp/projects/nehe-android-ports/. Omití mi onDrawFrame, OnSurfaceChanged y métodos onSurfaceCreated en aras de la concisión, ya que no estoy cambiando el modo de procesado o solicitar un render en cualquier parte de esos métodos . Si alguien piensa que podría ser relevante, también puedo publicarlos.)
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();
}
}
Nota: Después de arreglar esto, también se elimina la declaración requestRender en mi función highlightSpot, ya que llame a requestRender desde movePlayer() ahora en su lugar. Creo que funcionaría en highlightSpot bien, pero solo necesito llamarlo una vez. –
En realidad, no, no funcionaría en highlightSpot(), porque debe invocarse en el objeto GLSurfaceView, no en el objeto SurfaceViewClass que utilizo como representador. Podría haber evitado tener que hacer esta pregunta por completo si no hubiera logrado confundir los dos. –