RemoveChild después de alfa 0
2 seguidores
Hola a todos,
A ver si me pueden sacar estas dudas:
Tengo varios objetos en escena que van perdiendo el alfa hasta llegar a cero. Me he planteado si no era mejor, una vez que los objetos ya no se ven, quitarlos de la lista de representación (no sé si esto hace que la aplicación sea más liviana¿??).
Lo he intentado de esta manera con removeChild y removeChildAt, pero me da error. ¿Alguien puede ayudarme?
Gracias!
var desapareceE:Timer = new Timer(20,0);
desapareceE.addEventListener(TimerEvent.TIMER, desapareceObjetoE);
function desapareceObjetoE(event:TimerEvent){
e.alpha -= .01;
if(e.alpha < .001){
removeChild(e);
}
}
desapareceE.start();
GUSUM
Hola Lukánicos,
Gracias por la explicación y por el enlace.
(Uf!, cuánto hay que estudiar!..)
Un saludo!!
Lukánicos
Hola:
Cuando añades listeners que vas a suprimir más tarde es bueno hacer que la referencia al listener sea débil (el 5º parámetro hacerlo true), para que la borre realmente el GarbageCollector. Incluso hay bastante gente que recomienda añadir los listeners siempre de esta forma, los elimines más tarde o no.
http://livedocs.adobe.com/flash/9.0_es/ActionScriptLangRefV3/flash/events/IEventDispatcher.html#addEventListener();
Pero vamos, si tu aplicación no es muy compleja (no estás constantemente añadiendo y suprimiendo listeners, y distribuyendo eventos personalizados) no vas a notar mayor problema.
Un saludo.
GUSUM
Hola Lukánicos!
Muchas gracias!
Claro, tenía que parar el timer.
Estoy usando timers por que tengo varios objetos en escena que se van fundiendo unos con otros, y es la manera que encontré (de momento), para ir largando el alpha de cada uno de los objetos.
Gracias por la sugerencia de tu código, que funciona perfecto; aunque hay cosas que no entiendo, por ejemplo: ¿A qué hacen referencia el false, el 0 y el true?
Gracias y saludos!!
Lukánicos
BuenAS:
Deberías detener el Timer cuando eliminas el símbolo. En el siguiente ciclo después de eliminarlo ya no existe, por lo que emite el error.
Otra opción que podrías plantearte es utilizar listener del evento Event.ENTER_FRAME, en lugar de un timer; así lo podrías hacer más genérico. Algo así, para una serie de símbolos e, f, g...:
e.addEventListener(Event.ENTER_FRAME, autoAlpha, false, 0, true);
f.addEventListener(Event.ENTER_FRAME, autoAlpha, false, 0, true);
g.addEventListener(Event.ENTER_FRAME, autoAlpha, false, 0, true);
...
function autoAlpha(event:Event):void
{
var simbolo:DisplayObject = event.currentTarget as DisplayObject;
simbolo.alpha -= 0.01;
if (simbolo.alpha < 0) {
simbolo.removeEventListener(Event.ENTER_FRAME, autoAlpha);
this.removeChild(simbolo);
simbolo = null;
trace("remove");
}
}
Un saludo.