chipset 0 Denunciar post Postado Janeiro 16, 2014 Seguinte, estou começando com AS3 e surgiu uma duvida para que eu possa otimizar um codigo:Tenho 9 Movie Clips na tela instanciados como "bq1" até "bq9". PS: É um jogo da velha.dai segue://açoesbq1.addEventListener(MouseEvent.CLICK, clicouJogou);bq2.addEventListener(MouseEvent.CLICK, clicouJogou);bq3.addEventListener(MouseEvent.CLICK, clicouJogou);bq4.addEventListener(MouseEvent.CLICK, clicouJogou);bq5.addEventListener(MouseEvent.CLICK, clicouJogou);bq6.addEventListener(MouseEvent.CLICK, clicouJogou);bq7.addEventListener(MouseEvent.CLICK, clicouJogou);bq8.addEventListener(MouseEvent.CLICK, clicouJogou);bq9.addEventListener(MouseEvent.CLICK, clicouJogou);//variavel do jogador da vez False = X True = Ovar jogador:Boolean=false;//variaveis da vitoria 0 = vazio, 1 = x, 2 = Ovar q1,q2,q3,q4,q5,q6,q7,q8,q9:int;//funcao do clique// apos o clique ele anima o MC com o jogador correspondende (Bola ou X) e remove o evento para que o MC não seja// mais clicavel ou "jogavel".function clicouJogou(e:MouseEvent):void {e.target.removeEventListener(MouseEvent.CLICK, clicouJogou);if (jogador==false) {e.target.gotoAndPlay(2);jogador=true;} else {e.target.gotoAndPlay(13);jogador=false;}}A questão é. a variavel q1 tem que receber o valor 1 para X ou 2 para bola, Como eu posso passar ele valor para cada variavel sem crescer tanto no codigo. Minha idéia segue abaixo:// atribuo valor 0 as variaveisq1 = 0;q2 = 0;q3 = 0;q4 = 0;q5 = 0;q6 = 0;q7 = 0;q8 = 0;q9 = 0;//defino uma bagaça pra cada mc:bq1.quad = q1;bq2.quad = q2;bq3.quad = q3;bq4.quad = q4;bq5.quad = q5;bq6.quad = q6;bq7.quad = q7;bq8.quad = q8;bq9.quad = q9;// agora eu precisaria fazer dentro da minha função lá em cima uma especie de (e.target.quad recebe valor) - seria facil, mas não funciona // dessa forma né! Alguém pode me dar uma luz? Compartilhar este post Link para o post Compartilhar em outros sites
DesenvolvedorRoger 50 Denunciar post Postado Janeiro 16, 2014 Seu código funciona sim! Contudo, deixo um exemplo mais preciso: bq1.addEventListener(MouseEvent.CLICK, clicouJogou);var q1:int = 5;bq1.quad = q1;function clicouJogou( e:Event ){ trace(e.currentTarget.quad);} []'s Compartilhar este post Link para o post Compartilhar em outros sites
chipset 0 Denunciar post Postado Janeiro 26, 2014 Oi DesenvolvedorRoger, boa noite. Eu intendi seu exemplo. Dessa maneira funciona mesmo, mas eu teria que fazer uma função para cada botão. Porque eu quero atribuir o valor para a variavel qX dentro da função, sendo que X seria o target, exemplo. de bq1 é clicado, a função saiba que se é bq1 atribui valor a q1. Se bq2, a função atribui o valor a variavel q2. Não sei se é possivel isso que estou falando, mas desconfio que sim por todas as funcionalidades que essa linguagem possui. Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Janeiro 26, 2014 Se compreendi corretamente, irá criar uma única função e dentro dela criar uma condicional, por exemplo, com 'switch'. 'caso' o target corresponda ao bt1 >> faça x, 'caso' o target corresponda ao bt2 >> faça y, e assim por diante. Pode também usar vários 'if's. Compartilhar este post Link para o post Compartilhar em outros sites
DesenvolvedorRoger 50 Denunciar post Postado Janeiro 26, 2014 Se as suas variáveis forem limitadas, a Elektra deu uma boa dica... Caso não, crie um índice para vincular às suas variáveis qX: bq1.indice = 1; E aqui você atribui o valor dinamicamente: function clicouJogou( e:Event ){ root[ "q"+e.currentTarget.indice ] = 3; trace( root[ "q"+e.currentTarget.indice ] ); } Compartilhar este post Link para o post Compartilhar em outros sites
chipset 0 Denunciar post Postado Janeiro 28, 2014 Boa DesenvolvedorRoger. Com a dica da Elektra já estava ok, mas o que eu queria era encurtar o codigo mesmo, e mesmo minhas variaveis sendo finitas (eram só nove), sua dica resolveu meu problema. Obrigado a todos! Compartilhar este post Link para o post Compartilhar em outros sites