Back to project page ANA.
The source code is released under:
GNU General Public License
If you think the Android project ANA listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package net.guimi.ANA; // w w w.jav a 2s. com import java.util.ConcurrentModificationException; import android.graphics.Canvas; /** * Thread class to perform the so called "game loop". * * @author martin (http://www.droidnova.com) * modified by Gimi (http://www.guimi.net) */ class ANAHilo extends Thread { static final int RETARDO = 12; // En milisegundos private Pantalla miPantalla; private boolean esEnMarcha = false; /** * Constructor * @param panel View class on which we trigger the drawing. */ public ANAHilo(Pantalla panel) { miPantalla = panel; } /** @param run Should the game loop keep running? */ public void ponEnMarcha(boolean en_marcha) { esEnMarcha = en_marcha; } /** @return If the game loop is running or not. */ public boolean leeEnMarcha() { return esEnMarcha; } /** * Bucle de juego. * 1. Actualiza objetos * 2. Comprueba colisiones * 3. Dibuja la pantalla */ @Override public void run() { Canvas c; while (esEnMarcha) { c = null; try { c = miPantalla.getHolder().lockCanvas(null); synchronized (miPantalla.getHolder()) { sleep(RETARDO); miPantalla.actualizaObjetos(); miPantalla.compruebaColisiones(); miPantalla.hiloDibuja(c); } } catch(InterruptedException e) { // En caso de que se interrumpa el hilo mientras est en la pausa (sleep) e.printStackTrace(); } catch(NullPointerException e) { // En caso de que la pantalla este dibujando tras salir e.printStackTrace(); } catch(ConcurrentModificationException e) { // Ocurre cuando termina un nivel y el hilo todava intenta actualizar objetos o comprobar colisiones e.printStackTrace(); } finally { // Desbloqueamos y enviamos el lienzo en la clasula "finally" // De esta forma nos aseguramos de no dejar la superficie en un estado inconsistente // si se produce una excepcin durante el juego if (c != null) { miPantalla.getHolder().unlockCanvasAndPost(c); } } } } }