Ir para conteúdo

Arquivado

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

chipset

Usando o target para atribuir valor a variavel.

Recommended Posts

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çoes
bq1.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 = O
var jogador:Boolean=false;

//variaveis da vitoria 0 = vazio, 1 = x, 2 = O
var 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 variaveis
q1 = 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

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

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

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

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

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

×

Informação importante

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