Comunidad de diseño web y desarrollo en internet online

getDefinition en swf externos

Citar            
MensajeEscrito el 24 Ene 2012 07:19 pm
Hola! Estoy teniendo un problema y ya no se me ocurre nada para poder resolverlo.

Sucede que tengo algo muy simple, un swf que carga a otro, la funcion del primer swf es simplemente ser un preloader. El problema es que cuando quiero usar el getDefinition en el sfw cargado me sale el famoso error #1065: No se ha definido la variable En teoría estoy cargando el swf en el mismo contexto pero no me funciona. Mi código sería el siguiente.

Aqui cargo el swf:

Código ActionScript :

var mLoader:Loader = new Loader();
         
         var lc:LoaderContext = new LoaderContext();
         lc.applicationDomain = ApplicationDomain.currentDomain;

         mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
         mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
         mLoader.load(new URLRequest("Main.swf"), lc);

function onCompleteHandler(loadEvent:Event)
      {
         var ClassDefinition:Class = getDefinitionByName("com.Main") as Class;
         var mainMovie:MovieClip = new ClassDefinition();
         addChild(mainMovie);
      }


Y en Main.swf tengo una función que hace uso de getDefinition no funciona:

Código ActionScript :

var ScreenReference:Class = loaderInfo.applicationDomain.getDefinition("com."+screensXml.screen[idScreen].@name) as Class;
screen = new ScreenReference(screensXml.screen[idScreen].toString());
addChild(screen);


Espero que alguien me de una mano :D

Saludos.

Por Eze

30 de clabLevel



Genero:Masculino  

Lo mas recondito de esta maldita Tierra

firefox
Citar            
MensajeEscrito el 24 Ene 2012 08:12 pm
Imagino que es necesario tener al menos una variable definida del tipo de clase que quieres obtener a traves de getDefinition().

Main.as

Código ActionScript :

package com {
   
   import flash.display.MovieClip;
   import com.Miclase;   
   import flash.events.Event;
   import flash.utils.getDefinitionByName;
   public class Main extends MovieClip {
      
      private var screen:MovieClip;
      private var miclase:Miclase; //prueba que sucede cuando comentas esta linea
      public function Main() {
         addEventListener(Event.ADDED_TO_STAGE, handlerInit);         
      }
      private function handlerInit(e:Event):void
      {
         mifuncion();
      }
      private function mifuncion():void
      {         
         var ScreenReference:Class = loaderInfo.applicationDomain.getDefinition("com.Miclase") as Class;
         screen = new ScreenReference();
         addChild(screen);
      }
   }
   
}

Miclase.as

Código ActionScript :

package com {
   import flash.display.MovieClip;
   import flash.events.Event;
   public class Miclase extends MovieClip {

      public function Miclase() {
         addEventListener(Event.ADDED_TO_STAGE, handlerInit);
      }
      private function handlerInit(e:Event):void
      {
         trace("Now in stage!");
      }

   }
   
}



Saludos


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 24 Ene 2012 08:41 pm
Lo intenté pero sigo teniendo el mismo error, en realidad si pruebo la pelicula que se va a cargar sola, funciona perfectamente el problema es cuando lo cargo desde otro swf por eso imagino que es algun problema con el aplication domain pero no logro encontrarle la vuelta.

Por Eze

30 de clabLevel



Genero:Masculino  

Lo mas recondito de esta maldita Tierra

firefox
Citar            
MensajeEscrito el 24 Ene 2012 09:13 pm

exekiel21 escribió:

Imagino que es necesario tener al menos una variable definida del tipo de clase que quieres obtener a traves de getDefinition().

Main.as

Código ActionScript :

package com {
   
   import flash.display.MovieClip;
   import com.Miclase;   
   import flash.events.Event;
   import flash.utils.getDefinitionByName;
   public class Main extends MovieClip {
      
      private var screen:MovieClip;
      private var miclase:Miclase; //prueba que sucede cuando comentas esta linea
      public function Main() {
         addEventListener(Event.ADDED_TO_STAGE, handlerInit);         
      }
      private function handlerInit(e:Event):void
      {
         mifuncion();
      }
      private function mifuncion():void
      {         
         var ScreenReference:Class = loaderInfo.applicationDomain.getDefinition("com.Miclase") as Class;
         screen = new ScreenReference();
         addChild(screen);
      }
   }
   
}

Miclase.as

Código ActionScript :

package com {
   import flash.display.MovieClip;
   import flash.events.Event;
   public class Miclase extends MovieClip {

      public function Miclase() {
         addEventListener(Event.ADDED_TO_STAGE, handlerInit);
      }
      private function handlerInit(e:Event):void
      {
         trace("Now in stage!");
      }

   }
   
}



Saludos


eXe



Usa el ejemplo que te pase junto al cargador que te paso aqui:
Cargador.as

Código ActionScript :

package com {
   import flash.display.Loader;
   import flash.net.URLRequest;
   import flash.system.LoaderContext;
   import flash.events.Event;
   import flash.events.ProgressEvent;
   import flash.display.MovieClip;
   import flash.system.ApplicationDomain;
   import flash.utils.getDefinitionByName;
   
   public class Cargador extends MovieClip {
      private var mLoader:Loader = new Loader();
         
        private var lc:LoaderContext = new LoaderContext();
      
      public function Cargador() {
         // constructor code
         lc.applicationDomain = ApplicationDomain.currentDomain;

         mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
        // mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
         mLoader.load(new URLRequest("main.swf"), lc);
      }
   
   function onCompleteHandler(loadEvent:Event)
    {
         var ClassDefinition:Class = getDefinitionByName("com.Main") as Class;
         var mainMovie:MovieClip = new ClassDefinition();
         addChild(mainMovie);
    }
   
}
}


Main.as se lo asignas a Main.fla
Cargador.as se lo asignas a Cargador.fla

usando esto a mi no me tira ningun error









eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 24 Ene 2012 09:14 pm
Primero create dos nuevos flash,,, uno llamado Main.fla y el otro llamado Cargador.fla,,, para poder probar lo q t pase.


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 25 Ene 2012 12:58 pm
Claro, ahora si me funciona, lo que pasaba era que el getDefinitionByName estaba en una clase de la cual heredaba Main, parece que ese era el problema. Muchas gracias por tu ayuda eXe :D

Por Eze

30 de clabLevel



Genero:Masculino  

Lo mas recondito de esta maldita Tierra

firefox

 

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