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.

Papervision GreatWhite: crear un plano con dos caras

Papervision GreatWhite: crear un plano con dos caras

Etiquetas: Plane DisplayObject3D Viewport3D BasicRenderEngine

Papervision GreatWhite: crear un plano con dos caras

Existen dos maneras de crear una plano con dos caras en Papervision3D:

-Crear un cubo con una profundidad de 1pixel, y utilizar las caras delantera y trasera como caras del plano.

-Crear un contenedor DisplayObject3D, y meter dentro dos planos. El plano "b" debe tener una profundidad de 1 y una rotatión de -180º.

El segundo método es el que me parece más cómodo, ya que gestionar los materiales con un cubo es más engorroso que con un plano. Un ejemplo de plano con dos caras podrías ser:

  1.  
  2. contenedor = new DisplayObject3D();
  3. var planoA = new Plane(new MovieAssetMaterial("CaraA"), 400, 400, 4, 4);
  4. var planoB = new Plane(new MovieAssetMaterial("CaraB"), 400, 400, 4, 4);
  5. planoB.z = 1;
  6. planoB.rotationY = -180;
  7. contenedor.addChild(planoA);
  8. contenedor.addChild(planoB);
  9. escena.addChild(contenedor);
  10.  
Away3D: Manejo de eventos de ratón para Away 2.2

Away3D: Manejo de eventos de ratón para Away 2.2

Etiquetas: View3D addOnMouseDown MouseEvent3D object Plane

Away3D: Manejo de eventos de ratón para Away 2.2

Para interactuar con el ratón en objetos 3d en Away3D 2.2, tenemos que seguir 2 pasos:

-Añadir el evento al objeto, utilizando la función addOnMouseDown (en este caso para detectar que hemos presionado en el objeto). A addOnMouseDown le pasamos como parámetro la función en la que se recoje el evento:

  1. p.addOnMouseDown(planoElegido);

-Recoger el objeto pulsado en la función, por medio del parámetro object:

  1. current = e.object;

El código completo:

Utilizar materiales interactivos en Papervision GreatWhite

Utilizar materiales interactivos en Papervision GreatWhite

Etiquetas: InteractiveScene3DEvent BasicRenderEngine Viewport3D displayObject3D

Utilizar materiales interactivos en Papervision GreatWhite

Para utilizar eventos de ratón sobre objetos en Papervision GreatWhite, tenemos que hacer tres cosas:

-Crear un objeto Viewport3D con el atributo interactive = true
/
-Crear un objeto y poner el atributo interactive de su material = true

-Añadir los eventos al objeto

El código comentado, tras el salto.
Papervision 2.0: GreatWhite.Plantilla básica

Papervision 2.0: GreatWhite.Plantilla básica

Etiquetas: Viewport3D BasicRenderEngine Scene3D Camera3D MovieMaterial MaterialList DisplayObject Viewport3D Vertex3D

Papervision 2.0: GreatWhite.Plantilla básica

Hace tiempo que está disponible la versión 2.0a de Papervision, bajo el nombre de Greatwhite. Hay algunos cambios respecto a la versión anterior, y ya han empezado a surgir tutoriales donde se explica como utilizar las nuevas clases y como se recomienda dividir los bloques de código. Esta es una plantilla básica de Papervision 2.0. En este caso creo un cubo y creo sobre él un efecto de "fluidez". Para que funcione hay que tener descargadas las clases de Papervision 2.0a, y haber indicado a Flash donde están guardadas.

Puedes verlo a pantalla completa aquí
Controlar teclas pulsadas en AS2

Controlar teclas pulsadas en AS2

Etiquetas: Object onKeyDown onKeyUp Key.getCode addListener

El siguiente código controla los eventos de teclado "pulsar" (onKeyDown) y "soltar" (onKeyUp), devolviendo el código de la tecla con la que se ha interactuado.