Foros del Web » Creando para Internet » Flash y Actionscript »

AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

Estas en el tema de AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada? en el foro de Flash y Actionscript en Foros del Web. Hola gente. Estoy liadísima, esto no me cuadra. Estoy tratando de modificar una variable de clase: private var pepe:String; Dentro de un evento listener. En ...
  #1 (permalink)  
Antiguo 26/06/2009, 16:48
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Exclamación AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

Hola gente.

Estoy liadísima, esto no me cuadra.

Estoy tratando de modificar una variable de clase:

private var pepe:String;



Dentro de un evento listener. En este caso, un evento que me avisa de que se ha cargado un XML. Ese xml lo quiero guardar como string o como sea, me da igual, en esta variable.

Pero cuando hago print dentro, sí sale, cuando hago el trace(pepe) fuera de esta función sale "NULL".


Eso significa que las variables no tienen el mismo ámbito... es como si estuviera modificando otra cosa.


Aquí está el código. Qué demonios hay que hacer para poder modificar esa variable??? absolutamente TODOS los tutoriales en todos los libros y en internet hacen el ejemplo con un TRACE dentro del listener. PERO no hay ningún ejemplo que modifique algo de fuera, a menos que sea una propiedad del target, así que no puedo entender.


Código:
package{

	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.*;

	public class Main extends Sprite {

		var datos:XML;

		public function Main() {
			cargarXML("xml.xml");
			trace(datos);
		}

	   function cargarXML(ruta:String):void {
			var loader:URLLoader = new URLLoader();
			loader.addEventListener(Event.COMPLETE, cargaCompletada);
			loader.load(new URLRequest(ruta));
		}

	   function cargaCompletada(event:Event):void {
			try {
				datos = new XML(event.target.data);
			} catch (e:TypeError) {
				trace("Error en el parseado de XML");
				trace(e.message);
			}
		}
		
	}

}

Lo que sale es NULL. O sea, que datos se modifica dentro del listener (y funciona, si) pero fuera desaparece!!
__________________
Darkgaze
  #2 (permalink)  
Antiguo 27/06/2009, 14:25
 
Fecha de Ingreso: mayo-2008
Ubicación: Murcia, España
Mensajes: 313
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

Yo normalmente no utilizo un atributo a nivel de clase para guardar el documento XML...

Si lo que vas a hacer es una lectura única del xml, hazte una función y le pasas como parámetro el event.target.data, lo recorres, lo cargas y ya no lo vas a volver a necesitar.
  #3 (permalink)  
Antiguo 27/06/2009, 18:03
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

ah ya veo.

Dices que haga una funcion a la que llamo desde esta.


O sea... que simplemente no se pueden modificar variables dentro de un gestor de evento... Esto, sinceramente, me parece la cosa más marciana que he visto..

¿alguien me puede explicar por qué ocurre esto?. Será un error de concepto sobre AS3
__________________
Darkgaze
  #4 (permalink)  
Antiguo 27/06/2009, 19:31
 
Fecha de Ingreso: mayo-2008
Ubicación: Murcia, España
Mensajes: 313
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

Pues la verdad.. yo no veo ningún error en el código, pero tengo entendido que si se puede, ya que por ejemplo, esto que tengo a mano:

Código actionscript:
Ver original
  1. private var menuPosition:int = 0;
  2.  
  3. function onRightClick(e:MouseEvent) {
  4.      menuPosition++;
  5. }

El evento va sobre un botón e incrementa menuPosition... pero vamos... será por algo puntual.. Te lanza algún error?
  #5 (permalink)  
Antiguo 28/06/2009, 08:25
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

Nop! Pues eso en teoría NO funciona.
Yo lo he hecho también, como has visto, y devuelve un null. Se pierd el dato al salir.
__________________
Darkgaze
  #6 (permalink)  
Antiguo 28/06/2009, 08:26
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

Estoy pensando q ue a lo mejor pasa eso... solo cuando es un evento de completado.
__________________
Darkgaze
  #7 (permalink)  
Antiguo 28/06/2009, 08:28
 
Fecha de Ingreso: mayo-2008
Ubicación: Murcia, España
Mensajes: 313
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

Es qeu a ver... claro he interpretado mal esto

Te devuelve NULL por que estás haciendo un trace de algo que aun no ha sido cargado...

Hasta que no se dispara el evento COMPLETE no se instancia el objeto, por tanto, por mucho trace que hagas, siepmre será null hasta que se dispare el evento.
  #8 (permalink)  
Antiguo 28/06/2009, 09:11
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

yumm....

mmm... ah. ya veo.

O sea que... tengo que esperar.

Claro, claro, eso es... y cómo demonios espero? Simplemente, al haber asignado la variable, doy por hecho que ya está. Pero y si instantaneamente decido utilizar los datos?Hago un bucle while hasta que cumpla que la variable que uso como controladora (por ejemplo un booleano) se ponga a true dentro del evento de complete, no continuo?
__________________
Darkgaze
  #9 (permalink)  
Antiguo 28/06/2009, 09:39
 
Fecha de Ingreso: mayo-2008
Ubicación: Murcia, España
Mensajes: 313
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

No sería lo más apropiado....

Lo que te digo, create una función que sea llamada desde el disparador del evento, mientras tanto, muestras un mensaje de "Cargando.."
  #10 (permalink)  
Antiguo 28/06/2009, 10:17
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

si. ya está. me ha funcionado.

Con el while se fastidiaba. :E

Haré eso. pero al menos ya lo entiendo. gracias
__________________
Darkgaze
  #11 (permalink)  
Antiguo 28/06/2009, 10:43
 
Fecha de Ingreso: mayo-2008
Ubicación: Murcia, España
Mensajes: 313
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

;) piensa que está "cargando" el archivo XML, quizá en local lo haga muy rápido, pero una vez en el hosting, puede ir mas lento, siempre tienes que ir de evento en evento llamando a las funciones
  #12 (permalink)  
Antiguo 29/06/2009, 05:09
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

ah. estupendo :) mil gracias
__________________
Darkgaze
  #13 (permalink)  
Antiguo 10/11/2010, 11:03
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: AS3. ¿Por qué cambiar una variable dentro de un listener no hace nada?

Hola, tengo el mismo problema, seria bueno ver parte del codigo que se agrgeo para ver como lo solucionaste,

muchas gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:52.