Comunidad de diseño web y desarrollo en internet online

sacar valor variable fuera de funcion xml

Citar            
MensajeEscrito el 03 Jun 2010 07:50 pm
Hola, tengo una duda que no soy capaz de resolver, he leido como se debe declarar las variables en as3, pero tengo un problema, cuando por ejemplo en la funcion que retorna el Event.COMPLETE de la carga de xml:

Código ActionScript :

//funcion que se ejecuta al acabar de cargar
function cargaCompleta(evt:Event):void {
   //almacenamos los datos del xml en nuestro objeto xmlData
   xmlData=new XML(xmlLoader.data);
   //trace(xmlData.secciones.seccion[0].@nombre);
   var longMenu:Number=xmlData.secciones.*.length();
   trace(longMenu);
   for (var i= 0; i<longMenu; i++) {
      var seccion:mcSeccion = new mcSeccion();
      seccion.seccion_mc.texto_txt.text=xmlData.secciones.seccion[i].@nombre;
      seccion.seccion_mc.texto_txt.mouseEnabled=false;
      seccion.name="seccion"+i;
      seccion.x = 100+(seccion.width*i) - 10;
      seccion.y=100;
      TweenMax.to(seccion.seccion_mc, 0.5, {x:0});
      addChild(seccion);
   }


no soy capaz de sacar el valor longMenu fuera de la función, si trato de hacer un trace(longMenu) fuera de la funcion me da error de acceso a una propiedad no definida, si trato de declarar todo fuera de la funcion me da error, imagino que porque ha ejecutado el codigo antes de que acabe de cargar el xml ...

El caso es que leo que declarando con var puedo usar esa variable dentro de las funciones, digamos que es global en ese fotograma no? , pero como puedo usar el valor de una variable declarado dentro de una funcion? no se, me parece mas comodo la forma de trabajar de as2, pudiendo acceder a valores que son necesarios en cualquier momento, o claro está, no se como hacerlo en as3 :) ..

A ver si alguno me dice como poder por ejemplo, usar el valor longMenu fuera de la funcion.

Saludos

Por douglashall

14 de clabLevel



 

safari
Citar            
MensajeEscrito el 04 Jun 2010 02:45 am
Antes de la función pon

var longMenu:Number;

Luego dentro de la función modifica esta línea

longMenu=xmlData.secciones.*.length();

Listo, ya lo puedes acceder siempre que estés dentro de la misma línea de tiempo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Jun 2010 07:48 pm
Hola solisarg, ya habia probado, el resultado me da NaN , por eso preguntaba, me extrañaba que declarando la variable fuera no funcionara, pero me responde NaN. Te pongo el codigo completo por si ves el error:

Código ActionScript :

top();
//Importar TweenMax
import com.greensock.*;

//declaramos el objeto de la ruta del xml
var xmlRuta:URLRequest=new URLRequest("menu.xml");
//declaramos el objeto para cargar el xml
var xmlLoader:URLLoader = new URLLoader();
//ejecutamos la carga de nuestro xml
xmlLoader.load(xmlRuta);
//funcion que se ejecutará cuando acabe de cargar
xmlLoader.addEventListener(Event.COMPLETE, cargaCompleta);
//declaramos el objeto que almacenará el xml
var xmlData:XML;
var longMenu:Number;
//funcion que se ejecuta al acabar de cargar
function cargaCompleta(evt:Event):void {
   //almacenamos los datos del xml en nuestro objeto xmlData
   xmlData=new XML(xmlLoader.data);
   //trace(xmlData.secciones.seccion[0].@nombre);
   longMenu=xmlData.secciones.*.length();
   for (var i= 0; i<longMenu; i++) {
      var seccion:mcSeccion = new mcSeccion();
      seccion.seccion_mc.texto_txt.text=xmlData.secciones.seccion[i].@nombre;
      seccion.seccion_mc.texto_txt.mouseEnabled=false;
      seccion.name="seccion"+i;
      seccion.x = 100+(seccion.width*i) - 10;
      seccion.y=100;
      TweenMax.to(seccion.seccion_mc, 0.5, {x:0});
      addChild(seccion);
   }

}

trace(longMenu);


Un saludo y gracias

Por douglashall

14 de clabLevel



 

safari
Citar            
MensajeEscrito el 04 Jun 2010 08:04 pm
Ok, no lo pongas como Number, sino como String

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Jun 2010 09:32 am
Hola de nuevo Solisarg, como String me devuelve null

Código ActionScript :

stop();
//Importar TweenMax
import com.greensock.*;

//declaramos el objeto de la ruta del xml
var xmlRuta:URLRequest=new URLRequest("menu.xml");
//declaramos el objeto para cargar el xml
var xmlLoader:URLLoader = new URLLoader();
//ejecutamos la carga de nuestro xml
xmlLoader.load(xmlRuta);
//funcion que se ejecutará cuando acabe de cargar
xmlLoader.addEventListener(Event.COMPLETE, cargaCompleta);
//declaramos el objeto que almacenará el xml
var xmlData:XML;
var longMenu:String;
//funcion que se ejecuta al acabar de cargar
function cargaCompleta(evt:Event):void {
   //almacenamos los datos del xml en nuestro objeto xmlData
   xmlData=new XML(xmlLoader.data);
   //trace(xmlData.secciones.seccion[0].@nombre);
   longMenu=xmlData.secciones.*.length();
   for (var i= 0; i<longMenu; i++) {
      var seccion:mcSeccion = new mcSeccion();
      seccion.seccion_mc.texto_txt.text=xmlData.secciones.seccion[i].@nombre;
      seccion.seccion_mc.texto_txt.mouseEnabled=false;
      seccion.name="seccion"+i;
      seccion.x = 100+(seccion.width*i) - 10;
      seccion.y=100;
      TweenMax.to(seccion.seccion_mc, 0.5, {x:0});
      addChild(seccion);
   }

}

trace(longMenu);


Se me hace un poco raro que no se pueda de ambas maneras no?

Saludos

Por douglashall

14 de clabLevel



 

safari
Citar            
MensajeEscrito el 07 Jun 2010 10:51 am
El trace lo tienes que hacer despu{es de que haya cargado, es decir despu{es que se haya ejecutado cargaCompleta, antes no tiene valor. Vale en el caso por ejemplo de que cuando termines de cargar, te muevas al siguiente fotograma y allí uses la variable

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Jun 2010 01:14 pm
Si, en otro fotograma si habia probado y bien, pero yo queria hacerlo en el mismo, no es posible entonces?

Un saludo y gracias

Por douglashall

14 de clabLevel



 

safari
Citar            
MensajeEscrito el 07 Jun 2010 01:47 pm
No, porque se ejecuta antes de que se haya cargado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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