Tutorial Action Script 3 - 006

   

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.

ccommons

http://creativecommons.org/licenses/by-nc-nd/3.0/deed.pt

versão pdf temporariamente indisponivel.
Deixe um comentário ou um Trackback

6 Comentários

  1. Junho 8, 2008 às 11:29 am | Permalink

    mario podia fala tbm sobre xml
    :)

  2. Jullierme Barros
    Junho 8, 2008 às 12:14 pm | Permalink

    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!

  3. Junho 9, 2008 às 6:39 am | Permalink

    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.

  4. Jullierme Barros
    Junho 9, 2008 às 11:09 am | Permalink

    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!

  5. Marcelo Borges
    Agosto 25, 2008 às 12:09 pm | Permalink

    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!

  6. Agosto 25, 2008 às 2:24 pm | Permalink

    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.

Um Trackback

  1. [...] Em continuação com o tutorial ( 001 - 002 - 003 - 004 - 005 - 006) [...]

Deixe um comentário

O seu email nunca será publicado ou partilhado. Campos obrigatórios estão marcados com um *

*
*