viernes, 9 de enero de 2015

OpenFL y Sprites (Arkanoid Parte 3)


Tenemos todos los objetos creados y puestos en pantalla. Vamos a darle algo de movimiento: En principio, lo único que debe controlar el usuario es la Plataforma. Simplemente se mueve de derecha a izquierda. 

Obviamente el juego original tiene muchos más detalles, pero el motivo de este blog es aprender. Quedará en ustedes en agregar complejidad al juego.





Para controlar la plataforma, he decidido hacer uso del mouse en este ejemplo, ya que es la forma menos compleja a la hora de escribir código. En ejemplos posteriores veremos como interceptar cuando el usuario presiona o suelta una tecla.




Básicamente, luego de la fase inicial donde creamos y ponemos todos los objetos en la pantalla, el programa entra en un bucle indefinido donde va a chequear con cada cambio de cuadro (no olvidemos que establecimos los cuadros a 60 por segundo (60FPS)), si debe ejecutarse alguna acción (o no).


Esto se lleva a cabo con la llamada a un evento en particular. Es simplemente decirle al programa que cuando cambie el cuadro, haga determinada cosa. Vamos a tener muchos de estos eventos a lo largo de un programa, pero comencemos con mover la Plataforma:

Como primer medida, necesitamos incorporar la librería de “Eventos” a nuestro programa.

import openfl.events.Event;

Luego, simplemente declaramos el evento y hacia donde apunta:       

this.addEventListener(Event.ENTER_FRAME, Mover_Plataforma);

Al final, escribimos el código que moverá la plataforma:


Como habíamos definido el marco exterior, delimitar los bordes es sencillo. Para el izquierdo preguntamos simplemente si la plataforma ha llegado al píxel establecido (5 o menos) y corregimos a 7. Para el derecho, solamente tenemos que restar el ancho de la plataforma al ancho del recuadro.

Existe una forma mejor de manejar esto? Sí; Detectando colisiones entre los bordes y la plataforma respectivamente,  pero quería mostrar que puede hacerse sin ello. Más abajo detectamos colisiones con la bola.

Entonces, a 60 veces por segundo, el programa va a chequear si el usuario ha movido el mouse y ajustará la posicion de la plataforma según el caso.

Luego está la Bola que requerirá de un poco más de trabajo:

En primer lugar, necesitamos declarar dos variables para modificar el rumbo, orientación o vector..como quieran llamarlo y la velocidad.




En mi caso, 5 es el número inicial (y constante en este ejemplo) de velocidad. Pueden probar con otros valores claro.


El problema aquí (si esto no fuese un simple ejemplo, es que siempre va a iniciar su trayectoria hacia la derecha) Quizás lo arreglemos más adelante.

Luego tenemos otro evento (similar al anterior), pero para darle movimiento:

this.addEventListener(Event.ENTER_FRAME, Mover_Bola);

Y por último, el código:




Al ingresar en la función, movemos la bola. Luego comparamos ese movimiento con los límites del Recuadro que tenemos. Si el movimiento supera esos límites, la bola va a rebotar. en dirección opuesta a su trayectoria previa. 

El único borde no detectado hasta ahora es el inferior, el cual si es alcanzado, perderíamos la partida.

En la próxima controlamos colisiones con la Plataforma y los Ladrillos. 


Enlace a los fuentes en GitHub