Papervision: Almacenar variables en elementos 3D |
Etiquetas: InteractiveScene3DEvent InteractiveColorMaterial extra interactiveSceneManager renderCamera |
package { import flash.display.*; import flash.events.*; import org.papervision3d.cameras.*; import org.papervision3d.objects.*; import org.papervision3d.scenes.*; import org.papervision3d.materials.*; import org.papervision3d.events.*; import org.papervision3d.utils.*; public class GuardarVariables extends Sprite { var contenedor:Sprite; var scene:InteractiveScene3D; var camera:FreeCamera3D; var contenedor3D:DisplayObject3D = new DisplayObject3D(); var plane:DisplayObject3D; var ism:InteractiveSceneManager; public function GuardarVariables() { crearEscenario(); crearElementos(); } function crearEscenario() { contenedor = new InteractiveSprite(); contenedor.x=200; contenedor.y=200; addChild(contenedor); scene = new InteractiveScene3D( contenedor ); camera=new FreeCamera3D ; camera.z=-700; camera.zoom=2; //Este es el controlador de Eventos en 3D. Asocio el evento CLICK a la función mostrarColorPlano //y luego recojo el objeto presionado con el atributo displayObject3D del evento. ism = scene.interactiveSceneManager; InteractiveSceneManager.SHOW_DRAWN_FACES = false; ism.enableMouse = true; ism.buttonMode = true; ism.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, mostrarColorPlano); addEventListener(Event.ENTER_FRAME,Renderizar); } function crearElementos():void { for(var i:uint = 0; i < 10; i++){ var color:uint = Math.random() * 0xffffff; var material:InteractiveColorMaterial = new InteractiveColorMaterial(color); material.oneSide=false; plane=new Plane(material,200,200,1,1); plane.z = i * 100-500 plane.y = Math.cos(Math.PI * .2 * i)*200 plane.x = Math.sin(Math.PI * .2 * i)*200 //Para almacenar variables en objetos, creo una variable de tipo Object donde almaceno todas las variables del objeto3D. //Después almaceno esta variable de tipo Object dentro de la propiedad extra del objeto 3D. var obj:Object = new Object(); obj.id = i; obj.color = color.toString(16); plane.extra = obj; contenedor3D.addChild(plane); } scene.addChild(contenedor3D); } function Renderizar(event:Event):void { contenedor3D.rotationY+= (mouseX/10 - 20) - contenedor3D.rotationY / 10; scene.renderCamera(camera); } //Esta es la función que se ejecuta al hacer click sobre uno de los planos. Por medio del atributo displayObject3D podemos //detectar sobre que elemento se ha pulsado private function mostrarColorPlano(e:InteractiveScene3DEvent):void{ var c = e.displayObject3D; var raiz = parent; raiz.Pulsado_txt.text = "ID plano: " + c.extra.id + " Color: " + c.extra.color } } }

Gracias!!! Está muy bien ver que a alguien le sirve todo esto. |
Si tienes la última versión, es que tienes Papervision GreatWhite. Este ejemplo está en 1.7 y tú tienes la 2. Puedes ver algunos ejemplos de tu versión aquí: http://www.esedeerre.com/portada/10/papervision-greatwhite-flash-ejemplos-tutoriales-actionscript3.0 |
Hola Victor, la versión 1.7 de Papervision está en el repositorio de Papervision Concretamente, en la carpeta "as3/tags/" (también está la versión 1.5 |
|
|