Comunidad de diseño web y desarrollo en internet online

Duda: Importar XML en AS3.

Citar            
MensajeEscrito el 30 Jun 2012 05:40 pm
Buenas a todos y gracias de antemano, soy nuevo en el foro y (por ahora) un poco novatillo en AS3, asi que si el tema no va aquí o algo por el estilo, pido disculpas.

El caso es que junto a unos amigos estamos creando un juego bastante sencillo donde en principio puedes seleccionar distintos personajes, cada uno con "capacidades" distintos. Sus "características" (nombre, ruta al grafico, características como velocidad y todo eso,etc.) los tengo en distintos XML en distintas carpetas, y quiero que se pueda seleccionar un .xml en cada caso concreto. Como todavia empezamos, de momento solo queremos seleccionar uno concreto (en ese caso "3.xml"), la extención pensamos hacerla con swich.

El problema surge cuando queremos decirle qué .xml quiere cargar, como ya lot enemos preparado, de momento la variable que determina el nombre es 0 y cambia automaticamente a 3 al pulsar el boton de seleccion, pero para el cargador, es SIEMPRE 0, cuando, a mi entender, no debería ser asi. Aquí dejo el código, si a la variable le doy valor 3 directamente, si funciona. Ayuda por favor!

-------------------------------------------------------------------------------------------------------
CÓDIGO:
-------------------------------------------------------------------------------------------------------

var aNumber:int=0;
var a_XML:XML;
var xmlReq:URLRequest = new URLRequest(("1/3/1/"+aNumber+".xml"));
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.load(xmlReq);
selectbtn.addEventListener(MouseEvent.CLICK, cargar);
function cargar(e:MouseEvent):void{
aNumber=3;
xmlLoader.load(xmlReq);
trace(aNumber)
}
//xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
//omito la función para no generar errores por ahora.
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);

function errorHandler(event:IOErrorEvent):void {
trace("XML loading error: " + event);
}
--------------------------------------------------------------------------------------------------
La solución no es cambiarlo a tipo String ni Number, eso ya lo he probado, en cuanto al 1/3/1 representa la carpeta, que tambien hare variable en cuanto tenga solucionado ese problema. Muchas gracias de antemano :D.

Liourk

Por liourk

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jul 2012 03:34 am

Código ActionScript :

var aNumber:int=0;
var xmlReq:URLRequest = new URLRequest(("1/3/1/"+aNumber+".xml"));


por mas que cambie de valor aNumber, xmlReq va a seguir aputando a "1/3/1/0.xml", al menos que redefinas su url. Que seria asi:

Código ActionScript :

function cargar(e:MouseEvent):void
{
aNumber = 3;
xmlReq = new URLRequest(("1/3/1/"+aNumber+".xml"));
xmlLoader.load(xmlReq);
trace(aNumber);
}


Estas intendando hacer algo como lo sig:

Código ActionScript :

var a:String = "hola";
var b:int = a;

trace(b); //devuelve hola

a = "chau";

trace(b); // devuelve hola. Pero vos esperas que devuelva chau.


No estas programando en una hoja de calculo.
Si el valor de una variable depende del resultado de una operacion entre diferentes variables, la unica manera de actualizar esa variable al cambiar cualquiera de las variables de la cuales depende es realizando nuevamente la operacion y obtener el nuevo resultado.


Saludos

eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 01 Jul 2012 11:33 am
Hola, antes que nada, muchisimas gracias, me ha ayudado mucho y con eso tengo ya buena parte del proyecto terminado. Solo me queda (espero) un problema que resolver, y es que no logro acceder a la información del .xml desde action script. Dejo el código .xml y el código as3, en este caso quiero acceder al valor <base>, al hacerlo no me salta error, pero luego en la salida me dice que <base> es un objeto nulo.
-------------------------------
CÓDIGO XML:
-------------------------------

Código XML :

<perso>
   <properties>
 <!--suprimo lineas innecesarias que no influyen en el problema-->
   </properties>
   <effects>
      <effect id='1'>
         <type>1</type>
         <da>
            <type>3</type>
            <base>3</base>
         </da>
      </effect>
      <effect id='2'>
         <type>2</type>
      </effect>
   </effects>
</perso>

--------------------------------
CÓDIGO AS3:
--------------------------------

Código ActionScript :

var aNumber:uint=0;
var a_XML:XML;
var xmlReq:URLRequest = new URLRequest(("1/3/1/"+aNumber+".xml"));
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.load(xmlReq);
selectbtn.addEventListener(MouseEvent.CLICK, cargar);
function cargar(e:MouseEvent):void{
   aNumber = 3;
   xmlReq = new URLRequest(("1/3/1/"+aNumber+".xml"));
   xmlLoader.load(xmlReq);
}
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);

function xmlLoaded(e:Event):void{
   selectbtn.addEventListener(MouseEvent.CLICK, mostrar);
}
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);

function errorHandler(event:IOErrorEvent):void {
            trace("XML loading error: " + event);
        }
function mostrar(e:MouseEvent):void{
   trace(a_XML.perso.effects.effect.(@id==1).da.base);
}

-------------------------------

¡Muchas gracias de antemano de nuevo! :D

Por liourk

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jul 2012 04:12 pm
reemplaza esto:

Código ActionScript :

trace(a_XML.perso.effects.effect.(@id==1).da.base);


por esto:

Código ActionScript :

trace(a_XML.effects.effect.(@id==1).da.base);


como veras suprimi perso, porque la referencia a un XML siempre devuelve el nodo padre.


Saludos


eXE

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 01 Jul 2012 05:45 pm
Sigue saltandome el error :SS
---------------------
ERROR:
---------------------
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at ew_fla::MainTimeline/mostrar()

Por liourk

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jul 2012 04:02 pm
en ningun momento definis el valor de a_XML, al finalizar la carga lo debes hacer.

Código ActionScript :

function xmlLoaded(e:Event):void
{
a_XML = new XML(e.target.data);   
selectbtn.addEventListener(MouseEvent.CLICK, mostrar);
}


Saludos


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 23 Jul 2012 08:14 am
¡Muchas gracias, y perdon por tardar en responder, estuve unos dias sin ordenador! La solución me sirvió mucho, y el proyecto ya casi está terminado y funciona bastante bien.

Por liourk

5 de clabLevel



 

firefox

 

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