Oct
05.
Uma das primeiras diferenças que as pessoas que estão começando a desenvolver em AS3 irão notar é a forma como invocar ações de botões e movieClips. Os eventos de “onPress” e outros não existem mais. Agora tudo é feito utilizando listeners.

Neste post vou dar uma dica importante: como passar parâmetros dentro de um listener em AS3. Veja o código abaixo:

Observe o mesmo listener só que agora passando dois parâmetros à função “imprime”.
Claro que este exemplo não é o melhor para a aplicação de passagem de parâmetros através de listeners. É mais um exemplo didático mesmo.
Baixe aqui o código-fonte.
Tags: AS3, Listeners, Parâmetros
Oi Flávio, muito bom o teu post mas fiquei com uma dúvida. Se dentro da função eu precisar dos parâmetros que estão na variável “e:MouseEvent”… como eu faço para obtê-los?
Mais uma vez parabéns.
Olá André, primeiramente obrigado pelos elogios.
Se você quiser utilizar as propriedades da variável “e” do evento do mouse, basta passar a mesma como parâmetro da seguinte forma:
imprime_btn.addEventListener(MouseEvent.MOUSE_DOWN,function(e:MouseEvent){imprime(e,“Flávio Mikami”,27)});
function imprime(e:MouseEvent,_nome:String,_idade:uint):void{
trace(e.target.label);
trace(“Nome: “+_nome+” | idade: “+_idade);
}
Espero que tenha ajudado.
Abraços.
Bom, alguma coisa que eu não consegui identificar deve estar errada no meu código, eu realmente não consegui dessa forma mas acabei conseguindo desta:
bot1.bot1.addEventListener(MouseEvent.CLICK, function(me:MouseEvent){carrega(“primeiro.swf”, me.target.name)});
e depois:
function carrega(teste:String, me):void
Bom, mas como o que importa é atingir o resultado desejado tá valendo. E mais uma vez obrigado, fiz um curso aqui em Porto Alegre em uma das melhores (se não a melhor) escolas da região e simplesmente não vi nada sobre passar parâmetros para uma função muito menos por um Listener. Graças ao teu tópico reduzi um código de umas 215 linhas para 35 linhas. hehe
Mais uma vez parabéns.
Oi André, se quiser te mando o código, sem problemas.
Mas é isso mesmo que você fez.
Basta passar a variável de MouseEvent na função do EventListener como parâmetro e depois na função externa inserir a mesma como parâmetro a ser recebido.
Abs!
Salvou cara. Estou migrando do AS2 pro AS3 e tava apanhando pra fazer um simples mouse over!
Valeu!
Oi Flávio.
tentei passar parametro pra função dentro de um loop, passando dessa forma:
rodovia270[i].marcador.addEventListener(MouseEvent.MOUSE_OVER,function(e:MouseEvent){mostra270(i)});
Meu loop vai de zero a dois e dando um trace dentro da função ele mostra o numero trêz.
minha função:
function mostra270(k:int):void{
trace(“Mostra: “+k);
rodovia270[k].tooltipe.visible = true;
}
existe alguma regra pra isso?
Olá Eduardo,
Realmente isso acontece no Flash, ele não guarda o Ãndice passado dentro de funções no loop.
Como estou na correria e para te ajudar de imediato, vou te passar um jeito fácil de resolver isso, não sei se é a melhor.
for(var i:int=0; i < 3; i++){
this["teste"+i+"_btn"].addEventListener(MouseEvent.ROLL_OVER, function(e:MouseEvent){mostra(e.target.name)});
}
function mostra(nome:String):void{
trace(nome.charAt(5));
}
Ao invés de passar o Ãndice dentro da função do Listener, passe o nome de instância do objeto.
No meu caso, criei os seguintes nomes de instância: "teste0_btn", "teste1_btn" e "teste2_btn".
Com isso, na função mostra eu trato e consigo pegar exatamente o Ãndice desejado.
Se precisar usar como número, basta converter: Number(nome.charAt(5))
Vou te mandar o FLA por e-mail.
Espero que tenha ajudado.
Abraços.
Flávio, consegui de uma outra forma, coloquei o addeventlistener dentro de uma função bombada(onde encontrei achei com esse nome). ficou assim:
(function(i){
rodovia[i].marcador.addEventListener(MouseEvent.MOUSE_OVER,function(e:MouseEvent){mostra(i)});
rodovia[i].marcador.addEventListener(MouseEvent.MOUSE_OUT,function(e:MouseEvent){oculta(i)});
})(i);
coloquei isso dentro do loop e funciona perfeitamente.
Fica a dica.
abraços.