Em continuação com o tutorial (001 - 002 - 003 - 004 - 005)
3.2.2. Como remover EventListeners ?
Os eventListener’s são muito úteis como puderam ver em cima, mas ao mesmo tempo podem ser causadores de problemas, bem como sobrecarregar o .swf final, vejamos no caso de querer-mos apenas que o botão apenas dispare o evento click uma única vez. No caso explicado anteriormente o botão disparará sempre o evento click e mouse over durante todo o tempo que o .swf tiver aberto, logo, se o nosso objectivo é apenas saber a primeira vez que o botão foi clicado, deixando o código em cima produziria um objectivo inválido, já que seria executado sempre que o user clica-se no botão. Aqui é que entram os removeListner’s, ou seja, se pretendemos que o botão apenas dispare uma única vez a função associada ao evento click teremos que remover esse eventListner assim que o nosso objectivo esteja concluído (apenas chamar a função uma única vez) e para isso faríamos o seguinte, usando a função anteriormente:
meuBotao1.addEventListener(MouseEvent.CLICK, botao_evento);
private function botao_evento(evt:MouseEvent):void {
switch (evt.type) {
case MouseEvent.CLICK:
meuBotao1.move(btn.x+5, btn.y+5);
//temos o objectivo terminado, logo vamos remover o eventListner:
meuBotao1.removeEventListener(MouseEvent.CLICK, botao_evento);
break;
}
Desta feita, a função botao_evento apenas será chamada pelo eventListener uma única vez, já que removemos o seu eventListener:
meuBotao1.removeEventListener(MouseEvent.CLICK, botao_evento);
neste removeEventListener temos apenas que cumprir uma regra; o evento a ser removido terá que ser exactamente igual (MouseEvent.CLICK) ao adicionado (addEventListener) incluindo a função a ele associada (botao_click), já que podem existir várias funções associadas ao mesmo eventListner:
meuBotao1.removeEventListener(MouseEvent.CLICK, botao_evento);
Nota:
Garbage Collector:
Como o nome diz, traduzido à letra, é um reconhedor de lixo, é um mecanismo que o flash player possui para, durante a execução, inspeccionar regularmente o swf e remover itens, objectos e referencias não utilizados ou deixados esquecidos pelo programador.
Regra geral os eventos não são inspeccionados nem removidos nessa recolha pelo garbage collector, porque o programador deve ter o bom senso de os remover, mas se for iniciante, provavelmente esquecerá um ou outro event listener, e por isso uma boa prática será marcar os seus event Listeners para serem inspeccionados pelo garbage collector e removidos se desnecessários, para para isso quando criam o vosso event listener devem ter em atenção mais alguns parâmetros (sendo que apenas um deles é o mais importante).
Estou a falar de um argumento (useWeakReference) que indica ao garbage collector para o inspeccionar e remover se não for preciso, este argumento é o numero 5 na lista de argumentos dos addEventListener’s:
addEventListener(type:String, listner:Function, useCapture:Boolean=false, priority:int=0,
useWeakReference:Boolean=false)
Estes 3 parâmetros a mais escuro são opcionais, explicando:
useCapture: Serve para “observar” o “caminho do evento” até este ser disparado no seu “target” objecto. Por defeito a false, e devem deixar estar assim, pelo menos quase sempre.
priority: Usado para definir a prioridade desse evento, no caso de existirem muitos eventos associados ao objecto. Por defeito a 0, quase sempre usado assim.
useWeakReference: O mais importante dos 3, este por uma questão de boas práticas devem utilizar como true visto ser este parâmetro que indica ao garbage collector para o remover caso ele seja esquecido.
O uso desta opção não é uma alternativa ao removeEventListener e nem deve ser usado como tal, (usem sempre o removeEventListener), mas sim deve ser usado como uma questão de boas práticas, pelo que anteriormente nos nossos event listeners deveremos passar a usar:
meuBotao1.addEventListener(MouseEvent.CLICK, botao_evento, false, 0, true);
meuBotao1.addEventListener(MouseEvent.MOUSE_OVER, botao_evento, false, 0, true);
meuBotao1.addEventListener(MouseEvent.MOUSE_OUT, botao_evento, false, 0, true);
Se começarem a ganhar este hábito, dificilmente terão problemas de memória com os eventListener’s, mesmo que se esqueçam de os remover, porque afinal de contas, muito mal se fala do sistema de limpeza de lixo do flash player, mas muitos desses problemas provem de maus hábitos de programação, por isso é altamente aconselhado a seguir boas praticas de programação tanto no action script como em qualquer outra linguagem de programação.
Existem mais alguns pontos onde devemos ter especial atenção durante o desenvolver de uma animação ou aplicação, mas disso falaremos mais à frente.
Quanto a trabalhar com eventos, as coisas básicas passam pelas anteriormente faladas, podemos usar eventos para quase tudo, e durante a aprendizagem e vossa evolução na programação com bastante certeza irão encontrar muitas aplicações práticas para os eventos e como eles se podem tornar quase imprescindíveis.
Nas próxima parte vamos falar de algo muito importante na nova versão do Action Script (3) que diferencia bastante a apresentação gráfica dos nossos elementos no .swf final; Estou a falar da Display List.
Continua…
Um abraço.
http://creativecommons.org/licenses/by-nc-nd/3.0/deed.pt









6 Comentários
mario podia fala tbm sobre xml

Olá Mário… Trabalho em Goiânia e vamos adotar o flex… a ordem é aprender Action Script e isso está sendo muito fácil com sua ajuda
Parabéns e obrigado pelas contribuições, estamos todos de olho em seus posts!
michel, pra falar de xml primeiro tenho que explicar bem como funciona a estrutura XML, objectos e cadeia da elementos… mais à frente… não tenha pressa
Tenho que começar devagar senão quem não percebe muito de AS3 se perderia facilmente e em vez de explicar só complicava…
Julierme Barros.
Ainda bem que está ajudando
Está mesmo sendo facil acompanhar os tutoriais? ou tenho que abrabndar um pouco o ritmo e explicar melhor os passos? Para iniciantes está mesmo sendo facil?
Aguardo mais opiniões.
Abraço.
Sim está sendo muito tranqüilo…. Somo programadores Java e está sendo (até agora) uma maravilha hehe
Eu como iniciante em AS estou achando blz o ritmo e as explicações.
Valeu e continue regularmente com os posts
estão ótimos!
Abraço!
Olá
gostei muito dos tuto de as3 porém estou tendo dificuldades de achar todos as partes deste tuto para que possa chegar ao fim.
Você poderia me encaminhar os links de todos?
Obrigado!
Boas Marcelo, os tutoriais (11 partes por enquanto)foram compilados num e-book:
veja:
http://msdevstudio.com/blog/2008/06/30/tutorial-action-script-3-parte-i-o-livro/
abraço.