LoadVars: Carregando variáveis no Flash
Publicado por andrebanderas em 5 Maio 2008
Dificuldade: básico
_
O que preciso saber antes de ler este artigo?
Carregar arquivos via loadMovie. [Post]
Usar as funções matemáticas do Flash. [Post]
Introduzindo…
Muitas vezes seus scripts terão se comunicar com elementos fora do filme flash e vice-versa. Neste artigo vamos ilustrar o uso do recurso LoadVars carregando aleatoriamente imagens dentro de um MovieClip.
Ingredientes
- Um retângulo de 400×300.
- Um conjunto de quatro ou mais imagens dentro da mesma pasta do filme Flash, todas com 400×300.
- Um arquivo de texto com o nome de papeis.txt
Preparo
No arquivo imagens.txt
Abra o arquivo imagens.txt e escreva o nome do arquivo das imagens da seguinte forma.
&Variável = Valor da variável&
Exemplo:
&0=Ninféias.jpg&
&1=Montanhas azuis.jpg&
&2=Pôr-do-sol.jpg&
&3=Inverno.jpg&
O ‘&’ servirá para o LoadVars encontrar a variável. No caso acima o nome da variável será o número e o valor da variável o nome de arquivo.
No Flash
- Converta o retângulo em um MovieClip [F8], com registro no canto superior esquerdo.
- Coloque o nome de movie_mc.
Programando [F9]
//Declaramos a variável que receberá os valores do arquivo imagens.txt
var leitor_lv:LoadVars = new LoadVars;
//Quando as variáveis forem carregadas
leitor_lv.onLoad = function(){
trace(leitor_lv); //Quando o arquivo for carregado mostre na janela de saída os valores que estão em leitor_lv
}
leitor_lv.load(“imagens.txt”); //Carrega o arquivo imagens.
Se você de uma olhada saída verá que os caracteres acentuados e os espaços aparecem codificados, para contornar esse problema irei copiar o conteúdo de leitor_lv em um Array.
O código ficará assim:
var leitor_lv:LoadVars = new LoadVars;
var imagens_ar:Array = new Array; //Variável que irá receber os valores de leitor_lv
leitor_lv.onLoad = function(){
//O framento abaixo faz a cópia de leitor_lv em imagens_ar
for(var i in leitor_lv)
imagens_ar[i] = leitor_lv[i];
trace(imagens_ar); //Abre a janela de saída para vermos os valores que estão dentro de imagens_ar
}
leitor_lv.load(“imagens.txt”);
Observe agora que os valores de saída estão decodificados, porém os caracteres acentuados não estão aparecendo (pelo menos aqui não). Se este problema ocorrer adicione a seguinte linha no início do código:
System.useCodepage = true;
Assim os caracteres acentuados irão aparecer corretamente.
Agora precisamos fazer com que as imagens apareçam aleatoriamente. Para fazê-las aparecer, usarei o método loadMovie do objeto MovieClip, para a aleatoriedade irei usar a função Math.random().
A função Math.random() gera números aleatórios (pseudo-aleatórios na verdade) variando de 0 até 1 (0≤n<1). Como tenho 4 imagens terei que multiplicar o valor do número por 4 e ignorar a parte quebrada do número, usarei a função Math.floor() para isto.
Com essas alterações nosso código ficará assim:
System.useCodepage = true;
var leitor_lv:LoadVars = new LoadVars;
var imagens_ar:Array = new Array;
var n:Number = new Number; //Variável que irá receber o número da imagem
leitor_lv.onLoad = function(){
for(var i in leitor_lv)
imagens_ar[i] = leitor_lv[i];
n = Math.floor(4*Math.random()); //A variável ‘n’ recebe um valor aletório entre 0 e 3.
movie_mc.loadMovie(imagens_ar[n]); // Aqui a imagem é carregada para dentro de ‘movie_mc’
}
leitor_lv.load(“imagens.txt”);
Parece tudo perfeito, mas o código só carrega 4 imagens. Se for acrescentada mais uma imagem dentro do arquivo de texto ela nunca irá aparecer. Assim precisamos deixar esse código mais flexível. Fazemos isso trocando o número 4 pela expressão imagens_ar.length. Esta expressão retorna o número de elementos de imagens_ar. Assim se imagens_ar tiver 8 elementos a expressão imagens_ar.length irá retornar 8.
Com isso o código definitivo será:
System.useCodepage = true;
var leitor_lv:LoadVars = new LoadVars;
var imagens_ar:Array = new Array;
var n:Number = new Number;
leitor_lv.onLoad = function(){
for(var i in leitor_lv)
imagens_ar[i] = leitor_lv[i];
n = Math.floor(imagens_ar.length*Math.random()); //A variável ‘n’ recebe um valor aletório entre 0 e e o número de elementos de imagens_ar menos 1.
movie_mc.loadMovie(imagens_ar[n]); // Aqui a imagem é carregada para dentro de ‘movie_mc’
}
leitor_lv.load(“imagens.txt”);
É isto…
Hasta la vista
vinicius disse
nossa…valeu! você realmente explica muito bem. entendi tudinho =) agora falta testar!