Comunidad de diseño web y desarrollo en internet online

Carga XML.. problema de comunicación entre clases as3.

Citar            
MensajeEscrito el 21 May 2009 10:51 pm
Hola a todos, resulta que tengo un problemita, estoy haciendo un proyecto flash cs4, el cual contiene varios archivos *.as para separar clases.
En particular tengo dos clases, CargaXML en el archivo CargaXML.as el cual carga un archivo xml llamado songs.xml y la clase GuiGameSongSelection en el archivo GuiGameSongSelection.as en el cual quiero listar los datos xml leidos en la instancia de CargaXML pero nose como hacerlo, realmente estoy perdido.
Agradecería mucho su ayuda.

a continuación el código:
CargaXML.as

Código :

package {
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   import flash.xml.XMLDocument;
   import flash.errors.*;
   import flash.events.*;
   
   public class CargaXML {
      
      private var loader:URLLoader;
      private var mainXML:XML;
      //public var message:String = "Variable de instancia llamada";
      
      public function CargaXML(urlDelXML:String){
         loader = new URLLoader();
         loader.addEventListener(Event.COMPLETE, onComplete);
         loader.load(new URLRequest(urlDelXML));
      }
      
      public function onComplete(evt:Event):XML  {
         try {
            mainXML=XML(loader.data);
            //trace(mainXML);
            //trace("Leido el XML");
            
         } catch (e:Error) {
            //trace("Error: " + e.message);
            return;
         }
      }
   }
}


GuiGameSongSelection.as

Código :

package {
   import flash.display.*;
   import flash.events.*;
   import flash.utils.Timer;
   import flash.text.TextField;

   public class GuiGameSongSelection extends MovieClip {
      
      private var XMLSongs:CargaXML;
      
      public function GuiGameSongSelection() {
         XMLSongs = new CargaXML("songs.xml");
         //pruebas con trace
         trace("intentando rescatar datos del xml");
         trace("GuiSongs");
         trace(XMLSongs.message);
         trace(XMLSongs.mainXML);
         
      }
   }
}

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 May 2009 12:51 am
hola ganoncl como estas espero que bien , bno ando en la escuela pero , aki no pasaron del flash 8 , pero siempre traigo mi portable jaja, pero solo ahi unos detalles en tu codigo q tienen una facil solucion bno tenias como private el mainXML y la propiedad message tambien ,y querias acceder a elllas , por eso no te dejaba calar los trace, i modifike un poko la funcion onComplete que se me hace un poco mas comodo responder al listerner,bno e aki el codigo.

Código :

package {
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   import flash.xml.XMLDocument;
   import flash.errors.*;
   import flash.events.*;
   
   public class CargaXML {
      
      private var loader:URLLoader;
      public var mainXML:XML;
      public var message:String = "Variable de instancia llamada";
      
      public function CargaXML(urlDelXML:String){
         loader = new URLLoader();
         loader.addEventListener(Event.COMPLETE, onComplete);
         loader.load(new URLRequest(urlDelXML));
      }
      
      public function onComplete(evt:Event):void  {
         mainXML = new XML(evt.target.data);
       trace(mainXML);
      }
   }
}

Código :

package {
   import flash.display.*;
   import flash.events.*;
   import flash.utils.Timer;
   import flash.text.TextField;

   public class GuiGameSongSelection extends MovieClip {
      
      private var XMLSongs:CargaXML;
      
      public function GuiGameSongSelection() {
         XMLSongs = new CargaXML("./xml_file.xml");
         //pruebas con trace
         trace("intentando rescatar datos del xml");
         trace("GuiSongs");
         trace(XMLSongs.message);
         trace(XMLSongs.mainXML);
         
      }
   }
}


bno nos vemos jeje un saludo

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 22 May 2009 01:01 am
gracias por tu respuesta, aún así el problema persiste.
Reescribiendo el codigo y teniendolo lo más simplificado posible tengo lo siguiente:

Código :

package {
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   import flash.xml.XMLDocument;
   import flash.errors.*;
   import flash.events.*;

   public class CargaXML {

      private var loader:URLLoader;
      public var mainXML:XML;
      public var message:String="Variable de instancia llamada";

      public function CargaXML(urlDelXML:String) {
         loader = new URLLoader();
         loader.addEventListener(Event.COMPLETE, onComplete);
         loader.load(new URLRequest(urlDelXML));
      }

      public function onComplete(evt:Event):void {
         mainXML=new XML(evt.target.data);
      }
   }
}


Código :

package {
   import flash.display.*;
   import flash.events.*;
   import flash.utils.Timer;
   import flash.text.TextField;

   public class GuiGameSongSelection extends MovieClip {

      private var XMLSongs:CargaXML;

      public function GuiGameSongSelection() {
         XMLSongs=new CargaXML("songs.xml");
         trace(XMLSongs.mainXML); //lugar donde quiero hacer el trace

      }
   }
}


La que sucede es que quiero hacer el trace desde la función GuiGameSongSelection, pero lamentablemente nose como escribirlo, el codigo actual me arroja solo null.

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 May 2009 02:36 am
ok , disculpame jeje por las prisas no cheke eso, lo que se me courre es que puedas hacer lo siguiente

Código :

package 
{

   import flash.net.URLLoader;
   import flash.net.URLRequest;
   import flash.xml.XMLDocument;
   import flash.errors.*;
   import flash.events.*;

   public class CargaXML extends EventDispatcher
   {

      private var loader:URLLoader;
      public var mainXML:XML;
      

      public function CargaXML(urlDelXML:String)
      {
         loader = new URLLoader();
         loader.addEventListener(Event.COMPLETE, onComplete);
         loader.load(new URLRequest(urlDelXML));
      }
      public function onComplete(evt:Event):void
      {
         mainXML =  new XML(evt.target.data);
         dispatchEvent(new Event("xmlParsed"));
      }
   }
}

Código :

package 
{
   import flash.display.*;
   import flash.events.*;
   import flash.xml.XMLDocument;
   import flash.utils.Timer;
   import flash.text.TextField;

   public class GuiGameSongSelection extends MovieClip
   {
      private var containerXML:XML = new XML();
      public function GuiGameSongSelection()
      {
         var XMLSongs:CargaXML=new CargaXML("./xml_file.xml");
         XMLSongs.addEventListener("xmlParsed", checkLoad);
         function checkLoad(evt:Event):void
         {
            containerXML = XMLSongs.mainXML;
            trace(containerXML);
         }
      }
   }
}


1000 disculpas men.

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 22 May 2009 02:57 am
Te lo agradesco enormemente, sí funcionó. Ahora voy a buscar la ayuda automatica de flash de diferentes partes del código que para mi son nuevas (soy novato en as3), por ejemplo EventDispatcher y dispatchEvent.

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 May 2009 03:10 am
De nada ganoncl, yo tambien soy novato en as3, pero esta es una gran pagina para aprenderlo, bno me retiro a dormir, jaja, ya es tarde y mañana haya escuela , despues me cuentas que tal te fue :)

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 13 Jul 2010 04:59 am
yo tambien te lo agradezco maneuver me a servido demasiado. muchas gracias desde colombia xD.

Por alejoti

0 de clabLevel



 

chrome

 

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