Ir para conteúdo

Arquivado

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

Evandro PH

[Flash + AS3] Array retornando vazio?

Recommended Posts

Bom dia,

 

Estou tentando fazer uma rotina usando nomes dinâmicos nos movie clips, pois tenho que criar 300 variações dele, e estou tentando usar um código mais dinâmico possível. Parei neste problema:

var qtmc:Number = 4;
var mcs:Array = [mc0];

for(var icor:int=1; icor < qtmc; icor++) {
	mcs[icor] = MovieClip(this["estampa.mc" + icor]);
	trace(mcs);
}

 

O mc0 é um movieclip de fundo, ele sempre será será o primeiro movieclip da minha array, por isso já criei a array com ele na posição inicial.

Então, fiz um FOR para colocar meus outros movieclips que tenho na animação dentro deste array, pra facilitar as referências futuras. A variável qtmc diz quantos MCs eu tenho na animação. Mas quando fiz este código, ao mandar um trace em mcs (ultima linha do código) ele está retornando a array só com o primeiro mc, como se eu não tivesse definido os outros na array.


[object MovieClip],
[object MovieClip],,
[object MovieClip],,,
[object MovieClip],,,,

 

 

Obs.: os mcs estão nomeados corretamente e no local certo, tanto que funciona se eu definir inicialmente preenchida a array MCS como:

var mcs:Array = [mc0, estampa.mc1, estampa.mc2, estampa.mc3, estampa.mc4];

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando fazer uma rotina usando nomes dinâmicos nos movie clips

 

Mude para isso:

mcs[icor] = String( "estampa.mc" + icor );

 

Abs,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mude para isso:

mcs[icor] = String( "estampa.mc" + icor );

 

Abs,

 

Não funciona, quando uso o comando:

 

 

mcs[ind].addEventListener(MouseEvent.CLICK, mudaClipe);

 

o flash informa que não é um termo definido ou uma função válida. E a array teria que retornar:

 

[object MovieClip],[object MovieClip],[object MovieClip],[object MovieClip],[object MovieClip]

 

e com o comando que você me passou ela retorna:

 

[object MovieClip],estampa.mc1,estampa.mc2,estampa.mc3,estampa.mc4

 

então o flash informa que não é possível converter um tipo string em movieclip quando uso o comando:

 

 

for (var ind:int = 0; ind < 5; ind++) {
  mcs[ind].addEventListener(MouseEvent.CLICK, mudaClipe);
}

 

 

Se quiser, posso postar o .FLA aqui pra tentarem ver como corrigir isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue um exemplo de como você deve fazer:

// Crie um MC no palco como o instance name de "estampa" e em seguida duplique ele 3 vezes. Atribua os seguintes nomes a cada um deles: "estampa1, estampa2 e estampa3"

var qtmc:Number = 4;
var mcs:Array = [estampa];

//agora faça conforme abaixo
for(var icor:int=1; icor < qtmc; icor++) {

    mcs[icor] = MovieClip( this["estampa" + icor] );
    trace(mcs);

}

Basta agora ajustar ao seu caso...

 

Abs,

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Segue um exemplo de como você deve fazer:

// Crie um MC no palco como o instance name de "estampa" e em seguida duplique ele 3 vezes. Atribua os seguintes nomes a cada um deles: "estampa1, estampa2 e estampa3"

var qtmc:Number = 4;
var mcs:Array = [estampa];

//agora faça conforme abaixo
for(var icor:int=1; icor < qtmc; icor++) {

    mcs[icor] = MovieClip( this["estampa" + icor] );
    trace(mcs);

}

Basta agora ajustar ao seu caso...

 

Abs,

 

Continua dando o mesmo erro... Vou postar o .fla pra vc dar uma olhada... Obs.: o arquivo cores.swf deve estar na mesma pasta para funcionar.

http://www.phinfo.com.br/main.rar

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro está no caminho que você está apontando para os objetos [ "mc" + icor ].

 

Troque isso:

mcs[icor] = MovieClip( this["estampa" + icor] );

Por isso:

mcs[icor] = estampa["mc" + icor];

 

Abs,

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro está no caminho que você está apontando para os objetos [ "mc" + icor ].

 

Troque isso:

mcs[icor] = MovieClip( this["estampa" + icor] );

Por isso:

mcs[icor] = estampa["mc" + icor];

 

Abs,

 

Roger, valeu mesmo! Estou quebrando a cabeça com este AS3, eu programo há muito tempo no flash, inclusive já fiz alguns joguinhos, mas nunca em AS3, sempre as2.

No as3 eu não tinha a mínima ideia de como me referenciar a um MC dentro de outro. To começando a entender e migrar até com certa facilidade, não sem ajuda... Obrigado pela ajuda!

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.