ActionScript/Eventos: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Franprarod (discussão | contribs)
Franprarod (discussão | contribs)
Sem resumo de edição
Linha 1:
Os modos antigos de se adicionar eventos aos objetos, como <codesource language='actionscript3' enclose='none'>on(Release)</codesource>, foram abandonados. O ActionScript 3 usa ''Event Listeners'' (''ouvintes'' de eventos). São gerenciadores de eventos, que podem ser de vários tipos, desde uso de mouse e teclado até carregamento de dados externos (para criação dos famosos ''preloaders'') e uso do objeto <codesource language='actionscript3' enclose='none'>Timer</codesource>.
 
A biblioteca usada nos eventos deste artigo são:
Linha 9:
 
=== Eventos de mouse ===
Para adicionar um evento clique do botão do mouse ao <codesource language='actionscript3' enclose='none'>Sprite</codesource> ''desenho'', basta fazer isto:
<source lang='actionscript3'>
 
Linha 22:
</source>
 
Foi criado o objeto ''desenho'', e através de <codesource language='actionscript3' enclose='none'>addEventListener</codesource> foi adicionado o evento de mouse <codesource language='actionscript3' enclose='none'>MouseEvent.CLICK</codesource> com a função <codesource language='actionscript3' enclose='none'>girarDesenho </codesource>como administradora de ações referentes a cliques. Em outras palavras, quando se clicar em ''desenho'' serão acrescentados mais 20 graus de rotação.
Esta função também poderia ser transcrita desta maneira:
<source lang='actionscript3'>
Linha 38:
</source>
 
Neste caso, a função ''girarDesenho'' irá trabalhar para ''desenho1'' e ''desenho2''. Eles sofrerão rotações específicas se um deles for clicado, ou alvo do evento (representado por <codesource language='actionscript3' enclose='none'>evt.target</codesource>). Quando ''desenho1'' for clicado, ele girará 20 graus, ''mas desenho2'' não, pois não é o alvo (''target'') do clique. Repare que ''evt'' não é uma palavra reservada (pode ser qualquer nome de variável válida), mas deve ser discriminada nos parâmetros por ser um ''listener''.
 
A função ''listener'' sempre retorna valor vazio (<codesource language='actionscript3' enclose='none'>void</codesource>).
 
Além de <codesource language='actionscript3' enclose='none'>MouseEvent.CLICK</codesource>, você também pode usar <codesource language='actionscript3' enclose='none'>MouseEvent.MOUSE_DOWN</codesource> (instante em que o botão é pressionado) e <codesource language='actionscript3' enclose='none'>MouseEvent.MOUSE_UP</codesource> (momento em que o botão deixa de ser pressionado). Há também <codesource language='actionscript3' enclose='none'>MouseEvent.MOUSE_OVER</codesource> (cursor sobre objeto), <codesource language='actionscript3' enclose='none'>MouseEvent.MOUSE_OUT</codesource> (objeto perde foco do mouse) e <codesource language='actionscript3' enclose='none'>MouseEvent.MOUSE_WHEEL</codesource> (a roda de rolagem do mouse), entre outros.
 
=== Eventos de teclado ===
Para reconhecer eventos de teclado, é necessário utilizar o objeto da classe <codesource language='actionscript3' enclose='none'>KeyboardEvent</codesource>. Você pode usar <codesource language='actionscript3' enclose='none'>KeyboardEvent.KEY_DOWN</codesource> (instante em que a tecla é pressionada) como <codesource language='actionscript3' enclose='none'>KeyboardEvent.KEY_UP</codesource> (tecla solta).
 
A função de evento tem que ter como parâmetro <codesource language='actionscript3' enclose='none'>evt:KeyboardEvent</codesource>.
<source lang='actionscript3'>
 
Linha 65:
 
=== Eventos de tempo (Timer) ===
Para utilizar tempo, é preciso criar um objeto <codesource language='actionscript3' enclose='none'>Timer</codesource> com dois parâmetros: 1 O intervalo que o Timer irá cobrir (em milissegundos) e 2) Quantas vezes será repetido (se posto 0, será infinito).
 
Podemos criar dois eventos, um para o evento do Timer (<codesource language='actionscript3' enclose='none'>TimerEvent.TIMER</codesource>) contando tempo e um para quando o trabalho dele se completar (<codesource language='actionscript3' enclose='none'>TimerEvent.TIMER_COMPLETE</codesource>).
 
