Jump to content


Photo

Da Pra Mostra A Variavel De Um Mc Num Frame?


  • Faça o login para participar
4 replies to this topic

#1 Newbay

Newbay

    Normal

  • Usuários
  • 106 posts
  • Sexo:Não informado

Posted 06/07/2005, 22:47

Se eu ponho um mc no primeiro quadro, ai dentro dele ponho duas variaveis
var1 = 5
var2 = 10;

eu posso no quadro 2 por pra exibir elas com trace?
num ta saindo aki, ja tentei por trace(_root.mc.var1) / trace(mc.var1)
num vai, mostra indefined, tem outro jeito?

brigado

#2 TheRutz

TheRutz

    12 Horas

  • Usuários
  • 145 posts
  • Sexo:Não informado
  • Localidade:Sapucaia do Sul - RS
  • Interesses:Flash | Actionscript | Web Design | PHP

Posted 07/07/2005, 08:46

Estas variáveis só existem nos frames onde está o mc.

#3 Sheepman

Sheepman

    Veterano

  • Usuários
  • 1497 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre - RS

Posted 07/07/2005, 11:12

Depende da forma que você declara a variável...
var x:Number = 10;
Desta forma, a variável só estará acessível dentro do escopo onde foi criada.

x = 10;
Desta forma, a variável estára disponível dentro da Timeline onde foi criada, portanto pode ser acessada de qualquer escopo daquela Timeline.

_global.x = 10;
E desta forma ela pode ser acessada de qualquer Timeline.

Essas são as três formas. Faça um teste, coloque no seu primeiro frame:
var num1:Number = 5;
var num2:Number = 10;

E no segundo:
stop();
trace(num1 / num2);

Qualquer dúvida poste novamente.

Abraço
Mozart Petter - http://www.mozartpetter.com/
Não sabe o que é herança? clique aqui e descubra.

#4 Newbay

Newbay

    Normal

  • Usuários
  • 106 posts
  • Sexo:Não informado

Posted 07/07/2005, 21:43

brigado, pondo no fram deu;
Se eu por no frame 1 as variaveis, e por trace no 2 mostra normalmente
se eu fizer assim
por um MC no 1 frame, e apertar f9, vai entrar nas acoes dele;
ai eu ponho teste como nome para essa instancia
onClipEvent(enterFrame){
x=10;
}

no 2 frame eu por
trace(x) , ou trace(teste.x) , ou trace(_root.teste.x)

ai num mostra, mostra indefined :(((

#5 Sheepman

Sheepman

    Veterano

  • Usuários
  • 1497 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre - RS

Posted 07/07/2005, 23:30

Procure sempre declarar as ações em Frames específicos para elas, e não nos objetos, isso evita este tipo de falha.
Está meio confuso para mim o que você está tentando, então vou tentar explicar de uma forma clara e ampla.
O exemplo dos frames você fez e deu certo ok? Ótimo. Mas, se quisermos declarar uma variável dentro de um MovieClip e acessá-la a partir do _root?
Se partirmos do princípio que o MovieClip tem uma timeline independente do filme, teremos 2 timelines correto?
Como vimos em meu post anterior, para acessarmos uma variável de qualquer Timeline, declaramos ela como Global:
_global.nome = "Mozart";
Digamos que a variável nome se encontra dentro de um MovieClip, e você deseja acessá-la a partir do _root. Uma vez que ela foi declarada como Global, ela é acessível de qualquer Timeline, então bastaria:
trace(nome);
Isso vale também, no caso de filmes carregados externamente.

Outro exemplo. Digamos que você tenha uma função:
function mostraNome():Void{
   var nome:String = "Mozart";
}
O valor declarado dentro da função só pode ser usado no escopo dela, se tentarmos acessar ele de fora da função, não conseguiremos:
function meuNome():Void{
	var nome:String = "Mozart";
	trace(nome); // Retorna Mozart
}
meuNome(); // Retorna undefined
trace(nome);
Então, como poderíamos criar uma variável acessível de qualquer escopo nesta timeline?

Frame 1:
stop();
function meuNome():Void{
	nome = "Mozart";
	trace(nome); // Retorna Mozart
	gotoAndStop(2);
}
meuNome();
trace(nome); // Retorna Mozart

Frame 2:
trace(nome); // Retorna Mozart

Desta forma, o valor pode ser acessado de qualquer lugar da Timeline, dentro de outra função talvez?
function meuNome():Void{
	nome = "Mozart";
	trace(nome); // Retorna Mozart
}

function meuNome2():Void{
	trace(nome); // Retorna Mozart
}

meuNome();
meuNome(2);

Isso tudo tem um custo, uma variável Local persistirá na RAM somente enquanto estiver sendo usada, uma variável de Timeline persistirá até que o objeto a qual ela pertence seja removido (delete obj), e uma variável Global, persistirá até que o filme seja finalizado. Por isso, deve-se tomar cuidado ao usar variáveis de Timeline e Globais para não sobrecarregar a RAM, o que é raro mas acontece. :)
Se desejarmos acessar a variável nome de dentro de um MovieClip?
Crie então um MovieClip vazio (Ctrl + F8), e em seu primeiro frame coloque:
trace(nome);
Depois, volte para o _root, abra a biblioteca (Ctrl + L) e arraste o MC para o palco.
A janela de saída exibirá undefined, porque a variável nome só acessível na Timeline _root. Para resolver, teríamos que declara a variável como _global no _root:
function meuNome():Void{
	_global.nome = "Mozart";
	trace(nome);
}

meuNome();

Agora sim, ela exibirá o valor Mozart duas vezes na janela de saída.

No seu caso, você declarou a variável diretamente no objeto, e isso impossibilita o Flash de acessar a variável, mesmo ela sendo Global. :)

Espero que tenha ficado claro. Procure sempre dar nomes de instâncias a seus objetos, e a criar o código em frames (vazios) específicos para isso. :)

Abraço

Edição feita por: Sheepman, 07/07/2005, 23:55.

Mozart Petter - http://www.mozartpetter.com/
Não sabe o que é herança? clique aqui e descubra.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq