hola, estoy haciendo un laberinto en as2.....resulta ser que hittest no es lo mejor para detectar colisiones con objetos que no son cuadrados, rectangulares.

Hoy leyendo en internet buscando una manera de mejorar mi laberinto que algunas veces funciona bien y otras no, descubri otra manera de hacerla segun es mejor

es segun otro usuario de cristalab, crear un .as llamado Colision y lleva el siguiente codigo:

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;
      }
   }
}


según el mismo usuario dice:

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.


Tonces lo que busco ahora es como hacer que al tocarse, mi objeto se detenga, es decir, no pueda seguir por el camino que iba pues es un obstaculo y deba tomar otro camino.

si alguien tiene un dato