Reproduciremos la película que vimos en la teoría:
Ejercicio paso a paso.
Abre el archivo colision.fla que encontrarás en la carpeta ejercicios/colision del curso.
Selecciona el primer fotograma y abre el Panel Acciones, escribe en él lo siguiente:
onEnterFrame = function() {
var velocidad:Number = 1;
if (Key.isDown(Key.DOWN)) {
if (!(fondo.hitTest(miClip.getBounds(_root).xMin,miClip.getBounds(_root).yMax+velocidad, true) || fondo.hitTest(miClip.getBounds(_root).xMax,miClip.getBounds(_root).yMax+velocidad, true))) {
miClip._y += velocidad;
}
}
if (Key.isDown(Key.UP)) {
if (!(fondo.hitTest(miClip.getBounds(_root).xMin,miClip.getBounds(_root).yMin-velocidad, true) || fondo.hitTest(miClip.getBounds(_root).xMax,miClip.getBounds(_root).yMin-velocidad, true))) {
miClip._y -= velocidad;
}
}
if (Key.isDown(Key.LEFT)) {
if (!(fondo.hitTest(miClip.getBounds(_root).xMin-velocidad, miClip.getBounds(_root).yMin, true) || fondo.hitTest(miClip.getBounds(_root).xMin-velocidad, miClip.getBounds(_root).yMax, true))) {
miClip._x -= velocidad;
}
}
if (Key.isDown(Key.RIGHT)) {
if (!(fondo.hitTest(miClip.getBounds(_root).xMax+velocidad, miClip.getBounds(_root).yMin, true) || fondo.hitTest(miClip.getBounds(_root).xMax+velocidad, miClip.getBounds(_root).yMax, true))) {
miClip._x += velocidad;
}
}
}
Parece un poco
complicado pero en esencia es más sencillo. Para cada uno de los movimiento (arriba, abajo, izquierda y derecha) tendremos que evaluar si se produce colisión con el objeto miClip y el clip fondo.
Pero no bastará con hacerlo sólo de una esquina, veamos un ejemplo para verlos con más claridad:
Como ves en la imagen, deberemos ver si se producen dos colisiones. En el movimiento hacia abajo una será la de la esquina inferior izquierda y la otra de la esquina inferior derecha.
Si por ejemplo, no evaluasemos el choque con la esquina inferior izquierda e intentásemos
realizar un movimiento hacia abajo, ¡éste se realizaría! Y en definitiva es lo que queremos evitar.
Observa también que para realizar el hitTest hemos tenido en cuenta la posición que adoptará el objeto después del movimiento (sumándole la velocidad, o lo que es lo mismo, el número de píxeles que se desplaza el objeto a cada pulsación).
Aviso legal: este curso es gratuito
siempre que se visualice desde la página web de aulaClic. No está
permitido descargar el curso y utilizarlo en academias o centros de enseñanza
privados sin estar conectado a Internet.