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.

Guardar imágenes en AS3 con PNGEncoder y Base64

Guardar imágenes en AS3 con PNGEncoder y Base64

Etiquetas: PNGEncoder Base64 BitmapData Rectangle encodeByteArray

Para guardar una imagen en AS2 habia que almacenar los colores de todos sus pixels, y mandar una cadena de texto con los valores a un fichero en el servidor para que creara la imagen. Esto era viable para imágenes relativamente pequeñas, ya que tanto Flash como el servidor tardaban mucho en procesar los datos. Con AS3 han surgido varias clases que aprovechan el potencial de la clase ByteArray y optimizan el flujo de datos Flash/servidor. En este ejemplo utilizo las clases PNGEncoder y Base64 para guardar un dibujo hecho en flash y guardarlo en el servidor como PNG. El tamaño de la imagen es de 400x400, y el proceso no dura más de 2 seg.

Este es el código:
FOAM parte I: Hola Mundo

FOAM parte I: Hola Mundo

Etiquetas: Foam useMouseDragger solverIterations addGlobalForceGenerator RigidBody addElement INFINITE_MASS createRectangle

FOAM parte I: Hola Mundo

FOAM es un motor de físicas escrito es Actionscript 3.0. Ha sido liberado este mes (Noviembre de 2007) por Drew F. Cummins bajo licencia MIT. Se puede bajar de aquí:

  • http://blog.generalrelativity.org/

    Además ya está disponible la documentación aquí:

  • http://lab.generalrelativity.org/foam/docs/

    En las primeras pruebas que he hecho, he podido ver que es igual de fácil que aprender que el APE, y algunas diferencias que postearé cuando tenga un mayor control de ambos. De momento, este es mi primer ejemplo, hecho a partir de uno colgado en la página del autor.
  • APE parte II: WheelParticle y SpringConstraint

    APE parte II: WheelParticle y SpringConstraint

    Etiquetas: APEngine addForce addGroup collideInternal RectangleParticle CircleParticle WheelParticle SpringConstraint addParticle addConstraint angularVelocity

    APE parte II: WheelParticle y SpringConstraint

    Además de crear cuadrados y círculos (ver APE parte I), APE permite trabajar otros dos tipos de variables: WheelParticle (para crear "ruedas" con las que podemos interactuar) y SpringConstraint (para especificar las "limitaciones" que queramos en el modelo). Este es el ejemplo:
    APE (Actionscript Physics Engine). Prueba I.

    APE (Actionscript Physics Engine). Prueba I.

    Etiquetas: RectangleParticle addParticle CircleParticle step paint APEngine

    APE (Actionscript Physics Engine). Prueba I.

    APE es un motor de físicas para flash (AS3). Esta escrito y mantenido por Alec Cove, y se puede descargar de aquí. La utilización de la librería de puede resumir en estos pasos (doy por hecho que se han descargado las clases y se ha indicado a Flash donde están):
  • Se crea una escena APE
  • Se crea una variable de tipo grupo y se asocia a la escena.
  • Se crean partículas y constrains, y se meten en ese grupo. Esta es mi primera película creada con APE: