Ich versuche eine GLSurfaceView zu erstellen, die eine Karte eines Spielbereichs anzeigt. Wenn der Spieler sich bewegt, ruft die Spielaktivität highlightSpot auf, was wiederum eine Render-Anfrage auslösen sollte. Ich möchte die Ansicht nur dann neu zeichnen, wenn der Spieler sich bewegt.GLSurfaceView rendert kontinuierlich, obwohl sich der Rendermodus ändert
Allerdings, mit meiner aktuellen Implementierung, trotz Aufruf setRenderMode(RENDERMODE_WHEN_DIRTY)
auf meinem GLSurfaceView, scheint seine Render-Modus weiterhin kontinuierlich. Um dies zu überprüfen, habe ich eine einzelne println-Anweisung in meine onDrawFrame-Methode geschrieben, und wenn ich meine Anwendung ausführe, füllt die Ausgabe schnell mein logcat aus, ohne dass der Player sich einmal bewegt - es verhält sich eindeutig nicht so, wie ich es beabsichtigt hatte. Gibt es noch etwas, das ich tun muss, damit die Ansicht nur auf Anforderung gerendert wird?
(Der größte Teil dieses Codes ist bei http://insanitydesign.com/wp/projects/nehe-android-ports/ aus den Tutorials abgeleitet. Ich meine onDrawFrame weggelassen, OnSurfaceChanged und onSurfaceCreated Methoden aus Gründen der Prägnanz, als ich den Render-Modus nicht am Wechsel oder ein in diesen Verfahren überall anfordernden machen Wenn jemand denkt, dass es relevant sein könnte, kann ich das auch posten.)
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();
}
}
Hinweis: Nach dieser Fixierung ich auch die requestRender Aussage in meiner highlightSpot Funktion entfernt, da ich Rufen Sie stattdessen requestRender von movePlayer() jetzt. Ich glaube, es würde in highlightSpot gut funktionieren, aber ich muss es nur einmal aufrufen. –
Eigentlich nein, in highlightSpot() würde es nicht funktionieren, da es im GLSurfaceView-Objekt aufgerufen werden muss, nicht im SurfaceViewClass-Objekt, das ich als Renderer verwende. Ich hätte es vermeiden können, diese Frage überhaupt stellen zu müssen, wenn ich die beiden nicht zusammengeführt hätte. –