Comunidad de diseño web y desarrollo en internet online

acceder a objetos de swf cargado en un Loader()

Citar            
MensajeEscrito el 01 May 2010 08:53 pm
Hola foro,

tengo esta función que me funciona bien cuando intento leer texto estático en _root:

Código ActionScript :

function readDocument() {

   for (var i = 0; i < this.numChildren; i++) {
      var displayitem:DisplayObject=this.getChildAt(i);

      if (displayitem is StaticText) {
         var myStaticText:StaticText=StaticText(displayitem);
         trace(myStaticText.text);
      }
   }
}

readDocument()



Ahora quisiera usarla para leer el contenido de swf's que cargo:

Código ActionScript :

var url:String="pages/9.swf";
var urlRequest:URLRequest=new URLRequest(url);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_complete);
loader.load(urlRequest);
addChild(loader);

function loader_complete(evt:Event):void {
   readDocument();
}


Pero no sé como hacerlo, supongo que la función readDocument(), debería substituir this por loader, pero solo es una suposición. Gracias anticipadas por la ayuda que me podias brindar.

Un saludo.

Por onTilt

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 May 2010 11:05 pm
pasale como argumento a la funcion un objeto que venga de DisplayObjectContainer para que tenga reusabilidad la funcion , ahora el swf cargado se encuentra en la propiedad content del objeto LoaderInfo , este content es un DisplayObject pero al ser un timeline del swf cargado es tambien un DisplayObjectContainer "MovieClip" en pocas palabras, entonces harias algo asi :

Código ActionScript :

function loader_complete(evt:Event):void
{
   var tmpLdrInfo:LoaderInfo = evt.target as LoaderInfo;
   var swfLoaded:MovieClip = tmpLdrInfo.content as MovieClip;
   readDocument(swfLoaded);
}

//podrias pasarle un MovieClip , Sprite .. etc
function readDocument(disObjCon:DisplayObjectContainer) 
{ 
 
   for (var i = 0; i < disObjCon.numChildren; i++) { 
      var displayitem:DisplayObject=this.getChildAt(i); 
 
      if (displayitem is StaticText) { 
         var myStaticText:StaticText=StaticText(displayitem); 
         trace(myStaticText.text); 
      } 
   } 
}


puede tener algun error , no tengo flash a la mano, lo hice con el gedit de ubuntu 10.04 yeah!! , hehe bueno espero te de sirva, suerte.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 02 May 2010 03:24 pm
Gracias jn_Flash por tu respuesta, con una pequeña modificación ha funcionado perfecto. EL script queda como sigue:

Código ActionScript :

var url:String="prueba.swf";
var urlRequest:URLRequest=new URLRequest(url);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_complete);
loader.load(urlRequest);
addChild(loader);

function loader_complete(evt:Event):void {
   var tmpLdrInfo:LoaderInfo=evt.target as LoaderInfo;
   var swfLoaded:MovieClip=tmpLdrInfo.content as MovieClip;
   readDocument(swfLoaded);
}

function readDocument(disObjCon:DisplayObjectContainer) {
   for (var i = 0; i < disObjCon.numChildren; i++) {
      var displayitem:DisplayObject=disObjCon.getChildAt(i);
      if (displayitem is StaticText) {
         var myStaticText:StaticText=StaticText(displayitem);
         trace(myStaticText.text);
      }
   }
}


Ahora una última duda, si el .swf que quiero cargar es una archivo de actionscript 2, da error (carga el .swf, pero da error) no es imprescindible, pero me gustaría saber si hay solución

Muchas gracias de nuevo. Un saludo.

Por onTilt

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 May 2010 03:42 pm
no hay solucion , As2 y As3 usan distintia maquina virtual , no puedes mezclar As2 y As3 tanto en codigo como en swf publicados.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 02 May 2010 04:03 pm
Vaya, eso me temía ... lástima. Bueno, aprovecho para pegar una solución diferente, lo he adaptado de la versión que usaba en actionscript2:

Código ActionScript :

function readDocument(disObjCon:DisplayObjectContainer) {
   var mySnap:TextSnapshot=disObjCon.textSnapshot;
   var count:Number=mySnap.charCount;
   trace(mySnap.getText(0,count));
}


Gracias.Un saludo

Por onTilt

24 de clabLevel



 

firefox

 

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