Manejo de la nave con la pantalla táctil

Ejercicio paso a paso: Manejo de la nave con la pantalla táctil.

 

Veamos cómo podemos utilizar un manejador de eventos de la pantalla táctil para maniobrar la nave de Asteroides. El código que se muestra permite manejar la nave de la siguiente forma: un desplazamiento del dedo horizontal hace girar la nave, un desplazamiento vertical produce una aceleración y, si al soltar la pulsación no hay movimiento, se provoca un disparo.

1. Abre el proyecto Asteroides.

2. Inserta este código en la clase  VistaJuego. 

private float mX=0, mY=0;

private boolean disparo=false;

 

@Override

public boolean onTouchEvent (MotionEvent event) {

   super.onTouchEvent(event);

   float x = event.getX();

   float y = event.getY();

   switch (event.getAction()) {

   case MotionEvent.ACTION_DOWN:

          disparo=true;

          break;

   case MotionEvent.ACTION_MOVE:

          float dx = Math.abs(x - mX);

          float dy = Math.abs(y - mY);

          if (dy<6 && dx>6){

                 giroNave = Math.round((x - mX) / 2);

                 disparo = false;

          } else if (dx<6 && dy>6){

                 aceleracionNave = Math.round((mY - y) / 25);

                 disparo = false;

          }

          break;

   case MotionEvent.ACTION_UP:

          giroNave = 0;

          aceleracionNave = 0;

          if (disparo){

          ActivaMisil();

          }

          break;

   }

   mX=x; mY=y;       

    return true;

}

3. Las variables globales mX y mY van a ser utilizadas para recordar las coordenadas del último evento. Comparándolas con las coordenadas actuales (x, y) podremos verificar si se trata de un desplazamiento horizontal o vertical. Por otra parte, la variable disparo es activada cada vez que comienza una pulsación (ACTION_DOWN). Si esta pulsación es continuada con un desplazamiento horizontal o vertical, disparo es desactivado. Si por el contrario, se levanta el dedo (ACTION_UP) sin haberse producido estos desplazamientos, disparo no estará desactivado y se llamará a ActivaMisil().

4. Antes de ponerlo en marcha comenta la llamada a ActivaMisil(), dado que esta función aún no está implementada.

5. Verifica si funciona correctamente.

6. Modifica los parámetros de ajuste (<6,>6, /2, /25), para que se adapten de forma adecuada a tu terminal.

7. En el juego original podíamos acelerar pero no decelerar. Si queríamos detener la nave teníamos que dar un giro de 180 grados y acelerar lo justo. Modifica el código anterior para que no sea posible decelerar.

{jcomments on}