• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

stinkle

carregar texto de ficheiros txt para o flash

23 mensagens neste tópico

Ants de mais keria desejar ao portugal a programar uma boa continuação y contem com o meu apoio.

Bem.. o meu problema eh est:

        Eu keria inserir o texto de um ficheiro .txt numa caixa de texto do flash.

      Já tentei usar a função loadVariablesNum() mx n funcionava pk a caixa de texto estava dentro de um MC

      Já tentei usar a funçao LoadVars e a LoadVariables e ate ja consegui alguns resultados.. só n consegui saber kal eh a propriedade que me devolve o texto.

Aqui vai o código:

var main_lv:LoadVars = new LoadVars();
main_lv.onLoad = function(success:Boolean) {
  
    if (success) {
    _root.main_mc.maintext_txt.text  = O que é que eu ponho aqui?
    } else {
    _root.main_mc.maintext_txt.text = "Impossível receber texto!"
    }
};
main_lv.load("consorcio.txt");

agradecia imenso se alguem me dissesse o que ehk eu ponho ali nakel sitio.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para a próxima usa a ferramenta GeSHi existente no fórum que te permite ter o código colorido e tenta corrigir os erros de português. :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

aqui encontras pdf´s que te ajudam nesse problema...http://www.flashwebtraining.com/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se no txt tiveres por exemplo variavel=Olá Mundo, o código fica:

var main_lv:LoadVars = new LoadVars();
main_lv.onLoad = function(success:Boolean) {
  
    if (success) {
    _root.main_mc.maintext_txt.text  = this.variavel;
    } else {
    _root.main_mc.maintext_txt.text = "Impossível receber texto!"
    }
};
main_lv.load("consorcio.txt");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para não estar a abrir outro tópico igual exponho aqui o meu problema:

====puzzles.txt====

puzzle=123456

==============

loadVariablesNum("puzzles.txt", 0);
trace(_root.puzzle);

O problema é que quando meto numa textBox a var=puzzle, aparece "123456" dentro da caixa de texto, tudo bem, mas quando faço o trace ao à variavel puzzle, o resultado é undefined.

Como posso chamar o valor da variavel puzzle sem ser pela var da textBox?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi.

Existem ai umas coisas a evitar.

1.Para carregar as variáveis é melhor utilizar o LoadVars.

2.Nunca utilizes o campo var no properties panel, isso foi ficando de antigas versões do flash. Dá uma instance name à caixa de texto, depois atribuis o texto por instance_name.text = variável.

Exemplo:

//A caixa de texto tem como instance name: "myTxt"
//As variáveis são carregadas para o objecto LoadVars.
//Esta classe tem o método onLoad, que te permite executar código quando temos a certeza que o carregamento já foi efectuado.

var result:LoadVars = new LoadVars();
result.onLoad = function(success:Boolean) {
        if (success) {
            trace("carregado com sucesso");
            trace(this.puzzle);
            myTxt.text = this.puzzle;
        } else {
            trace("erro ao carregar");
        }
};

result.load("puzzles.txt");

Espero que dê para perceber.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim yarcub mas suponhamos que eu quero gravar o texto numa variável e não numa caixa de texto.

Quando faço:

var result:LoadVars = new LoadVars();
result.onLoad = function(success:Boolean) {
        if (success) {
            trace("carregado com sucesso");
           _root.variavel = this.puzzle;
        } else {
            trace("erro ao carregar");
        }
};
result.load("puzzles.txt");
trace(variavel);

Dá undefined em vez do texto. Sabes como resolver isto?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens de declarar/inicializar sempre as variáveis e elas só "vivem" (scope variable) onde as declaras.

No teu caso:

var variavel:String;
var result:LoadVars = new LoadVars();
result.onLoad = function(success:Boolean) {
        if (success) {
            trace("carregado com sucesso");
           variavel = this.puzzle;
        } else {
            trace("erro ao carregar");
        }
};
result.load("puzzles.txt");
trace(variavel); 

Nota(Para este caso): Dentro da função onLoad se precederes o nome da variável com this estás a aceder a uma variável dentro do scope do objecto result, se apenas escreveres o nome variável estás a aceder a uma variável do _root (isto se este código estiver na timeline principal).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja tinha tentado dessa maneira também... E o problema continua o mesmo  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esqueci-me de um detalhe muito importante.  :-[

O AS tem propriedades assíncronas (como callback functions, events), esse trace é corrido imediatamente a "mandar" carregar as variáveis do txt e não dá tempo que os dados sejam carregados. Por isso é que existem callback functions e event handlers.

Podes resolver isso, chamando uma função de dentro da função onLoad (ai temos a certeza que o valor foi atribuido).

Exemplo:

var variavel:String;
var result:LoadVars = new LoadVars();
result.onLoad = function(success:Boolean) {
        if (success) {
            trace("carregado com sucesso");
           variavel = this.puzzle;
           outputVar();
        } else {
            trace("erro ao carregar");
        }
};
result.load("puzzles.txt");

function outputVar():Void{
    trace(variavel);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O AS tem propriedades assíncronas (como callback functions, events)...

O ActionScript só é assíncrone no que diz respeito a acesso a dados (acessos por httpservice, webservices, remoting, etc) e não as ditas "callback functions" e os eventos.

Estes são síncrones.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:down: Bem  nem com a última sugestão do yarcub consegui.

Agora estou a tentar fazer de outra maneira que devia resultar logo mas não funciona não sei porquê:

var variavel:String;
txtPuzzle.text="Se vir isto nao funcionou";
var result:LoadVars = new LoadVars();
result.onLoad = function(success:Boolean) {
if (success) {
	trace("carregado com sucesso");
	_root.txtPuzzle.text= this.puzzle;
} else {
	trace("erro ao carregar");
}
};
result.load("medios.txt");
variavel = _root.txtPuzzle.text;
trace (variavel);

Na caixa de texto aparece tudo bem, carrega o ficheiro de texto, mas o trace da variável dá o valor que tinha antigamente: "Se vir isto nao funcionou" (O que é estranho visto que o no texto já aparece o que quero):wallbash: Talvez tenha de fazer qualquer coisa para fazer esperar um bocado até abrir texto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@bogos: Obrigado pela correcção mas já agora dá uma ajuda aí ao problema do emanuelvital.

@emanuelvital: Tenho quase a certeza que o último que postei funciona. Posta aí os ficheiros (fla+txt) do que estás a fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:down: Bem  nem com a última sugestão do yarcub consegui.

var variavel:String;
txtPuzzle.text="Se vir isto nao funcionou";
var result:LoadVars = new LoadVars();
result.onLoad = function(success:Boolean) {
if (success) {
	trace("carregado com sucesso");
	_root.txtPuzzle.text= this.puzzle;
} else {
	trace("erro ao carregar");
}
};
result.load("medios.txt");
variavel = _root.txtPuzzle.text;
trace (variavel);

Continua aparecer o valor antigo visto ele executar esse pedaço de código antes de chamar o onLoad.

Executando esse código va executar nesta ordem:

1º ciclo de execução:

result.load("medios.txt");
variavel = _root.txtPuzzle.text;
trace (variavel);

2º ciclo de execução:

onLoad:
if (success) {
trace("carregado com sucesso");
_root.txtPuzzle.text= this.puzzle;
} else {
trace("erro ao carregar");
}

visto ser uma chamada assíncrona, o load só será executado no próximo ciclo de execução no flash player e x ciclos depois terá uma resposta (result/fault). Visto ser muito rápido a execução, parece que funcionou como previsto mas na realidade está a proceder conforme acabei de explicar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E sabes alguma maneira de contornar isso?

Isto não se contorna, o modo de implementar é que tem de ser revisto. Se a variável ainda não foi actualizada ela o será portanto esse trace terá de ser posto algures onde só deverá ser alimentado após boa/má recepção dos dados.

Se no teu exemplo meteres esse trace no final da tua função onload, verás que ele terá o valor correcto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

talves fazer com que o codigo só continue 1 segundo depois da funçao terminar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Abri o teu fla, e afinal o que te tinha dito funciona. A maneira como estás a insistir é que não dá mesmo para ir por ai.

Não consigo perceber porque que é que aquele código não serve ao que queres.

var variavel:String;
var result:LoadVars = new LoadVars();
result.onLoad = function(success:Boolean) {
        if (success) {
            trace("carregado com sucesso");
           variavel = this.puzzle;
           outputVar();
        } else {
            trace("erro ao carregar");
        }
};
result.load("medios.txt");

function outputVar():Void{
    trace("Este funciona:"+variavel);
} 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque eu preciso de usar o texto mais tarde, e preciso de o ter armazenado numa variável que vai ser utilizada varias vezes. O trace do texto basicamente nao me serve de nada lol. Amanhã é o fim do prazo esticado de entrega e tou a nora  :rant_01: Hoje parece que não vou dormir. :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que não entendeste o que te quis dizer.

Todo o código que queiras executar a seguir ao result.load("medios.txt") colocas dentro da função que chamas depois do carregamento. Assim asseguras que tens o valores que precisas.

Ali tenho o trace, mas podes fazer o que quiseres.

Se escrever assim, parece-te mais familiar?

var variavel:String;
var result:LoadVars = new LoadVars();
result.onLoad = function(success:Boolean) {
        if (success) {
            trace("carregado com sucesso");
           variavel = this.puzzle;
           continuarExecucao();
        } else {
            trace("erro ao carregar");
        }
};
result.load("medios.txt");

function continuarExecucao():Void{
    //Continuar com o código que querias a seguir ao result.load("medios.txt");
    //esta função pode chamar outras funções e por ai fora.
    //Aqui passou a ser o teu bloco de execução principal.
}

Está + claro assim?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah obrigado yarcub!

Consegui acabar hoje a tempo :cheesygrin:, fiz foi de uma maneira mesmo parva, em vez de ficheiros de texto pus um array com a informação toda  :shocking:.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora