Comunidad de diseño web y desarrollo en internet online

MovieClip y Papervision3D

Citar            
MensajeEscrito el 07 Nov 2010 02:43 pm
Hola a todos!

Tengo la siguiente duda, tengo una escena creada con esferas y cosas de esas, todo bastante simple, pero ahora viene lo que no me sale...quiero insertar un movieclip por delante de la escena...en ese movieclip habria un boton que al pinchar hiciese algo...la historia es que no tengo ni idea de como hacer eso para que aunque yo mueva la camara de la escena y los obejtos que estan dentro el movieclip se quedase fijo...alguien me puede recomendar algun tutorial o explicarme como?..

Gracias!!

Por fg89o

10 de clabLevel



 

msie7
Citar            
MensajeEscrito el 07 Nov 2010 03:06 pm
BuenAS:

No añadas el moviClip como un elemento 3D de Papervision; símplemente añádelo como un movieClip normal de ActionScript. Eso sí, añadelo DESPUÉS de añadir la vista para que aparezca sobre ella.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 07 Nov 2010 07:28 pm
Muchas gracias por tu respuesta.

Te pongo el código:

Código ActionScript :

package {

   import flash.events.Event;
   import org.papervision3d.view.BasicView;

   public class GalaxyExample extends BasicView
   {
      private var galaxy:Galaxy;
      private var player:Player;
      private var candado:Candado;

      public function GalaxyExample()
      {
         stage.frameRate = 40;
         init();
         startRendering();
      }

      private function init():void
      {
         galaxy = new Galaxy();
         scene.addChild(galaxy);
         player = new Player();
         scene.addChild(player);
         var userInput:UserInputHandler = new UserInputHandler(stage);
         camera.target = player;
         camera.z = -1500;
         camera.y = 400;
         
         candado = new Candado;
         addChild(candado);
         this.candado.x = 0;
         this.candado.y = 0;
      }

      override protected function onRenderTick(e:Event=null):void
      {
         galaxy.update();
         player.update();
         super.onRenderTick();
      }
   }
}


La variable candado es el movieclip que quiero insertar. No me da ningun error ni nada simplemente no veo el movieclip por ningun lado....me podrias decir que hago mal?...

Gracias de nuevo!!

Por fg89o

10 de clabLevel



 

msie7
Citar            
MensajeEscrito el 08 Nov 2010 06:07 am
BuenAS:

Como te comentaba antes añade "candado" FUERA de la vista Papervision3D; o sea como si fuese un MovieClip de los de toda la vida.

Ahora mismo estás añadiendo candado a BasicView (una vista 3D de Papervision) y está en un contexto 3D. Imagino que como retrocedes la cámara -1500 y la mueves hacia arriba 400, no veas "camara" (porque se sale del ángulo de visión de la cámara).

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 08 Nov 2010 06:15 am
...ups! me da la sensación de que es la única clase que estás utilizando, ¿De AS3 cómo andas? :)

Crea otra clase y definela como clase documento de tu fla, en lugar de esta.

QUITA DE ESTA CLASE todo el código que hace referencia a "candado";

En el constructor de la nueva clase documento instancia tanto candado como BasicView:

Código ActionScript :

package
{
   import flash.display.Sprite;
   
   public class ClaseDocumento extends Sprite
   {
      public function ClaseDocumento()
      {
         var galaxyExample:GalaxyExample  = new GalaxyExample();
         var candado:Candado = new Candado();
         
         addChild(galaxyExample);
         addChild(candado);
      }
   }
}


Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 08 Nov 2010 09:51 am
La verdad es que de lo que realmente sé es de AS2 y ahora estoy intento ponerme al dia con AS3 y un poco de papervision...he probado tal y como me has dicho...he quitado todo el codigo que hacia referencia a candado y he creado un nuevo fla llamado Main y una clase tal cual me lo has puesto arriba...

Cuando intento iniciarlo me salta el siguiente error:

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at UserInputHandler()
at GalaxyExample/init()
at GalaxyExample()
at Main()


porque puede ser?

Muchas gracias por tu interes y paciencia..!!!

Por fg89o

10 de clabLevel



 

msie7
Citar            
MensajeEscrito el 08 Nov 2010 10:16 am
Ya lo he solucionado....muchisimas gracias!!

Funciona todo perfecto...!!! :lol: dejo todo el código ya que como es un ejemplo del libro "Essencials" por si a alguien le ayuda!!!

GalaxyExample.as :

Código ActionScript :

package {

   import flash.events.Event;
   import flash.display.*;
   import org.papervision3d.view.BasicView;

   public class GalaxyExample extends BasicView
   {
      private var galaxy:Galaxy;
      private var player:Player;
      
      public function GalaxyExample()
      {
         init();
         startRendering();
      }

      private function init():void
      {
         galaxy = new Galaxy();
         scene.addChild(galaxy);
         player = new Player();
         scene.addChild(player);
         camera.target = player;
         camera.z = -1500;
         camera.y = 400;
      }

      override protected function onRenderTick(e:Event=null):void
      {
         galaxy.update();
         player.update();
         super.onRenderTick();
      }
   }
}


Nueva clase Main.as :

Código ActionScript :

package {
   import flash.display.Sprite;
   
   public class Main extends Sprite
   {
      public function Main()
      {
         var galaxyExample:GalaxyExample  = new GalaxyExample();
         var candado:Candado = new Candado();
         var userInput:UserInputHandler = new UserInputHandler(stage);
         
         addChild(galaxyExample);
         addChild(candado);
      }
   }
} 


Muchas gracias de nuevo!!

Por fg89o

10 de clabLevel



 

msie7
Citar            
MensajeEscrito el 08 Nov 2010 10:21 am
BuenAS:

es porque accede al stage (escenario) y en el constructor hay que añadir un listener a Event.ADDED_TO_STAGE, y ponerlo en marcha todo una vez que se haya producido este evento:

Código ActionScript :

package { 
 
   import flash.events.Event; 
   import org.papervision3d.view.BasicView; 
 
   public class GalaxyExample extends BasicView 
   { 
      private var galaxy:Galaxy; 
      private var player:Player; 
      private var candado:Candado; 
 
      public function GalaxyExample() 
      { 
         
         if (stage)
                  init()
         else
                  addEventListener(Event.ADDED_TO_STAGE, init);
      }

      private function init(event:Event=null):void
         {
         if (event != null) removeEventListener(Event.ADDED_TO_STAGE, init);
   
         stage.frameRate = 40; 
         init(); 
         startRendering(); 
      } 
 
      private function init():void 
      { 
         galaxy = new Galaxy(); 
         scene.addChild(galaxy); 
         player = new Player(); 
         scene.addChild(player); 
         var userInput:UserInputHandler = new UserInputHandler(stage); 
         camera.target = player; 
         camera.z = -1500; 
         camera.y = 400; 
          
         candado = new Candado; 
         addChild(candado); 
         this.candado.x = 0; 
         this.candado.y = 0; 
      } 
 
      override protected function onRenderTick(e:Event=null):void 
      { 
         galaxy.update(); 
         player.update(); 
         super.onRenderTick(); 
      } 
   } 
}


Aviso que he copiado tu primera clase que posteaste y he escrito sobre ella directamente AQUÍ, por lo que es muy probable que lleve erratas.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 08 Nov 2010 10:22 am
..pues olvida la anterior respuesta, la he escrito mientras contestabas que ya lo habías solucionado :)

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.