
Etiquetas: Viewport3D BasicRenderEngine interactive animated MovieAssetMaterial
En Papervision greatWhite podemos añadir eventos a los elementos 3D .
Otra opción es crear los elementos 3D a partir de MovieClips interactivos que tienen asociados eventos. Por ejemplo, tenemos un MovieClip con tres botones dentro, y creamos una esfera con ese MovieClip como material. Para que se respeten los eventos de ese clip al convertirlo en material3D, debemos configurar los siguientes parámetros:
-al crear la instancia de Viewport3D debemos especificar que es interactivo:
//los parametros son: (ancho,alto,autoEscalar,interactivo) viewport = new Viewport3D(400,400,false,true);
-al crear el material debemos especificar que es interactivo y animado:
//los parametros son: (ID de linkage,transparente,animado)var material:MovieAssetMaterial = new MovieAssetMaterial("MenuPPV",true,true);
material.interactive = true;
Tras el salto, el código completo y la demo.
//CODIGO DEL MAINpackage{import flash.display.*
public class Main extends MovieClip{
import flash.events.Event;
import flash.text.*;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.materials.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.events.InteractiveScene3DEvent;
var escena:Scene3D; var renderer:BasicRenderEngine; var camara:Camera3D; var viewport:Viewport3D; var esfera:Sphere;public function Main(){
crear3D();
crearObjeto();
}public function crear3D():void{
escena = new Scene3D();
renderer = new BasicRenderEngine();
camara = new Camera3D();
viewport = new Viewport3D(400,400,false,true);
addChild(viewport);
camara.z = -300;
addEventListener(Event.ENTER_FRAME, renderizar);
}public function crearObjeto():void{
var material:MovieAssetMaterial = new MovieAssetMaterial("MenuPPV",true,true);
material.interactive = true;
material.oneSide = false;
esfera = new Sphere(material, 100,20,20);
escena.addChild(esfera);
}private function renderizar(e:Event):void{
esfera.yaw(1);
esfera.pitch(1);
renderer.renderScene(escena, camara, viewport);
} }}//CÓDIGO DEL MENÚpackage{import flash.display.*
public class MenuPPV extends MovieClip{
import flash.events.*;
public function MenuPPV(){
programar();
}private function programar(){
addEventListener(MouseEvent.MOUSE_OVER,over);
addEventListener(MouseEvent.MOUSE_OUT,out);
}private function over(e:MouseEvent):void{
e.target.alpha = .3;
}private function out(e:MouseEvent):void{
e.target.alpha = 1;
} }}
Gracias
El material tiene que estar vinculado a la clase MenuPPV en la biblioteca.
Hola viktor, la solución podria ser hacer que los botones sean movieClips con 3 fotogramas. Cada fotograma representaria un estado del botón. En el over le pones un e.target.gotoAndStop(2) (suponiendo que en el fotograma 2 esté la gráfica del over). Y asi sucesivamente.
Espero haberme explicado, de todas formas este fin de semana si tengo tiempo hago un tutorial sobre las "trampas" de los materiales interactivos.