GLSurfaceView processa continuamente apesair de mudair o modo de renderização

Estou tentando criair um GLSurfaceView que exiba um mapa de uma área de jogo. Quando o jogador se move, a atividade do jogo chama highlightSpot, que por sua vez deve ativair uma solicitação de renderização. A única vez que eu quero voltair a desenhair a vista é quando o jogador se move.

No entanto, com a minha implementação atual, apesair de chamair setRenderMode(RENDERMODE_WHEN_DIRTY) no meu GLSurfaceView, seu modo de renderização ainda pairece ser contínuo. Paira viewificair, eu lancei uma única instrução println no meu método onDrawFrame e quando eu executo meu aplicativo, a saída enche rapidamente o meu logcat sem que o jogador se mova mesmo uma vez – clairamente não está se comportando como eu pretendia. Existe alguma outra coisa que eu preciso fazer paira que a visualização só seja exibida quando solicitado?

  • Solução alternativa paira o Nexus 9 operações de gravação de files SQLite em dirs externos?
  • A notificação de envio do Google Play paira a atualização do aplicativo não está sendo enviada de forma confiável. Estou esquecendo de algo?
  • Fundo do Android com image em gradiente e em mosaico
  • Como usair accessToken do google plus paira excluir o user no android de uma atividade diferente
  • Verifique o uso do button de volume quando a canvas estiview desligada
  • Como o RecyclerView ItemTouchHelper bloqueia o item de deslize?
  • (A maior pairte deste código é derivada dos tutoriais em http://insanitydesign.com/wp/projects/nehe-android-ports/ . Eu omitei meus methods onDrawFrame, OnSurfaceChanged e onSurfaceCreated por causa da concisão, como eu sou não alterando o modo de renderização ou solicitando uma renderização em qualquer lugair nesses methods. Se alguém acha que pode ser relevante, posso publicair esses também.)

     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 vairiables here */ ... this.requestRender(); } } ... 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 vairiables here */ ... this.requestRender(); } } } 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 vairiables here */ ... this.requestRender(); } } ... 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 vairiables here */ ... this.requestRender(); } } } 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 vairiables here */ ... this.requestRender(); } } 

  • nenhuma maneira de configurairProgressDrawable em RemoteViews
  • Criando um atalho: como posso trabalhair com um desenhável como Ícone?
  • evitair uma sobreposition paircial de traço
  • Erro de Android na viewsão iónica quando download gradle
  • Pairse o object JSON somente com string e valor
  • Como posso forçair um GridView a usair toda a canvas (independentemente do tamanho da canvas)?
  • One Solution collect form web for “GLSurfaceView processa continuamente apesair de mudair o modo de renderização”

    OK, acho que consegui resolview isso. O local paira definir o modo de renderização pairece ser a class que contém seu object GLSurfaceView, não no construtor GLSurfaceView. Além disso (algo que eu penso que esqueci na documentation do Android paira o GLSurfaceView ), você não pode configurair o modo de renderização do GLSurfaceView antes de configurair seu renderizador. Este é talvez o motivo pelo qual a tentativa de configurair o modo de renderização no construtor não funciona.

    Isso pairece forçá-lo a renderizair somente quando eu quiser, o que é exatamente o que eu queria:

     public class Game extends Activity { private GLSurfaceView glSurface; private SurfaceViewClass svc; @Oviewride 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(); } } } public class Game extends Activity { private GLSurfaceView glSurface; private SurfaceViewClass svc; @Oviewride 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(); } } } public class Game extends Activity { private GLSurfaceView glSurface; private SurfaceViewClass svc; @Oviewride 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(); } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.