O parâmetro da função deve ser um <codesource language='actionscript3' enclose='none'>evt:Event</codesource>. O objeto de Timer deve ser acionado com o método ''start()'' (<codesource language='actionscript3' enclose='none'>tempo.start()</codesource>). Para parar o relógio, acione o método ''tempo.stop()''.
 
<source lang='actionscript3'>
Linha 96:
 
=== Eventos de frame ===
Utilizando o <codesource language='actionscript3' enclose='none'>Event.ENTER_FRAME</codesource>, você pode adicionar um evento que será realizada a cada passagem de um novo frame. A frequência da ação será repetida de acordo com o FPS (frames por segundo) do documento.
 
O parâmetro da função deve ser um <codesource language='actionscript3' enclose='none'>evt:Event</codesource>.
 
<source lang='actionscript3'>
Linha 113:
 
== Removendo eventos ==
A remoção de eventos se dá pela função <codesource language='actionscript3' enclose='none'>removeEventListener()</codesource>. Remover um listener pode ser necessário quando não queremos que um objeto tenha um evento, ou então quando isso não é necessário mais o coletor de lixo os remove, a fim de melhorar o gerenciamento da mesma.
<source lang='actionscript3'>
 
Linha 126:
 
</source>
Da próxima vez que ''sp'' for clicado, ele não irá mais girar 20 graus, pois a linha <codesource language='actionscript3' enclose='none'>evt.target.removeEventListener(MouseEvent.CLICK, girarDesenho)</codesource> fez com que ele perdesse a possibilidade de receber eventos referentes ao clique do mouse.
 
== Usando listeners fracos, fase de captura e determinando a prioridade ==
 
*Para processar um evento antes que chegue ao seu alvo é necessário determinar o parâmetro <codesource language='actionscript3' enclose='none'>useCapture</codesource> para <codesource language='actionscript3' enclose='none'>true</codesource> (o padrão é falso), terceiro do método addEventListener().
*Supondo que um objeto recebe mais de um evento <codesource language='actionscript3' enclose='none'>MouseEvent.CLICK</codesource>, você pode determinar qual será executado primeiro com o penúltimo parâmetro <codesource language='actionscript3' enclose='none'>priority</codesource>. Se não determinado, nenhuma ordem será considerada. O prioritário deve receber o valor 1, o segundo 2 e assim por diante.
*Para usar referências fracas nos eventos e assim facilitar a remoção de eventos não mais utilizados basta colocar true no último parâmetro, o <codesource language='actionscript3' enclose='none'>useWeakReference</codesource>. O padrão é <codesource language='actionscript3' enclose='none'>false</codesource>, uma conexão de listener forte. Isso deixa o Flash ajudar um pouco o desenvolvedor, em caso de projetos complexos. A ideia é que, caso o listener e a sua referência não sejam mais utilizados, ele não atrapalha o trabalho do coletor de lixo do Flash, procurando trabalhar melhor com o gerenciamento de memória.
Esses parâmetros adicionais não precisam ser configurados quando evocamos um <codesource language='actionscript3' enclose='none'>removeEventListener()</codesource>;
<source lang='actionscript3'>
 
Linha 169:
 
== Disparando eventos ==
Toda vez que o palco (stage) for clicado, ele irá disparar, através da linha <codesource language='actionscript3' enclose='none'>dispatchEvent()</codesource>, um evento "meu novo evento". Esse evento foi adicionado ao palco, com o função listener ''dispara''.
 
<source lang='actionscript3'>
Linha 187:
 
== Diferenças: target e currentTarget ==
A diferença entre <codesource language='actionscript3' enclose='none'>currentTarget</codesource> e <codesource language='actionscript3' enclose='none'>target</codesource> é que o primeiro lida com o abrangente e o segundo é mais específico.
 
<source lang='actionscript3'>
Linha 219:
</source>
 
Se clicar em um dos quadrados, ele irá exibir seu nome e arrastará o quadrado que for clicado. Isso se dá porque <codesource language='actionscript3' enclose='none'>target</codesource> procura dentro de ''mc'' o alvo da ação. Agora alteraremos a função <codesource language='actionscript3' enclose='none'>exibeInfo</codesource>:
 
<source lang='actionscript3'>
Linha 228:
</source>
 
O método <codesource language='actionscript3' enclose='none'>currentTarget</codesource> especifica o alvo relativo ao contâiner de objetos. Se clicado, ele irá permitir o arrastamento do ''mc'' (os dois quadrados juntos) e exibe o nome dele (no caso, "Container mc").
[[Categoria:ActionScript]]