Página inicial  

trans_770 trans_160

Unidad 23. Juegos (VI).


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 la función hitTest().

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):

var escuchador:Object = new Object();

escuchador.onMouseDown = function() {

	if (miClip.hitTest(_xmouse,_ymouse) {

		//coincidencia

	}

}

Mouse.addListener(escuchador);

Este código evalúa la posición del ratón a cada clic, si las coordenadas introducidas en la siguiente línea coinciden con el área de miClip se produce colisión:

miClip.hitTest(_xmouse, _ymouse);


Cuando utilizamos esta función pasándole unas coordenadas podremos añadirle un parámetro: formaObjeto. Este parámetro tomará valor true si queremos que se detecte la colisión con la forma de la instancia, o false si queremos que se evalúe con sus bordes rectángulares de objeto. La función, entonces, tomaría la siguiente forma:

miClip.hitTest(coorX, coorY, formaObjeto);

Donde formaObjeto decidirá si se toma o no la forma completa del clip miClip.

 

También podemos ver si dos objetos chocan entre sí dándole un target a la función en vez de unas coordenadas. En ese caso tendríamos:

var colision:Boolean = miClip.hitTest(miClip2);

En este caso hemos almacenado en la variable colisión el valor de la evaluación de solapamiento o corte entre la posición de miClip y miClip2.

Esta línea tendría su homólogo en:

var colision:Boolean = miClip2.hitTest(miClip);

Pues ambas realizan la misma acción al buscar coincidencias entre los mismos objetos.



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.

Esto complica un poco las cosas, pues deberemos utilizar la primera sintaxis de la función:

miPared.hitTest(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?. La respuesta a esta segunda pregunta es bastante sencilla, debo averiguar la coordenada máxima de las x (para conocer su ancho máximo) y lo mismo para las y (para conocer su altura máxima).

Utilizaremos para ello la función getBounds(). Esta función trabaja de la siguiente forma:

miClip.getBounds(movieclip);

Donde en movieclip escribiremos la ruta de destino de la línea de tiempo cuyo sistema de coordenadas utilizaremos como punto de referencia. Normalmente escribiremos _root, para que las coordenadas dadas sean respecto a la película en general y no sobre un clip en particular.

Mediante esta función podremos acceder a las x mínimas y máximas, y lo mismo para las y. Sólo deberás escribir lo siguiente:

miClip.getBounds(_root).xMin;

miClip.getBounds(_root).xMax;

miClip.getBounds(_root).yMin;

miClip.getBounds(_root).yMax;


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




     


© aulaClic. Todos los derechos reservados. Free Computer tutorials. Prohibida la reproducción por cualquier medio.
Septiembre - 2007.