Unidad 22. Juegos interactivos (VI)



22.5. Interacción entre elementos

Una de las cosas que más nos interesará realizar es el choque entre elementos en el Escenario, y ya no el choque físico en sí, sino la coincidencia de dos elementos en un mismo espacio.

Esto lo podremos evaluar y tratar con los métodos hitTestPoint(x, y) para detectar si una coordenada cae dentro del objeto, y hitTestObject(object) que nos indica si dos objetos se solapan (chocan).

Su uso tiene dos posibilidades, ambas muy sencillas. Puedes evaluar si en un punto en concreto se encuentra un objeto específico (muy útil para detectar los clics del ratón o donde se encuentra en cada momento):

 miClip.addEventListener(MouseEvent.MOUSE_UP, miFuncion); 

 function miFuncion(event:MouseEvent):void{
    if (miClip.hitTestPoint(mouseX, mouseY) {
       //coincidencia
    }
 }

Este código evalúa la posición del ratón a cada clic, si las coordenadas introducidas en el método hitTestPoint coinciden con el área de miClip se produce colisión.

hitTestPoint admite un tercer parámetro booleano. Éste indica si la colisión se calcula con respecto a la forma del elemento (true) a al rectángulo delimitador del objeto (false). La opción por defecto es esta última.

Cuando queremos evaluar si un objeto "choca" con otro, empleamos el método hitTestObject:

  miClip.hitTestObject(miOtroClip);

En ambos casos, el valor devuelto es true, si hay colisión, o false si no.

En desplazamientos utilizaremos mucho esta opción para averiguar si el objeto que estamos moviendo choca con una pared u otro objeto.

Ten en cuenta que la posición que deberemos evaluar si hace colisión con la pared debe ser aquella que adoptaría el objeto después de desplazarse. Si lo desplazamos antes los objetos pueden quedar solapados, y eso, dependiendo del caso, puede no ser adecuado para nuestro diseño.

Esto complica un poco las cosas, pues deberemos calcular primero dónde estarán las coordenadas del objeto tras moverlo y calcular la colisión antes de moverlo.

  miPared.hitTestPoint(coorXfinal_Clip, coorYfinal_Clip);

Pero, ¿cómo conocemos las coordenadas de una forma?, ¿cómo averiguo el punto máximo que alcanza en la esquina abajo derecha?. Como siempre, Flash nos soluciona esto incorporando un método a los objetos de visualización que nos devuelve sus medidas. El método getBounds.


Haz clic y utiliza las flechas para moverte.

Su sintaxis es la siguiente:

miClip.getBounds(objetoReferencia);

En objetoReferencia indicaremos el objeto cuyo sistema de coordenadas utilizaremos como punto de referencia. Normalmente escribiremos stage, para que las coordenadas dadas sean respecto a la película en general y no sobre un clip en particular.

El método nos devuelve un objeto Rectangle. Este tipo de objeto define un área rectangular, y nos permite conocer la posición de sus cuatro lados con las siguientes propiedades:

  • .top : lado superior (sería lo mismo que y).
  • .bottom : lado inferior (sería y + altura del objeto).
  • .lef : lado izquierdo (sería lo mismo que x).
  • .right: lado derecho (sería x más el ancho).
miClip.getBounds(stage).left;
miClip.getBounds(stage).right;
miClip.getBounds(stage).top;
miClip.getBounds(stage).bottom;

• Realiza el ejercicio paso a paso de Colisión y Movimiento para practicar este concepto.




Marzo-2011
Pág. 22.6

Atrás  Inicio  Adelante




.