Comunidad de diseño web y desarrollo en internet online

Detectar colisiones con Movie Clips de cualquier forma

El método MovieClip.hitTest sólo permite detectar colisiones en los rectángulos de delimitación de los MovieClips. Cuando se quieren detectar colisiones con MovieClips de formas o bordes no cuadrados, se suele pensar que la única manera es usar complejas fórmulas matamáticas, aunque esto no sea viable para nosotros (Porque hay que saber muchísimas matemáticas o porque tumbaríamos el player con las operaciones).

Hay una manera alternativa de detectar colisiones que si bién no es 100% exacta, da la precisión suficiente para, por ejemplo, juegos. Como es una de esas cosas que se utilizan mucho, es altamente recomendable ponerla en un archivo .as e importarla con un #include (En mi caso pondré el siguiente código en un archivo llamado "colision.as")

Código :

function checkHit(a:MovieClip, b:MovieClip) {
   with (a) {
      if (b.hitTest(getBounds(_root).xMax, _y, true)) {
         return "left";
      } else if (b.hitTest(getBounds(_root).xMin, _y, true)) {
         return "right";
      } else if (b.hitTest(_x, getBounds(_root).yMax, true)) {
         return "up";
      } else if (b.hitTest(_x, getBounds(_root).yMin, true)) {
         return "down";
      } else {
         return false;
      }
   }
}

Esta función retorna el lado por el que han colisionado o false si no se tocan. Si sólo quieren saber si hay colisión, usen if(checkHit(a,b)!=false){...}

Analizando el código por un instante verás que el clip "a" tiene que ser el que se mueve y más pequeño. El otro, b, será la pared.

Ahora, para probarlo, creen dos clips de cualquier forma, con nombres de instancia f1 y f2 y un campo de texto llamado txt

Código :

#include "colision.as"
f1.startDrag(true);
this.onEnterFrame = function() {
   txt.text = checkHit(f1, f2);
};
Verán como en el campo de texto vemos, sin problemas, el momento en el que f1 colisiona con f2.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate