Ir para conteúdo

Arquivado

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

fernando1

[Resolvido]Escopo de Variável no Action Script

Recommended Posts

Bom Dia Pessoal! http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

Minha dúvida é quanto ao escopo de variável em uma função no Action Script 2.0

 

Seguinte..

 

 

Meu problema é parecido com o exemplo abaixo:

 

Vamos pensar no caso da variável " x_inicial "

 

 

var x_inicial = 0;

 

function carregavar(){

 

for (var i:Number = 1; i <= 5; i++) {

var x_inicial += 142

}

 

}

 

trace(x_inicial);

 

 

O que esta acontecendo, é o seguinte, tipo, se eu mandar exibir o valor da variável " x_inicial "

dentro da função depois de passar no FOR, sai o valor certinho, agora quando chamo ela,

fora da função ali embaixo no trace, ela me retorna 0

 

Aguem sabe como posso trazer o valor dessa variável para fora da função, depois de

ser alterado dentro dela....?????? :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você declarar var x_inicial fora da função, você só terá acesso a esta variável, fora da função.

Se você declarar novamente var x_inicial dentro da função, essa variável só terá acesso dentro da função, não fora dela.

 

Tira o var que tem dentro da função, quando você usa o var, você passar a declarar novamente a variável.

 

var x_inicial:Number = 0;
function carregavar () {
   for (var i:Number = 1; i <= 5; i++) {
	  x_inicial += 142
   }
}
trace(x_inicial);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema continua...

 

Bom Dia Italo!

 

Escrevi errado o var dentro da função, este var não existe..

 

Entretanto mesmo se este var, o valor retornado no trace fora da função, continua com 0

 

Obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, mas você precisa chamar a função antes de dar o trace:

 

var x_inicial:Number = 0;
function carregavar () {
   for (var i:Number = 1; i <= 5; i++) {
	  x_inicial += 142
   }
}
carregavar();
trace(x_inicial);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema continua....

 

Então Italo, tinha me esquecido deste detalhe, montei este código para exugar um pouco o que preciso..

 

Verifiquei agora que da forma como você passou funciona corretamente!

 

Descobri o que esta ocorrendo...

 

No caso, estou chamando um arquivo php que me retorna variáveis, estas variáveis são manipuladas

quando dou um retorno.onLoad, dai chamo a função " carregaDados " e altero la dentro,

como um trecho do código abaixo :

 

x_inicial = 0;

 

// Objeto LoadVars.

var retorno:LoadVars = new LoadVars();

// Carrega o arquivo PHP 'lista_portfolio.php'.

retorno.load('http://servidor/casadavila/lib/flash_php/fotos_hospede_interna.php?id_cidade=6〈=br');

// Ao arquivo ser carregado, a função 'carregarDados' é chamada.

retorno.onLoad = carregarDados;

 

 

function carregarDados() {

 

// tem um trecho de código aqui executado antes para gerar movieclip etc.., mais não influencia no problema que esta ocorrendo..

 

 

for (var i:Number = 1; i <= 5; i++) {

x_inicial += 142;

}

 

}

 

trace (x_inicial);

 

 

Então o problema que chamando a função desta forma, não consigo retornar o valor da variável " x_inicial " de dentro da função ... :unsure:

Por isso perguntei de escopo ;)

 

Existe alguma forma de recuperar o valor de x_inicial .... ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas ai não se trata de escopo e sim de estruturação do seu código.

 

Imagine o seguinte, o compilador lê linha por linha, ele faz o comando, e parte para a próxima linha.

No seu caso, tem o loadvars que vai até o php e volta com o valor, mas isso o Flash não espera, ele já parte para a próxima linha.

Então, assim que ele enviar para o php, ele já vai para a próxima linha, que será o onLoad, mas ele não será executado pois ainda não voltou a resposta, e então ele vai para a próxima linha que é o trace de x_inicial.

E depois disso, quando o php der a resposta que ele cai no onLoad e modifica o valor de x_inicial.

 

Por que você precisa usar o x_inicial ali ?

O certo ao meu ver, seria chamar alguma função, após rodar o for que está dentro do onLoad.

 

abrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso do x_inicial, pq tenho que fazer uma esteira de fotos, com imagens vindas do banco de dados!

 

Esta esteira tem uma máscara, com um espaço definido, onde ao passar o mouse, as fotos

rolam de um lado para o outro..

 

Sem este valor, não sei exatamente quantos movieclips (lembrando os movieclips são variados e foram criados via action script)

foram inseridos dentro da máscara e então não tenho o tamanho total dos itens da esteira, fazendo com que a estera corra

infinitamente para um dos lados sem parar no ultimo elemento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

[Resolvido]

 

Italo,

 

Chamando uma outra função como você tinha dito consegui resolver o problema...

 

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.