Comunidad de diseño web y desarrollo en internet online

problema com MovieClip(root) y swfs externos.

Citar            
MensajeEscrito el 15 Sep 2009 08:02 pm
Hace poco compramos en la empresa donde trabajo un componente super mega c0Ol para reproducir videos con una opcion de fullscreen y me esta traiendo mas desgacias que alegrias... despues de conseguir tras muchos esfuerzos por mi parte y por la de los creadores que funcionara correctamente al cojer ese reproductor e incrustarlo en el swf principar me da un error en tempo de ejecucion.
Viendo el codigo no me parece que haya nada raro y es mas, el archivo por si solo funciona, solo me da error cuando cargo en un Loader el swf del componente. El error que me da esta total y absolutamente relacionado con la funcion de fullscreen del componente perono tiene nada de especial el codigo, crea un nuevo MC dnd colocar el video a un tamaño grande hace que ocupe todo el stage y llama a StageDisplayState.FULL_SCREEN para hacer el full screen.

Ahora viene mis dudas:
-Si yo tengo un swf que carga en un loader otro swf. El swf cargado tiene permitido hacer StageDisplayState.FULL_SCREEN o por cuestiones del sand.box no lo permite??
-Estando en el mismo caso de un swf cargado dentro de otro. Si el swf cargado llama a MovieClip(root) se considera la raiz del MovieClip cargado o del contenedor??

ahi va el codigo que me lanza el error:

Código :

function initFullScreen():void{   
   stage.addEventListener(Event.FULLSCREEN, fullScreenHandler);
}

function fullScreenHandler(e:FullScreenEvent):void {
   if (stage.displayState  == StageDisplayState.FULL_SCREEN) {
      try{
         this.visible = false;
      }catch(e:Error){
         
      }
      MovieClip(root).addChild(_video);
      MovieClip(root).addChild(control);
      MovieClip(root).addChild(first_loading_mc);
      control.x = stage.stageWidth/2 - control.width/2;
      control.y = stage.stageHeight -80;
      first_loading_mc.x = stage.stageWidth/2;
      first_loading_mc.y = stage.stageHeight/2;
      control.focusRect = false;
      stage.focus = stage;
      DisplayObjectResizer.resize(_video,_videoW,_videoH,stage.stageWidth,stage.stageHeight);
   } else if(stage.displayState == StageDisplayState.NORMAL){
      try{
         this.visible = true;
      }catch(e:Error){
      }
      addChildAt(_video,1);
      addChildAt(control,1);
      addChild(first_loading_mc);
      first_loading_mc.x = contW/2;
      first_loading_mc.y = contH/2;
      control.x = 2.7;
      control.y = 243;
      DisplayObjectResizer.resize(_video,_videoW,_videoH,contW,contH);
   }
}


y este es el error:

Código :

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
   at main_fla::video_player_57/initFullScreen()
   at main_fla::video_player_57/frame1()

Por Atomsk

350 de clabLevel

3 tutoriales

 

firefox
Citar            
MensajeEscrito el 16 Sep 2009 12:05 pm
Si te fijas, el error lo dá en la función initFullScreen
Luego la pregunta es :¿por qué da error la línea?

Código ActionScript :

stage.addEventListener(Event.FULLSCREEN, fullScreenHandler);

Porque NO está definido "stage". Esto es, porque, cuando pasa por ahí, el loader no está todavía añadido a la displayList.
Existen dos doluciones (espero que alguna funcione)
1.-La más sencilla, hacer el addChild del loader ANTES de mandarlo a cargar

Código ActionScript :

//en la película principal
var loader:Loader=new Loader();
//lo añadimos directamente
addChild(loader)
//luego ya podemos cargar lo que sea
loader.load(new URLRequest("qqq.swf));

2.-NO llamar a la función initFullScreen hasta que NO se haya añadido el .swf
La idea es que la Clase sea más o menos como

Código ActionScript :

public class VideoPlayer{
       public function VideoPlayer(){
              //sólo añadimos el evento
              this.addEventListener(Events.ADD_TO_STAGE,onAnadirStage)
       }
       private function onAnadirStage(e:Event){
             this.removeEventListener(Events.ADD_TO_STAGE,onAnadirStage);
             //y ahora sí llamamos a la función
             initFullScreen()
       }
       ......
}

NOTA:En lugar de llamar a la función initFull, podemos escribir directamente stage.addEventListener(Event.FULLSCREEN, fullScreenHandler);

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Sep 2009 06:01 pm
Gracias eliseo lo solucione usando la primera opcion algo adaptada a la locura de fla que tengo que usar u.u :cool: ahora el fullscreen me lo hace pero como es un swf que necesito que tenga cosas fuerq del escenario me hace cosas raras. Es hora de jugar a las cordenas h3 tocado y hundido...

Por Atomsk

350 de clabLevel

3 tutoriales

 

firefox

 

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