Carregando variáveis com AS3

Fevereiro 20, 2008 · 18 comentários

Autor: Rodrigo Gonçalves

Package: flash.net
Classe: public class URLLoader
Versão AS: ActionScript 3.0
Player: Flash Player 9

Dificuldade: conhecimentos básicos de funcionamento do Flash, Actionscript 3.0 e lógica de programação.

Fala Galera, tranquilo?!

Vamos ver como carregar variáveis com AS3.
Mas antes é interessante sabermos como o Flash trabalha leitura de dados no AS3. Caso você já tenha conhecimentos sobre variáveis, sinta-se a vontade para pular a introdução.


Introdução

Quando o Flash carrega dados de uma URL, o Flash Player pode interpretar de três formas, sendo elas:

- Texto: como exemplo HTML e XML;
- Binário;
- Variáveis: conhecido também como URL-encoded variables.

Veremos sobre variáveis, e precisamos seguir algumas regras mais importantes para criação de variáveis:

* Cada nome de variável tem que ser associada com um valor sempre usando o sinal de igual (=) sem espaços entre eles.
Não podemos confundir com sinal de equivalência (==), que serve para comparação entre dois valores, e não para associação de um valor para variável;
Ficando algo do tipo: minhaVariavel=meuValor. Quer dizer que minhaVariavel recebe(=) meuValor como conteúdo.

* Os valores das variáveis são tratadas como tipo Strings no Flash. Sendo assim, não precisamos inserir aspas duplas " " ou aspas simples ‘ ‘ em seus valores;

* Se existir mais de um par de variáveis/valores que queira acrescentar no arquivo, devemos separar utilizando o sinal (&). Exemplo:
variavel1=valor1&variavel2=valor2&variavel3=valor3

* Para representar os espaços quando digitamos a tecla "espaço". Para uma melhor compatibilidade de leitura, podemos também utilizar o sinal de adição (+). Exemplo:
variavel=Aqui+carregamos+valores
Isto quando o Flash lê esta variavel reconhece o sinais(+) inseridos no valor como se tivesse digitado o "espaço" no teclado, mostrando da seguinte maneira:
Aqui carregamos valores.

Podemos também utilizar o espaço normal. Exemplo
variavel=Aqui carregamos valores

Ou ainda caracteres como (%20) que representa o "espaço". Exemplo:
variavel=Aqui%20carregamos%20valores

Com isso já sabemos o principal e essencial que o Flash precisa para podermos formatar os dados carregados e fazer com que o Flash faça a leitura corretamente.

Na versão AS3, não utilizamos mais a classe LoadVars para carregar ou enviar dados como faziamos na versão anterior do Actionscript. Passamos agora, a utilizar a classe URLLoader().
Esta classe também pode trabalhar em "conjunto" com algumas outras classes, como Ex.:
URLRequest(), URLVariables(), URLStream, Loader(), entre algumas outras classes.

- URLLoader(),
é responsável por "recuperar" dados/informações externas no Flash;
- URLRequest(), é responsável por armazenar endereços externos;
- URLVariables(), é utilizado para criarmos variáveis dentro do Flash para comunicar com um scripts (ex: PHP, ASP) quando queremos fazer formulários de envio de e-mail ou buscas;
- URLStream(), é utilizado para fluxo de dados. Mas é aconselhável utilizar esta classe somente em casos que o arquivo é "muito grande" e a URLLoader() não é suficiente. Por exemplo, podemos dizer que esta classe URLStream() verifica os dados que já foram carregados e mostra no filme conforme esteja disponível ou para verificar o progresso de download do arquivo.
- Loader(), é responsável por carregar arquivos externos, como imagens(.jpg, .gif, .png, filmes SWF´s).


Carregando variáveis com AS3:


Primeiro precisamo criar nosso arquivo Txt contento como formato variável=valor. Abra um "bloco de notas" ou seu editor de códigos e salve como "arquivo.txt".
Dentro deste arquivo, digite 3 variáveis seguidos do seus respectivos valores:

Obs.: Você pode criar suas próprias variáveis e valores que desejar. Neste exemplo criamos:

site=Alvo+Web&categoria=Actionscript+3.0&comentario=carregar+variáveis+no+AS3


Imagem 1: Criando nosso arquivo Txt.

Tendo nosso arquivo .Txt criado, vamos ao Actionscript.

Precisamos inicialmente utilizar duas classes, sendo elas:
- URLRequest() é responsável por armazenar endereços externos. No nosso caso será um "arquivo.txt";
- URLLoader() é responsável por "recuperar" dados/informações externas.

