Android OpenGL gameloop fuera de OnFrame

Tengo un problema con la creación de gameloop para mi primer juego. He leído mucho sobre él pero todavía no puedo entenderlo. Se basa en OpenGL por lo que he utilizado onDrawFrame como un bucle de juego y funciona bien en mi teléfono. El problema es que onDrawFrame es el tiempo de actualización depende del hardware por lo que se ejecuta demasiado rápido en algunos dispositivos. Así que lo que quiero es agregar un bucle de juego por separado que se actualizará en un período constante de tiempo en todos los teléfonos inteligentes. (y onDrawFrame sólo se encargará de gráficos como debería)

Por ahora tengo:

  • myGameRenderer clase con todas las cosas openGl un onDrawFrame
  • myGLSurfaceView que admite eventos táctiles
  • myGameActivity

onDrawFrame activa la función myGameUpdate que controla las posiciones cambiantes de todos los objetos del juego dependiendo de la información de myGLSurfaceView

He intentado con la creación de nuevo Runnable pero no parece que funcione, no puedo averiguar cómo iniciar ese runnable y donde debería colocarlo (he intentado colocarlo en mi clase de GAMERenderer, pero didn ' Parece que funciona, nada se mueve:

private final Runnable mUpdateDisplay = new Runnable() { @Override public void run() { update(); }}; private void update() { //some update stuff blablabla //some update stuff blablabla mHandler.postDelayed(mUpdateDisplay,40); //to refresh at 25 fps } 

pero supongo que no tengo la idea de que – quiero decir que crear este runnable. He intentado colocarlo en onCreateSurface para iniciarlo pero sin efecto. Entonces, ¿es la idea generall ok? ¿Y cómo iniciar el bucle? ¿Dónde colocarlo? ¿O debo usar cualquier otra forma?

Ok, era simple – yo solo faltaba r.run (); Pero como siempre hay algo. Ahora funciona como yo quería – me refiero a los marcos no depende de hardware, pero todo no es tan suave como lo era – y parte de los objetos en 3d están parpadeando. Parece que algunos objetos visiblemente se dibujan más rápido, algunos más tarde y se ve feo. Entonces, ¿qué estoy haciendo mal? ¿Hay una mejor manera?

  • Cómo implementar una cola de runnables
  • Cómo implementar un Runnable con un no-bloqueador Looper / Handler
  • Actualizar la interfaz de usuario de Android desde un subproceso de otra clase
  • Una pregunta sobre Android runnable
  • ¿Cómo poner un runnable en paquete?
  • Tomando un cómputo pesado del subproceso de la interfaz de usuario de Android
  • Android: ¿Qué hilo llama .onSensorChanged?
  • El hilo no interrumpe
  • ¿Existe ya una clase StopWatch para android y por qué no funciona mi implementación?
  • Cómo pasar o asignar un valor obtenido en un runOnUiThread
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.