J'essaie de créer un GLSurfaceView qui affiche une carte d'une zone de jeu. Lorsque le joueur se déplace, l'activité du jeu appelle highlightSpot, qui à son tour devrait déclencher une requête de rendu. La seule fois où je veux redessiner la vue, c'est quand le joueur bouge.GLSurfaceView restaure en continu malgré le changement de mode de rendu
Cependant, avec ma mise en œuvre actuelle, malgré l'appel setRenderMode(RENDERMODE_WHEN_DIRTY)
sur mon GLSurfaceView, son mode de rendu semble toujours être continu. Pour vérifier, j'ai jeté une seule instruction println dans ma méthode onDrawFrame, et quand j'exécute mon application, la sortie remplit rapidement mon logcat sans que le joueur ne bouge même une fois - il ne se comporte clairement pas comme je le voulais. Y a-t-il autre chose que je dois faire pour que la vue ne soit rendue que lorsqu'on me le demande?
(La majeure partie de ce code est dérivé des tutoriels à http://insanitydesign.com/wp/projects/nehe-android-ports/. J'ai oublié mon onDrawFrame, OnSurfaceChanged et méthodes onSurfaceCreated pour des raisons de concision, je ne suis pas en train de changer le mode de rendu ou de demander un rendu partout dans ces méthodes . Si quelqu'un pense qu'il pourrait être utile, je peux poster ceux aussi.)
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();
}
}
Note: Après avoir fixé, je également retiré la déclaration de requestRender dans ma fonction highlightSpot, puisque je Appelez requestRender de movePlayer() maintenant à la place. Je crois que cela fonctionnerait dans highlightSpot très bien, mais je n'ai besoin de l'appeler qu'une seule fois. –
En fait, non, cela ne fonctionnerait pas dans highlightSpot(), car il doit être appelé sur l'objet GLSurfaceView, pas sur l'objet SurfaceViewClass que j'utilise comme moteur de rendu. J'aurais peut-être évité d'avoir à poser cette question si je n'avais pas confondu les deux. –