Actionscript 3.0: Colisiones a nivel de pixel

Actionscript 3.0: Colisiones a nivel de pixel

Etiquetas: complexIntersectionRectangle hitTestObject

La función hitTestObject(obj:DisplayObject) evalúa un objeto para comprobar si choca con el objeto obj. Por ejemplo, si tenemos dos objetos "Item1_mc" e "Item2_mc", podemos comprobar si chocan con:

  1.  
  2. Item1_mc.hitTestObject(Item2_mc)
  3.  

Esta función, tiene el inconveniente de que comprueba los choques entre los contenedores rectangulares de los objetos. Por ejemplo:

Colisiones en FLash

por tanto, sin queremos comprobar las colisiones entre dos objetos no rectangulares, puede devolver valores que aparentemente no son correctos. Aquí tenemos un ejemplo en Flash:

Si queremos utilizar colisiones a nivel de pixel, podemos crear un objeto bitmapData, superponer los dos objetos en el objeto bitmapData con un filtro de color cada uno, y comprobar si hay pixels que tienen el color de la combinación de filtros utilizados. En el blog de tink , podemos descargar una clase que nos ahorra todo este proceso y utilizar directamente métodos que nos devuelven true o false como resultado de la colisión. Por ejemplo, si queremos comprobar la colisión a nivel de pixel entre los dos objetos del ejemplo anterior, pondríamos:

  1.  
  2. HitTest.complexHitTestObject(Item1_mc,Item2_mc)
  3.  

Y si queremos recibir el rectángulo de colisión:

  1.  
  2. var rect:Rectangle = HitTest.complexIntersectionRectangle(Item1_mc,Item2_mc);
  3.  

El resultado, sería este:

Los fuentes, y la clase HitTest de tink, tras el salto.

Descargar archivos

Comentarios
    • Autor
    • Dirty Sanchez
    uis, ésto me viene muy bien! Thnx
    • Autor
    • Kano
    ¡MAGNÍFICO! ¡Por fin alguien lo ha hecho! Y los de Adobe a lo suyo...
    • Autor
    • Iván
    Moolaaa... La clase rectangle es super interesante
    • Autor
    • ricardo
    me parese muy interesante pero quisiera saber como hacer para que 2 objetos choquen.. es decir, como si intentaras juntar el objeto verde con el azul y no se pudiera.. gracias
    • Autor
    • nestor vidales
    hola.. gracias por el tuto esta bueno.. pero tengo una preg .. hice un juego tipo laberinto y le puse esta linea de codigo: onClipEvent (load) { power = 3; radius = 12; _x = 35; _y = 40; } esto sobre el personaje.. cuando el pega sobre el muro se detiene: while (_root.wall.hitTest(_x, _y+radius, true)) { _y--; } y le puse una puerta con una preg q debe responder y se detiene bajando el power a 0.. f (_root.door01.hitTest(_x, _y, true)) { power = 0; this._parent.preg01._visible = true; pero el problema q tengo es q cuando responde la preg.. se abre la puerta.. pero no logro q el siga avnazando el se queda quieto.. este es el as del frame donde va cuando responde correctamente: stop(); acierto01(); this.hero. power = 3; agradezco una ayuda para una orientacion respecto a q estoy haciendo mal u omitiendo... gracias--
    • Autor
    • Silva Developer
    Nice example. Thanks for your contribution with us. Best regards, Silva Developer silva.developer@gmail.com
    • Autor
    • andres
    muy bueno este tutoria no me salio, porque recien estoy empezando pero quisiaera aprender mas sobre actionscrtip 3.0 y...... como hacer para q 2 o mas objetos chocen entre si sin atravesarse, u otra cosa que me puedan enseñar muchisimas gracias..... ??
    • Autor
    • juan
    ke chido esta el programa
    • Autor
    • JAVIER
    muy bueno excelente
    • Autor
    • Nicolai
    Buena Clase!! pero No funciona en swf Hijos embebidos en HTML. que raro!
    • Autor
    • alex
    hola, como podría hacer que un objeto choque con el mapa (otro mc) y se detenga segun toque algo?, es decir, un laberinto.
    • Autor
    • emege
    He intentado usar esta clase mediante import, y llamando al constructor de la clase. Sin embargo me sale un error como si no estuviera definida la variable que comparara (mc_1 y mc_2) aun si declaro estos objetos desde codigo AS3. O si los agrego directamente al escenario cno dicho nombre para las instancias, tengo una imagen muy descriptiva del error. Alguna ayuda o enlace para resolver el problema?
    • Autor
    • emege
    he aki un enlace del screenshot mostrando el error y los objetos e instancias q en "was not found" http://2.bp.blogspot.com/-TEr5dpILw8c/TYFQ_z8TeRI/AAAAAAAAABc/O4_vFe8ga4s/s1600/errorTypeNotFound.png
    • Autor
    • RD-Jhon
    muy buen tutorial me sirvió mucho, estoy empesando con as3 y kiero saber cosas ke se puedan usar para krear juegos, no se k mas seria util?
    • Autor
    • Alden
    Esto me salvó la tarde. Gracias.
    • Autor
    • Silvio
    Hola no me funciona bien y creo que es por algo queno entiendo de flash tengo dos imagenes gif que las convertir en clips de video y solo me detecta colisiones cerca del eje del centro pero no sobre todo el gif, alguna idea de porquepuede ser? Saludos.
Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: