fernando1 0 Denunciar post Postado Maio 25, 2009 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
italoborges 0 Denunciar post Postado Maio 25, 2009 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
fernando1 0 Denunciar post Postado Maio 25, 2009 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
italoborges 0 Denunciar post Postado Maio 25, 2009 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
fernando1 0 Denunciar post Postado Maio 25, 2009 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
italoborges 0 Denunciar post Postado Maio 25, 2009 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
fernando1 0 Denunciar post Postado Maio 26, 2009 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
fernando1 0 Denunciar post Postado Maio 26, 2009 [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