Crie um novo documento .Fla na versão Actionscript 3.0.
Na primeira camada, selecionando o primeiro frame abra o painel de Window>Actions (atalho F9).

Digite:

1
2
3
4
5
var url:URLRequest = new URLRequest( "arquivo.txt" );
var infoTxt:URLLoader = new URLLoader();
infoTxt.dataFormat = URLLoaderDataFormat.VARIABLES;
infoTxt.load(url);
infoTxt.addEventListener( Event.COMPLETE, leiaArquivoTxt );

Na primeira linha, criamos a variável com nome url para a classe URLRequest(), nela iremos armazenar o endereço do nosso arquivo.txt.
o endereço pode ser relativo (ex.: pasta/meuArquivo.txt) ou absoluto (ex.: http://www…/pasta/meuArquivo.txt). Neste exemplo estamos trabalhando na mesma pasta do arquivo .Fla.

Na segunda linha, criamos uma variável com nome de infoTxt para a classe URLLoader(), que servirá para recuperar informações/dados externos que estão no nosso arquivo.txt.

Na terceira linha, utilizamos a propriedade URLLoader.dataFormat que serve para formatar as informações/dados externos, e "dizer" ao Flash qual tipo de arquivo ele irá interpretar. Se é um tipo: Texto, Binário ou Variável.
No nosso caso queremos ler variável, então definimos como URLLoaderDataFormat.VARIABLES. Quando definimos a propriedade dataFormat para o valor de DataFormat.VARIABLES, a propriedade data(que veremos mais a diante) irá ter um comportamento de um Objeto(Object), que irá "mapear" os nomes de variáveis com seus respectivos valores do arquivo que estamos carregando.
Por padrão o Flash Player interpreta dados externos como Texto ( URLLoaderDataFormat.TEXT ) que são considerados como uma "String"(textos). Por este motivo, precisamos formatar os dados para encontrar e ler Variáveis ( URLLoaderDataFormat.VARIABLES ).
O Flash irá "buscar" por variáveis que estiverem no arquivo informado no endereço que definimos pela classe URLRequest().

Na quarta linha, utilizamos o método/função URLLoader.load() que irá fazer o "download" do arquivo. Entre seus parenteses o parâmetro solicitado é URLRequest(). Como já definimos o endereço pela variável url, apenas inserimos seu nome de variável url entre seus parenteses do método load().

Na quinta linha, adicionamos um ouvinte ( addEventListener ) para a variável infoTxt da URLLoader(), que irá verificar pelo Evento quando for carregado por completo ( Event.COMPLETE ), chama uma função que denominamos de leiaArquivoTxt. Esta função será responsável por ler as variáveis que definimos no arquivo.txt. Iremos criar está função a seguir:

Numa próxima linha digite:

6
7
8
function leiaArquivoTxt( evento:Event ):void{
	trace( infoTxt.data );
}

Teste o filme, (Ctrl+Enter). Você verá na caixa de saida/output que irá aparecer exatamente todo o arquivo.txt com suas variáveis e respectivos valores. Assim como na imagem 2 logo abaixo.


Imagem 2: lendo arquivo txt mostrado na caixa de saída (output) do Flash CS3.

Criamos a função leiaArquivoTxt que só é acionada/executada quando o arquivo.txt for totalmente carregado pelo evento descrito no ouvinte que definimos logo acima. Entre seus parenteses denominamos um parâmetro com nome evento do tipo Event ( evento:Event )Entre suas chaves digitamos o método trace() dentro deste método trace definimos a propriedade URLLoader.data, que como sabemos é nossa variável infoTxt.data que recebe todos os dados/informações daquele arquivo que foi carregado (arquivo.txt).

Agora, caso queira ler uma variável específica, basta informar como propriedade de URLLoader.data exatamente o nome da variável que está dentro do arquivo.txt.
Tendo está sintaxe:

URLLoader.data.variavel

Em nosso arquivo definimos três variáveis:
site
categoria
comentario

Então podemos podemos escrever da seguinte forma:

Ainda dentro da função leiaArquivoTxt, apague a linha 7:

7
trace( infoTxt.data );

Altere por:

7
8
9
trace( infoTxt.data.site );
trace( infoTxt.data.categoria );
trace( infoTxt.data.comentario );

Teste o filme, (Ctrl+Enter). Você verá agora na caixa de saida (output) que irá aparecer exatamente o valor referente a cada variável que definimos no arquivo.txt.

Seu código todo deve ter ficado da seguinte maneira:

1
2
3
4
5
6
7
8
9
10
var url:URLRequest = new URLRequest( "arquivo.txt" );
var infoTxt:URLLoader = new URLLoader();
infoTxt.dataFormat = URLLoaderDataFormat.VARIABLES;
infoTxt.load(url);
infoTxt.addEventListener( Event.COMPLETE, leiaArquivoTxt );
function leiaArquivoTxt( evento:Event ):void {
	trace( infoTxt.data.site );
	trace( infoTxt.data.categoria );
	trace( infoTxt.data.comentario );
}


Imagem 3: carregando variáveis no Flash CS3 utilizando AS3.


for …in



Muitas vezes você já saberá os nomes das variaveis que deseja ler assim como nesse exemplo acima que você acompanhou. Porém, em alguns casos podemos trabalhar com arquivos feitos por outros programadores e precisamos saber das variáveis para ler o mesmo no Flash.
Existe um meio bastante interessante e útil que inúmera todas a variáveis existentes no arquivo que foi carregado. Para isto utiilzamos o loop for …in

veja um exemplo.
Imagine que você ainda não sabe todas as variaveis existentes no arquivo que criamos (arquivo.txt).
Aproveitando este mesmo exemplo do arquivo .Fla e arquivo.txt, vamos recuperar todos os nomes das variáveis seguido dos seus respectivos valores.

Ainda dentro da função leiaArquivoTxt, apague as linhas: 7, 8 e 9:

7
8
9
trace( infoTxt.data.site );
trace( infoTxt.data.categoria );
trace( infoTxt.data.comentario );

e Digite no lugar:

7
8
9
for( var propriedade:String in infoTxt.data ){
	trace( propriedade + " = " + infoTxt.data[propriedade] );
}

Dentro da Função leiaArquivoTxt, criamos o loop for…in.
Todas as variáveis do arquivo Txt é armazenada na variável que denominamos de propriedade do tipo String.
E a cada vez que isso ocorre. Ou seja, cada vez que a propriedade procura os dados do arquivo.txt ( infoTxt.data ), executa o que estiver dentro da sua chaves { }. Este loop só termina quando recuprar todas as variáveis do arquivo.

Dentro da sua chaves { }, utilizamos o método trace() para mostrar o resultado na caixa de saída.
Como sabemos que a variável propriedade recebe o nome de cada variável do arquivo.txt, podemos utilizar uma espécie de Array [ ] para achar os valores de cada variável, e dentro da [ ] colocamos o nome da variavel propriedade que definimos, ficando assim:
infoTxt.data[ propriedade ]

Com isso você consegue recuperar os valores na caixa output:
sintaxe: variavel = valor

trace( propriedade + " = " + infoTxt.data[ propriedade ] );


Imagem 4:
declaração de loop for… in. para recuperar variaveis/valores de um arquivo.


Caixa de texto Dinâmico

Se você quer aplicar os valores das variáveis à uma caixa de texto dinâmica (ex.: TextField). Basta fazer da seguinte forma.
Suponhamos que neste caso você já tenha criado três caixas de texto dinâmico, e inseridos os mesmo no stage (palco) com seus nomes de instâncias denominadas como: campo1, campo2 e campo3.

No lugar do método trace() você pode utilizar a propriedade TextField.text:

7
8
9
campo1.text = infoTxt.data.site;
campo2.text = infoTxt.data.categoria;
campo3.text = infoTxt.data.comentario;


Imagem 5: recuperando valores e mostrando em uma caixa de texto dinâmico.

Abraços e até a próxima!

Rodrigo Gonçalves
Equipe Alvo Web

Creative Commons License
O Conteúdo do Alvo Web Developers está licenciada sob uma Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil License.

Categoria: ActionScript

18 respostas ↓

  • 1 gelinho // Mar 3, 2008 at 7:50 pm

    excelente post… ainda mais agpra q a adobe resolveu radicalizar… ah tu conhece algum link q contenha o manul ou guia do Action Script3 em portugues??

  • 2 Rodrigo // Mar 3, 2008 at 8:42 pm

    Valeu pela visita Gelinho.

    Você vai encontrar maior conteúdo de AS3 em inglês.
    Por exemplo, o próprio Help do Flash CS3 (atalho F1), já tem uma vasta documentação que ajuda bastante entender como utilizar seus métodos, propriedades, parâmetros de cada Classe.
    Já existem no mercado excelentes livros que ajudam à praticar, mas a maioria em inglês. Conteúdos em português, por enquanto ainda é mais difícil achar sobre AS3.

    Se tiver sugestões, nos avise.

    Abraços.

  • 3 Warley // Mar 11, 2008 at 7:28 pm

    Olá Rodrigo,
    adorei a matéria, pois sou um amante de flash e já tive esse tipo de dificuldade com variáveis de texto, porém, gostaria de saber, como carregar variáveis do php para o Flash CS3, ou melhor, o que quero é que o flash execute um script php e leia a resposta, exemplo:

    como faço para executar este script ou outro, este é só um exemplo, usando o cs3. Por favor se souber me envie algo pelo e-mail amo_o_flash@hotmail.com, eu uso o Flash CS3 e o PHP5. Por favor me ajude, e se precisar de algo me avise, talves eu saiba ou pelo menos saiba te indicar onde achar, desde de já obrigado!

  • 4 Rodrigo // Mar 12, 2008 at 10:41 am

    Valeu Warley,

    No momento não conheço sobre php. Preciso estudar sobre isso também.
    Mas posso adiantar que o Flash precisa encontrar variáveis para mostrar conteúdos(valores) no arquivo flash.

    Utilizando o mesmo exemplo do nosso artigo acima. Ao invés de carregar um arquivo .Txt você carrega uma página php.
    Você só precisa que este Php escreva as variáveis e seus valores ficando parecido com formato de .txt, mas no seu caso é um php que pode fazer essas variáveis com valores.

    Basta você direcionar no Flash o nome da variável que está no PHP para mostrar o valor da variável no Flash.

    Ex sintaxe da classe URLLoader():
    variavelURLLoader.data.suaVariavelPhp

    Deve existir outras maneiras de carregar um Script Php, Asp. Mas no momento desconheço. Preciso estudar sobre isso também.

    Se souber de algo interessante sobre este tema, nos avise.

    Abraços.

  • 5 Éder Varela // Set 13, 2008 at 11:06 am

    Olá, minha dúvida se encontra na seguinte linha:
    var url:URLRequest = new URLRequest( “arquivo.txt” );

    e se eu quero capturar não de um arquivo txt, e sim de uma página aspx por exemplo, como devo proceder?

  • 6 Rodrigo // Set 14, 2008 at 9:25 pm

    Olá Éder,

    Valeu pela pergunta.
    Sim é muito util…e me ajuda também aprender sobre isso.

    Bom, não conheço sobre programação Asp.net. Não posso dizer sobre a parte técnica sobre isso no momento.
    Mas ao flash, ele precisa encontrar a seguinte sintaxe:

    Variavel = valor

    Por exemplo, fiz um teste com PHP, talvez ajude tirar duvida ou dar alguma idéia do que você precisa fazer.
    Você pode fazer um arquivo ASP da mesma forma que o PHP fez.
    Deixo claro que não sei quase nada sobre PHP no momento. Conheço apenas o básico mesmo pra entender o que o Flash precisa encontrar. Mas a idéia é saber como Flash se conecta com PHP, ASP, etc.

    Acesse esse endereço no seu navegador, é isso que o flash precisa ver e saber pra funcionar:
    http://www.alvoweb.com/tutorial/variavel.php

    Que mostra na tela o seguinte sintaxe: Variavel = valor

    O script php que montou isso é bastante simples:

    1
    2
    3
    4
    5
    6
    7
    8
    
    <?php
    // variavel que recebe um valor
    //este valor está fixo, mas pode receber um valor de banco de dados.
    $meuValor = "meu valor";
     
    //isso que o usuário irá ver na tela escrevendo o valor
    echo "minhaVariavel=". "$meuValor";
    ?>

    Obs: Só cuidado pra não usar html junto com código, neste caso deixe apenas o script pra escrever: “varivel = valor”.
    Se tiver mais variaveis, acrescente o carctere & para seperar de uma variavel de outra:
    Ex: variavel1=valor1&variavel2=valor2

    No flash:
    Crie um novo arquivo no Flash para testar esse script.
    Flash tem que ser na versão AS3.
    No 1º frame, abra o painel de Actions e digite esse código abaixo.

    CÓDIGO AS3

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    //criamos campo de texto dinâmico
    var campo:TextField = new TextField();
    //adicionamos o campo de texto ao palco
    addChild(campo);
     
    //criamos variavel que recebe o endereço php
    var urlPhp:URLRequest = new URLRequest("http://www.alvoweb.com/tutorial/variavel.php");
    //criamos variavel que irá ler dados externos vindo do php
    var loaderPhp:URLLoader = new URLLoader( urlPhp );
    //por padrão o flash interpreta dados do tipo Texto, precisamos avisar que os dados serão do tipo Variaveis.
    loaderPhp.dataFormat = URLLoaderDataFormat.VARIABLES;
     
    //acrescentamos ouvinte que avisa quando carregar por completo o arquivo, irá chamar/executar a função leiaPhp()
    loaderPhp.addEventListener(Event.COMPLETE, leiaPhp);
     
    //criamos função que lê a variavel do arquivo php;
    function leiaPhp(e:Event):void{
        //aparece no campo de texto dinamico o valor da variavel
        campo.text = loaderPhp.data.minhaVariavel;
    }

    Depois basta testar o filme(Ctrl + Enter) pra ver o resultado.
    Deve mostrar na tela o valor da variavel.

    Não sei se consegui tirar sua dúvida, mas acredito que você deve preparar o seu arquivo script ASP para escrever sempre essa sintaxe:

    Variavel = valor

    E depois com esse resultado, o Flash reconhece as variaveis que quiz buscar e mostra o valor de cada variavel que você buscou.

    Abraços e boa sorte no seu projeto.

  • 7 Claudio // Nov 28, 2008 at 11:49 am

    Olá,
    Primeiro parabéns pelo post, não encontrei algo parecido em AS3 sobre isso.

    Fiz o código das duas maneiras citadas. O programa conseguiu pegar o valor da variável, mas retorna um erro e por isso não executa a aplicação. O erro é este:

    TypeError: Error #2007: Parameter url must be non-null.
    at flash.net::URLStream/load()
    at flash.net::URLLoader/load()
    at curve_gallery_fla::MainTimeline/curve_gallery_fla::frame1()

    o código funcionou em arquivo teste, mas com o restante das limhas do programa ele retorna esse erro.

    Alguém tem idéia do que pode ser isso?
    Abraços.

  • 8 Rodrigo // Nov 28, 2008 at 1:23 pm

    Claudio tudo bem,

    Se puder, coloca aqui o código pra ver se conseguimos ajudar.

    Pela mensagem parece que o erro deve estar algo relacionado com a declaração da variável do tipo URLLoader e URLStream.

    Dica: Você pode conhecer forum mais específico sobre esses erros. Apenas selecionando a mensagem de erro que surge na caixa output do flash, como exemplo:

    TypeError: Error #2007: Parameter url must be non-null.

    …e colocando essa mensagem no busca, como o Google.
    Irá surgir alguns foruns com erros semelhantes e que pode ajudar esclarecer sobre cada tipo de erro, as vezes alguns mostram o problema e solução. A maioria conteúdo em inglês.

    Abraços.

  • 9 Claudio // Nov 28, 2008 at 6:10 pm

    O código é grande:

    import org.papervision3d.scenes.*;
    import org.papervision3d.cameras.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.materials.*;
    import caurina.transitions.*;

    var container_x:Number = stage.stageWidth * 0.5;
    var container_y:Number = stage.stageHeight * 0.5 + 160;
    var container:Sprite = new Sprite();
    container.x = container_x;
    container.y = container_y;
    addChild(container);

    var scene:Scene3D = new MovieScene3D(container);
    var cam:Camera3D = new Camera3D();
    cam.zoom = 6;

    tn_url_target.visible = false;
    tn_title.text = “”;
    tn_desc.text = “”;
    tn_url.text = “”;
    loading_info.text = “”;
    url_button.visible = false;

    var no_of_ring:Number = 3;
    var angle:Number = 0;
    var p_dict:Dictionary = new Dictionary();
    var pa:Array = new Array();
    var filename_list = new Array();
    var url_list = new Array();
    var url_target_list:Array = new Array();
    var title_list = new Array();
    var description_list = new Array();
    var folder:String = “photos/”;
    var i:Number;
    var total:Number;
    var flashmo_xml:XML = new XML();
    var pic_loader:Loader = new Loader();
    var xml_loader:URLLoader = new URLLoader();

    var file_xml:String;

    //criamos variavel que recebe o endereço php
    var urlPhp:URLRequest = new URLRequest(”vars.php”);
    //criamos variavel que irá ler dados externos vindo do php
    var loaderPhp:URLLoader = new URLLoader( urlPhp );
    //por padrão o flash interpreta dados do tipo Texto, precisamos avisar que os dados serão do tipo Variaveis.
    loaderPhp.dataFormat = URLLoaderDataFormat.VARIABLES;

    //acrescentamos ouvinte que avisa quando carregar por completo o arquivo, irá chamar/executar a função leiaPhp()
    loaderPhp.addEventListener(Event.COMPLETE, leiaPhp);

    //criamos função que lê a variavel do arquivo php;
    function leiaPhp(e:Event):void{
    //aparece no campo de texto dinamico o valor da variavel
    file_xml = loaderPhp.data.gallery_cookie;
    }

    xml_loader.load(new URLRequest(file_xml));
    xml_loader.addEventListener(Event.COMPLETE, create_thumbnail);

    function create_thumbnail(e:Event):void
    {
    flashmo_xml = XML(e.target.data);
    total = flashmo_xml.thumbnail.length();
    var angle_per:Number = Math.PI * 2 * no_of_ring / total;

    for( i = 0; i

  • 10 Rodrigo // Nov 28, 2008 at 11:48 pm

    Claudio,

    Não veio código inteiro. Acho que o post de comentário não aceitou ou sem querer faltou copiar o resto do código.
    =/

    Bom, não tenho como eu testar, aqui até porque não estou com as classes que você usa.
    Mas, só tentei entender o código e lógica dele, para possivelmente tentar achar onde pode estar o tal erro que acredito ser na variavel URLLoader quando tenta achar o tal XML.

    Deixei no código comentario nas parte que acho que pode estar acontecendo esse erro.
    Não sei se isso ajuda, mas é o que pude entender aqui no momento.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    
    import org.papervision3d.scenes.*;
    import org.papervision3d.cameras.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.materials.*;
    import caurina.transitions.*;
     
    var container_x:Number = stage.stageWidth * 0.5;
    var container_y:Number = stage.stageHeight * 0.5 + 160;
    var container:Sprite = new Sprite();
    container.x = container_x;
    container.y = container_y;
    addChild(container);
     
    var scene:Scene3D = new MovieScene3D(container);
    var cam:Camera3D = new Camera3D();
    cam.zoom = 6;
     
    tn_url_target.visible = false;
    tn_title.text = "";
    tn_desc.text = "";
    tn_url.text = "";
    loading_info.text = "";
    url_button.visible = false;
     
    var no_of_ring:Number = 3;
    var angle:Number = 0;
    var p_dict:Dictionary = new Dictionary();
    var pa:Array = new Array();
    var filename_list = new Array();
    var url_list = new Array();
    var url_target_list:Array = new Array();
    var title_list = new Array();
    var description_list = new Array();
    var folder:String = "photos/";
    var i:Number;
    var total:Number;
     
    //*************************************
    //*************************************
    //var flashmo_xml:XML = new XML(); //aqui está iniciando a instância e "talvez" isso surge algum erro com que vc quer fazer com variaveis 
    var flashmo_xml:XML; //só declara a variavel e depois inicia a instância dentro da função create_thumbnail() 
     
    var pic_loader:Loader = new Loader();
    var xml_loader:URLLoader = new URLLoader();
     
    //*************************************
    //*************************************
    //aqui sua variavel que VAI receber o valor vindo de uma variavel do php. certo?
    var file_xml:String;
     
    var urlPhp:URLRequest = new URLRequest("vars.php");
    var loaderPhp:URLLoader = new URLLoader( urlPhp );
    loaderPhp.dataFormat = URLLoaderDataFormat.VARIABLES;
    loaderPhp.addEventListener(Event.COMPLETE, leiaPhp);
     
    //criamos função que lê a variavel do arquivo php;
    function leiaPhp(e:Event):void{
    //*************************************
    //*************************************
    //AQUI SÓ CADASTROU O VALOR DA VARIAVEL VINDA DO PHP NA VARIAVEL DO TIPO STRING "file_xml"
    file_xml = loaderPhp.data.gallery_cookie;
     
    //tenta colocar pra carregar o xml aqui dentro dessa função que lê o php,...
    //talvez dê tempo pra conseguir obter as informações do php e interagir com seu xml
    xml_loader.load(new URLRequest(file_xml));
    }
     
    //<<<<< AQUI provavalmente está surgindo erro, parece que quando 
    //tenta achar o valor da sua variavel do php, não consegue puxar o endereço do tal xml
    xml_loader.addEventListener(Event.COMPLETE, create_thumbnail); //quando completo o carregamento do xml(endereço que vem da variavel php)
     
    //essa função está imcompleta...
    function create_thumbnail(e:Event):void
    {
    	//coloqu eo operador "new" quando criar XML com iso você cria uma instância dentro da função
    	flashmo_xml = new XML(e.target.data);
    	total = flashmo_xml.thumbnail.length(); //puxa quantidde de nó xml
    	var angle_per:Number = Math.PI * 2 * no_of_ring / total;
    //...aqui já não sei mais vei incopleto o código
    for( i = 0; i

    Você tentou procurar nos foruns referente ao erro?
    Só fazer aquele esquema que te falei no outro comentario, pegar a mensagem de erro procurar no google

    TypeError: Error #2007: Parameter url must be non-null.

    …que vai aparecer foruns comentando sobre o tal erro. Talvez ajude-o a achar porque surge o erro.
    Geralmente esses forum tem mais suporte pra erros mais difíceis com esse.

    boa sorte.

    abraços.

  • 11 Régis // Jan 27, 2009 at 5:42 pm

    package {
    // supondo variavel &ldap=blah blah
    // instancie myMap:Map = new Map()
    import flash.events.*;
    import flash.net.*;
    public class Map {
    public function Map(file:String):void {
    var url:URLRequest = new URLRequest(file);
    var infoTxt:URLLoader = new URLLoader();
    infoTxt.dataFormat = URLLoaderDataFormat.TEXT;
    infoTxt.load(url);
    infoTxt.addEventListener(Event.COMPLETE, leiaArquivoTxt);
    function leiaArquivoTxt( evt:Event ):void {
    var urlVariables:URLVariables = new URLVariables(infoTxt.data);

    trace(”Variavel ldap: “+urlVariables.ldat);
    }
    }
    }
    }

  • 12 Régis // Jan 27, 2009 at 5:44 pm

    Perdão, só uma correção:
    instanciar dessa forma:

    var myMap:Map = new Map(”arquivo.txt”);

  • 13 Rodrigo // Jan 27, 2009 at 6:26 pm

    Bacana Régis. Gostei da sua iniciativa. A idéia é essa mesma.

    No seu exemplo só modifiquei a maneira como são declaradas as variáveis e funções, inserindo também com acesso de modificadores(public, private).
    O modificador private evita que o usuário tenha acesso as variáveis e funções que não são pra serem acessadas por ele, e sim, acessadas apenas pela própria classe.

    Não que a maneira como o seu código foi escrito esteja “errado”, testei e funcionou tranquilo. Mas é só uma convenção adotado por muitos que facilita manter um padrão na escrita do AS3 e também ajuda e muito na leitura do código. Fica mais organizado. ;)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    package {
    	/* Crie um arquivo .txt tendo variavel=valor
    	 * Ex: ldap=blah blah
    	 * 
    	 * instancie:
    	 * myMap:Map = new Map("arquivo.txt")
    	 */
     
    	//importa as classes necessárias
    	import flash.events.Event;
    	import flash.net.URLLoader;
    	import flash.net.URLRequest;
    	import flash.net.URLVariables;
     
    	public class Map {
    		//declara variaveis aqui!
    		//variaveis privadas, só podem ser acessadas dentro da classe
    		private var _url:URLRequest;
    		private var _infoTxt:URLLoader;
    		private var _urlVariables:URLVariables;
     
    		//função construtora da classe
    		public function Map( _file:String ):void {
    			_url = new URLRequest( _file );
    			_infoTxt = new URLLoader();
    			_infoTxt.load( _url );
    			_infoTxt.addEventListener( Event.COMPLETE, leiaArquivoTxt );
    		}
     
    		//função privada, só pode ser acessada dentro da classe
    		private function leiaArquivoTxt( evt:Event ):void {
    			_urlVariables = new URLVariables( _infoTxt.data );
    			trace("Variavel ldap: " + _urlVariables.ldap);
    		}
    	}
    }

    Sugiro utilizar o software FlashDevelop, é gratuito e ótimo para programar classes! ;D
    http://www.flashdevelop.org/community/

    Aqui mostra um vídeo como pode configurá-lo.
    http://br.youtube.com/watch?v=0_JaKaFwfck

    Abraços.

  • 14 marcio cardoso // Ago 27, 2009 at 6:15 pm

    eu gostei muito de artigo,e muito bem explicado, pois eu sou emiciante na area e mi apaixonei pelo flash pelo o pouco que eu vi, podemos cria muitas coisa.e gostaria de mi aprofundar mais eu conhecimento.

  • 15 Pedro Favaretto // Nov 13, 2009 at 3:42 pm

    Fala rodrigão muito show esse portal kara….
    gostaria de saber como fazer para selecionar registros de MYSQL e recebelos no flash e inserir em um textarea ou datagrid… não consegui achar nada disso na WEB vlw abraçãoO!

  • 16 Rodrigo // Nov 13, 2009 at 4:05 pm

    Opa, valeu Pedro pela visita ao site.

    Então, te dou os caminhos das pedras. OK?

    Meu forte não é linguagem side-server (PHP;ASP, etc). Não posso te ajudar nessa parte no momento. Mas basicamente a idéia seria +ou- essas:

    Um scrript-server-side(PHP/ASP, etc) conecta com banco de dados e escreve um arquivo como por exemplo um TXT ou XML(mais flexível!) contento todas as informações necessárias que você quer usar.

    Depois de definida essa estrutura do seu arquivo XML, no Flash, carrega esse XML(arquivo gerado pelo PHP/ASP,…) e, você manipula o arquivo XML usando o Flash como precisar, geralmente pra gerar ilsta usando um loop for ou loop for each.

    Caso não conheça sobre XML, esse artigo pode ser util.
    http://www.alvoweb.com/xml-externo-com-as3/

    Na net você acha alguns exemplos(maioria em inglês).

    Segue alguns que pode ser úteis conhecer como referências pra fazer essa conexão entre Flash e Banco de dados:

    http://imasters.uol.com.br/artigo/5987/montando_um_sistema_de_tickers_com_flash__xml__php__mysql

    Uma lista de artigos na parte PHP/XML & Flash:
    http://www.kirupa.com/web/index.htm

    Se quer algo mais sólido e além, sugiro um livro como apoio.

    Flash and PHP Bible Por Matthew Keefe
    http://books.google.com.br/books?id=Q5u7HgAACAAJ&dq

    Abraço.

  • 17 Luiz Claudio // Nov 24, 2009 at 10:23 pm

    Caro Rodrigo,

    Por favor , ajude um iniciante. Tentei seguir seus passos mais da minha forma. Meu action apresenta erro 1120, na linha

    var loader:URLLoader = URLLoader(event.target);

    Junto envio o meu código para sua analise.
    No mais parabéns a você e a AlvoWeb. Simplicidade, solidez e agilidade é tudo que precisamos no nosso mundinho da Internet.

    stop();

    var filename:String=”txt/missao.txt”;
    var carregar:URLLoader = new URLLoader();
    var loader:URLLoader = URLLoader(event.target);
    var requestURL:URLRequest = new URLRequest();
    carregar.load(requestURL);
    carregar.addEventListener(Event.COMPLETE,completeHandler);

    function completeHandler(e:Event):void
    {
    var pageText:String = loader.data;
    this.pageText_txt.text = pageText;
    }

    botaoM1.addEventListener(MouseEvent.CLICK, carregaTXT1);
    function carregaTXT1(event:MouseEvent):void
    {
    loadFile(”txt/missao.txt”);
    }

    botaoM2.addEventListener(MouseEvent.CLICK, carregaTXT2);
    function carregaTXT2(event:MouseEvent):void
    {
    loadFile(”txt/crenca.txt”);
    }

    botaoM3.addEventListener(MouseEvent.CLICK, carregaTXT3);
    function carregaTXT3(event:MouseEvent):void
    {
    loadFile(”txt/atuacao.txt”);
    }

    botaoM4.addEventListener(MouseEvent.CLICK, carregaTXT4);
    function carregaTXT4(event:MouseEvent):void
    {
    loadFile(”txt/politica.txt”);
    }

  • 18 Adalberto // Dez 30, 2009 at 1:51 am

    Estou tentando fazer funcionar o IOErrorEvent porem no codigo abaixo quando uso o “infoTxt.dataFormat=URLLoaderDataFormat.VARIABLES;” da erro, quando edito o mesmo ele funciona e avisa da falta do arquivo, onde estou errando???

    var url:URLRequest=new URLRequest(”arquivo.txt”);
    var infoTxt:URLLoader = new URLLoader();
    infoTxt.dataFormat=URLLoaderDataFormat.VARIABLES;
    infoTxt.load(url);

    infoTxt.addEventListener(IOErrorEvent.IO_ERROR, infoError);
    function infoError(e:IOErrorEvent):void {
    trace(”Arquivo nao encontrado”);
    }

    infoTxt.addEventListener( Event.COMPLETE, leiaArquivoTxt );
    function leiaArquivoTxt( e:Event ):void {

    trace( infoTxt.data.autoriza );
    trace( infoTxt.data.idioma );
    trace( infoTxt.data.chat );
    }

Faça um comentário

WordPress database error: [Table 'wp_cas_count' is read only]
INSERT INTO wp_cas_count (id) VALUES (NULL)

WordPress database error: [Table 'wp_cas_image' is read only]
INSERT INTO wp_cas_image (id, createtime, word) VALUES (0, 1283721589, 'micro')

WordPress database error: [Table 'wp_cas_count' is read only]
DELETE FROM wp_cas_count WHERE id = 0

*
Para validar seu comentario, por favor digite a palavra que aparece na imagem.
Voce pode escutar o som desta palavra caso julgue necessario. Clique na imagem para ouvir.