Variable autoincrementable en AS
Saludos!
estoy haciendo un panel de noticias en flash y soy bastante novato en el tema de programación en AS. El panel hace lo siguiente, carga de un documento en XML las diferentes noticias y las coloca en campos de texto dinámico. Si hago el documento de flash con tantos frames como noticias no tengo problema y me funciona a la perfección, pero quiero dejarlo sólo con 2 frames (no se si será posible). Lo estoy haciendo de la siguiente manera:
En el primer frame asigno un valor a una variable:
var numero:Number=-1;
y en el segundo frame la incremento en 1 y cargo el XML:
var obj_xml:XML = new XML();
numero=numero+1;
trace(numero);
obj_xml.ignoreWhite=true;
obj_xml.onLoad=function(exito) {
if(exito){
titulo_n=titulo_n.text=obj_xml.firstChild.childNodes[numero].childNodes[0].firstChild.nodeValue;
texto_n=texto_n.text=obj_xml.firstChild.childNodes[numero].childNodes[1].firstChild.nodeValue;
}else{
mensaje_txt.text="Error al cargar noticias";
}
};
function cargarXML(){
obj_xml.load("noticias.xml");
}
cargarXML();
stop();
segundos = 5;
espera = function () {
gotoAndPlay(2);
clearInterval(a);
};
a = setInterval(espera, segundos*1000);
El problema que tengo es que cada vez se le asigna de nuevo el valor -1 a la variable y no me carga nada más que la primera noticia. Alguien sabe como solucionar esto??
muchas gracias!!
NachoE
hola y gracias por tu respuesta pero de la forma que tú planteas si no me equivoco se cargan todas las noticias de una vez no??
el setInterval no era por esperar a que cargue, sino el tiempo que permanece visible una noticia antes de cargar otra, que en realidad es lo que quiero, que vaya cambiando la noticia.
un saludo!!
elSuricatoRojo
Yo le pondría al frame 2 el label "loop" y pondría el código que tienes en el frame 2 en el frame 3 junto con el stop. Y en vez de hacer un gotoAndPlay(2); haría un gotoAndPlay("loop"); de tal forma que sales y entras de nuevo en el frame.
Ahora bien, veo un error de planteamiento que te puede tocar las narices. Estas suponiendo que el xml lo cargas en 5 segundos (la parte del setInterval). Ya sé que ese xml lo debes tener ya en cache, pero mi consejo es que si cargas cosas externas no asumas nunca que lo has cargado en x milisegundos por muy pequeño que sea el archivo hasta no tener el callback correspondiente. Te vas a evitar problemas del tipo "me funciona en local pero en el servidor no".
En este caso el callback en cuestión ya lo estás utilizando (obj_xml.onLoad), por lo que despues de pintar puedes hacer, dentro de ese callback el gotoAndPlay.
Y por otra parte te metes en un bucle infinito ya que va a estar así, incrementando "numero" hasta el fin de los tiempos.
Aun así yo cargaría hacer la llamada de la carga del xml en el frame 1 y una vez tengas el callback de carga utilizar un "for" o mejor un "for in" (para moverte por todos los nodos sin saber a priori cuantos hay) para pintarlos. Vamos que se te queda todo en 1 frame y mucho mas solido.
Asi que quedate con:
1) Utilizar setInterval para dara pausas esperando que en ellas se carguen las cosas es malo malo :-)
2) Intenta cargar solo 1 vez el xml.
3) Utiliza el for in para navegar entre lso nodos 1 a 1.
un saludo,
elSuricatoRojo