Unidad 22. Juegos (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 inidca si la colisión se calcula con respecto a al 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 colision, 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 corrdenadas 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 onjetos de visualización que nos devuleve 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 devuleve un objeto Rectangule. 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 mosmo 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.

Pág. 22.6

Atrás  Inicio  Adelante