Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nerisantos

Evento botão com variável

Recommended Posts

Pessoal,
estou fazendo um jogo de memória e gostaria de melhorar o código abaixo:
Ao clicar no botão é aberto e acessado um determinado frame do movieclip.
Gostaria de saber se tem como passar o valor (do frame) para a função através do botão (neste caso bastaria uma única função para abrir as informações sobre a fruta).
O jogo pode ser acessado em
abacate_bt_info.addEventListener(MouseEvent.CLICK, abacate_info);
maca_bt_info.addEventListener(MouseEvent.CLICK, maca_info);
uva_bt_info.addEventListener(MouseEvent.CLICK, uva_info);
mamao_bt_info.addEventListener(MouseEvent.CLICK, mamao_info);
manga_bt_info.addEventListener(MouseEvent.CLICK, manga_info);
pessego_bt_info.addEventListener(MouseEvent.CLICK, pessego_info);
caju_bt_info.addEventListener(MouseEvent.CLICK, caju_info);
jabuticaba_bt_info.addEventListener(MouseEvent.CLICK, jabuticaba_info);
banana_bt_info.addEventListener(MouseEvent.CLICK, banana_info);
acai_bt_info.addEventListener(MouseEvent.CLICK, acai_info);
function abacate_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(frame);
exibe_info();
}
function maca_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(3);
exibe_info();
}
function uva_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(4);
exibe_info();
}
function mamao_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(5);
exibe_info();
}
function manga_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(6);
exibe_info();
}
function pessego_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(7);
exibe_info();
}
function caju_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(8);
exibe_info();
}
function jabuticaba_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(9);
exibe_info();
}
function banana_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(10);
exibe_info();
}
function acai_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(11);
exibe_info();
}
function exibe_info()
{
setChildIndex(frutas_info, numChildren - 1);
frutas_info_bt_fechar.x=530;
frutas_info_bt_fechar.y=70;
frutas_info_bt_fechar.visible=true;
setChildIndex(frutas_info_bt_fechar, numChildren - 1);
}
frutas_info_bt_fechar.addEventListener(MouseEvent.CLICK, fechar_info);
function fechar_info(event:MouseEvent):void
{
frutas_info.gotoAndStop(1);
frutas_info_bt_fechar.visible=false;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se puder mandar o código todo, ou o fla do arquivo fica melhor, porém se quiser apenas saber como pega o frame atual de um determinado mc a sintaxe é mc.currentFrame, ai é só ver como encaixa melhor no seu contexto. Da pra dar um exugada boa nesse código adicionando os eventos no stage e comparando o label dos targets

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Vinicius,

obrigado por responder, não tenho o fonte agora (está em outro micro - depois posto) mas o que desejo é usar vários botões na tela e usar somente uma função passando o parâmetro a ela (no caso passando o número do frame que desejo exibir) - é possível?

 

stop();
botao1.addEventListener(MouseEvent.CLICK, vaiparaframex);// botão para exibir o frame 5
botao2.addEventListener(MouseEvent.CLICK, vaiparaframex);// botão para exibir o frame 10
botao3.addEventListener(MouseEvent.CLICK, vaiparaframex);//botão para exibir o frame 15
// tem como passar o valor pelo botão - algo assim...
//botao3.addEventListener(MouseEvent.CLICK, vaiparaframex[15]);
function vaiparaframex(event:MouseEvent[framex]):void
{
gotoAndPlay(framex);
//dependendo do botão iria para o frame desejado, algo gotoAndPlay(frameX);
//o valor do frameX seria passado pelo botão;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso não existe >> vaiparaframex[15]

 

Se entendi corretamente, uma forma simples de 'enxugar' o código:

 

Adicione seus botões em um Array, crie uma única função e dentro dela um switch.

 

Com o 'target' do botão clicado, referente a um dos índices do array irá acessar o 'case' referente a enviar para o frame 'x', 'y', 'z', etc.

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia

 

Não sei se ajuda, mas quando vou manipular a timeline para o código decidir se o movieclip vai pra frente nextFrame() ou para trás prevFrame(), eu uso uma condicional comparando this.currentFrame() que devolve o número do frame. Já se é pra comparar com o botão acionado eu uso evt.currentTarget.name que devolve o nome da instância que disparou o evento evt.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou colocar o evento no stage e pegar o target?

 

algo do tipo

stop();

//se tiver algo dentro do mc do botão usa mouseChildren pra nao ter problema 
stage.addEventListener(MouseEvent.CLICK, vaiparaframex);// botão para exibir o frame 5

 
function vaiparaframex(e:MouseEvent):void
{
   //faça um if para saber se é um botão mesmo o target, pode usar o exemplo a baixo mas //pegando as primeiras letras e vendo se é botao
   

//pega o nome do botão1 tira só o 1 e transforma em int
   avancaFrame(int(e.target.name.charAt(5)))
}
 
function avancaFrame(num:int):void
{
  mc.gotoAndPlay(num)
}
 
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado a todos que responderam e visualizaram o tópico.

 

Ainda estou elaborando o jogo, mas segue abaixo o link para visualização

 

 

O novo código elaborado após as ajudas segue abaixo:

 

abacate_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
maca_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
uva_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
mamao_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
manga_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
pessego_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
caju_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
jabuticaba_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
banana_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
acai_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
cupuacu_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
abacaxi_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
acerola_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
function define_frame_info(event:MouseEvent):void
{
switch((event.target.name))
{
case "abacate_bt_info":
frame_frutas_info=2;
case "maca_bt_info":
frame_frutas_info=3;
case "uva_bt_info":
frame_frutas_info=4;
case "mamao_bt_info":
frame_frutas_info=5;
case "manga_bt_info":
frame_frutas_info=6;
case "pessego_bt_info":
frame_frutas_info=7;
case "caju_bt_info":
frame_frutas_info=8;
case "jabuticaba_bt_info":
frame_frutas_info=9;
case "banana_bt_info":
frame_frutas_info=10;
case "acai_bt_info":
frame_frutas_info=11;
case "cupuacu_bt_info":
frame_frutas_info=12;
case "abacaxi_bt_info":
frame_frutas_info=13;
case "acerola_bt_info":
frame_frutas_info=14;
}
exibe_info();
}
Obrigadão!!!
PS: Sugestões são muito bem vindas para melhorar o jogo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue a sugestão de adicionar seus botões em um Array (e identificar o click pelo índice/target).

 

Todo 'case', exige um 'break', recomendável o 'default'. Legal conferir o Adobe Help AS3, nada de assassinar as 'boas práticas'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue a sugestão de adicionar seus botões em um Array (e identificar o click pelo índice/target).

 

Todo 'case', exige um 'break', recomendável o 'default'. Legal conferir o Adobe Help AS3, nada de assassinar as 'boas práticas'.

 

 

Valeu Elektra, ao fazer o teste percebi o erro e fiz as correções, obrigado pelas informações:

(ele não apresenta erro na compilação, porém não funciona - fica valendo a última opção)

 

O arquivo fonte (.fla) pode ser acessado no link abaixo (tem vários 'assassinatos', porém aos poucos o código vai sendo melhorado (ehehe):

 

Arquivo Fonte: memoria_frutas.fla

 

Jogar: memoria_frutas.swf

 

 

 

 

Segue abaixo o código com as correções:

 

 

var frame_frutas_info:Number=1;
abacate_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
maca_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
uva_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
mamao_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
manga_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
pessego_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
caju_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
jabuticaba_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
banana_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
acai_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
cupuacu_bt_info.addEventListener(MouseEvent.MOUSE_OVER, define_frame_info);
abacaxi_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
acerola_bt_info.addEventListener(MouseEvent.MOUSE_OVER,define_frame_info);
function define_frame_info(event:MouseEvent):void
{
switch((event.target.name))
{
case "abacate_bt_info":
frame_frutas_info=2;
break;
case "maca_bt_info":
frame_frutas_info=3;
break;
case "uva_bt_info":
frame_frutas_info=4;
break;
case "mamao_bt_info":
frame_frutas_info=5;
break;
case "manga_bt_info":
frame_frutas_info=6;
break;
case "pessego_bt_info":
frame_frutas_info=7;
break;
case "caju_bt_info":
frame_frutas_info=8;
break;
case "jabuticaba_bt_info":
frame_frutas_info=9;
break;
case "banana_bt_info":
frame_frutas_info=10;
break;
case "acai_bt_info":
frame_frutas_info=11;
break;
case "cupuacu_bt_info":
frame_frutas_info=12;
break;
case "abacaxi_bt_info":
frame_frutas_info=13;
break;
case "acerola_bt_info":
frame_frutas_info=14;
break;
}
exibe_info();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.