MXStudio » Flash » Galeria de Imagens ActionScript 3

Galeria de Imagens ActionScript 3

Olá Comunidade. Nesse meu primeiro tutorial voltado aos usuários do Flash CS3 e do ActionScript 3, irei mostrar criar uma Galeria de Imagens com XML. Essa galeria possui o mesmo efeito usado em um tutorial que fiz um tempo atrás usando ActionScript 2. Esse tutorial é para mostrar e ensinar algumas coisas sobre o ActionScript 3. Aos que nunca fizeram o tutorial, eis o link:

Galeria de Imagens com XML ActionScript 2

Pré-requisitos para esse tutorial

  • Flash CS3 usando ActionScript 3
  • Conhecimento básico de ActionScript 2 ou 3

Outro requisito para esse tutorial é ler uma matéria que eu fiz sobre as mudanças do ActionScript 3. Nesse artigo vocês encontrarão as principais mudanças e vão ajudar e muito no entendimento desse tutorial:

Algumas diferenças e novidades no ActionScript 3

Criando o XML

Vamos ao XML que conterá nossas Imagens e seus títulos. Salve o arquivo com o nome de imagens.xml.

<?xml version="1.0" encoding="utf-8"?>
<imagens>
   <foto>
      <imagem>imagem.jpg</imagem>
      <texto>Moto Ayrton Senna</texto>
   </foto>
   <foto>
      <imagem>imagem1.jpg</imagem>
      <texto>Mclaren do Senna</texto>
   </foto>
   <foto>
      <imagem>imagem2.jpg</imagem>
      <texto>Capacete Senna</texto>
   </foto>
   <foto>
      <imagem>imagem3.jpg</imagem>
      <texto>Ferrari Shumacher</texto>
   </foto>
   <foto>
      <imagem>imagem4.jpg</imagem>
      <texto>Loro</texto>
   </foto>
   <foto>
      <imagem>imagem5.jpg</imagem>
      <texto>Trator do Sítio</texto>
   </foto>
   <foto>
      <imagem>imagem6.jpg</imagem>
      <texto>Carroça antiga</texto>
   </foto>
</imagens>

Criando nossa Galeria

Vamos criar nossa galeria. Você poderá fazer da maneira que desejar. Comecei com um palco com dimenções de 550×420. Os nome em Vermelho são os nomes de instância de cada objeto.

Instâncias dos Objetos

holder: MovieClip em branco
borda: MovieClip com um retângulo desenhado dentro dele
preloader: MovieClip com uma barra desenhado dentro dele
porcento: campo de texto dinamico
ant: MovieClip para servir como botão
prox: MovieClip para servir como botão
texto: campo de texto dinamico

Os objetos podem posicionados em qualquer camada de seu arquivo, só tomem cuidado para posicionar o MovieClip holder acima do MovieClip borda. Uma coisa muito importante. Quando criar o MovieClip borda, ele tem que ter seu ponto de registro no meio. Como na Imagem:

MovieClip borda

Com nossos MovieClips criados e instanciados vamos ao ActionScript. Coloquem isso no frame dos os objetos criados anteriormente:

/* Importamos a Classe Tween */
import fl.transitions.Tween;
import fl.transitions.easing.*;
/* Importamos a Classe responsável pelos eventos da Classe Tween */
import fl.transitions.TweenEvent;
/* Criamos uma variável para armazenar o total de fotos no XML */
var total:Number = undefined;
/* Criamos uma instancia para a Classe XML */
var dadosXML:XML = new XML();
/* Criamos uma instancia para a Classe Loader */
/* Essa Classe vai carregar nossas imagens */
var loader:Loader = new Loader();
/* Criamos uma variável para saber qua a foto atual */
var fotoAtual:Number = 0;
/* Criamos ima instancia para a Classe URLoader */
/* Essa Classe vai carregar nosso arquivo XML */
var carregaXML:URLLoader = new URLLoader();
/* Adiciono um EventListener para a instancia da Classe URLLoader */
/* O evento será chamado quando a terminar de carregar o arquivo XML */
/* Quando terminar de carregar, chama a função monta */
carregaXML.addEventListener(Event.COMPLETE, monta);
/* Carregegamos o arquivo XML */
carregaXML.load(new URLRequest("imagens.xml"));
/* Função chamada ao carregar o arquivo XML */
function monta(event:Event) {
	/* Armazenamos nosso arquivo XML */
	dadosXML = new XML(event.target.data);
	/* Armazenamos o total de fotos no XML */
	total = dadosXML.foto.length();
	/* Chama a função mostraImagem chamando a primeira imagem */
	mostraImagem(0);
}
/* Função responsável por carregar as imagens do XML */
function mostraImagem(atual:Number):void {
	/* Descarrega qualquer imagem já carregada */
	loader.unload();
	/* Adiciono um EventListener para a instancia da Classe Loader */
	/* Esse listener será acionado sempre que a imagem estiver sendo carregada */
	/* Quando o listener for acionado, chamará a função loadProgress */
	loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
	/* Adiciono um EventListener para a instancia da Classe Loader */
	/* Esse listener será acionado assim que a imagem terminar de ser carregada */
	/* Quando o listener for acionado, chamará a função loadComplete */
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
	/* Carregamos a imagem */
	loader.load(new URLRequest(dadosXML.foto.imagem[atual]));
	/* Carregamos a imagem dentro do MovieClip holder */
	holder.addChild(loader);
	/* Deixamos o MovieClip holder com alpha igual a 0 */
	holder.alpha = 0;
	/* Usamos o removeEventListener para desativar o evento CLICK da Classe MouseEvent */
	/* Removemos o evento CLICK dos MovieClips prox e ant */
	prox.removeEventListener(MouseEvent.CLICK, proxPress);
	ant.removeEventListener(MouseEvent.CLICK, antPress);
	/* Desativamos os botões ant e prox */
	prox.enabled = false;
	ant.enabled = false;
}
/* Função responsável por exibir o progresso do carregamento da imagem */
function loadProgress(Event:ProgressEvent) {
	/* Criamos uma variável para saber quando carregou */
	var carregado:Number = Event.bytesLoaded;
	/* Criamos uma variável para saber o tamanho da imagem */
	var tamanho:Number = Event.bytesTotal;
	/* Modifica o tamanho do MovieClip preloader conforme a imagem estiver sendo carregada */
	preloader.scaleX = carregado/tamanho;
	/* Exibe a porcentagem carregada */
	porcento.text = Math.round(carregado/tamanho*100)+"%";
}
/* Função responsável por exibir a imagem carregada */
function loadComplete(event:Event) {
	/* Mostramos o texto da imagem */
	texto.text = dadosXML.foto.texto[fotoAtual];
	/* Aumentamos o MovieClip borda para o mesmo tamanho do MovieClip holder */
	/* Acrescentamos 16px para poder fazer uma borda */
	var tww:Tween = new Tween(borda, "width", Back.easeOut, borda.width, holder.width+16, 1, true);
	var twh:Tween = new Tween(borda, "height", Back.easeOut, borda.height, holder.height+16, 1, true);
	/* Movemos o MovieClip holder */
	var twhx:Tween = new Tween(holder, "x", Back.easeOut, holder.x, borda.x-holder.width/2, 1, true);
	var twhy:Tween = new Tween(holder, "y", Back.easeOut, holder.y, borda.y-holder.height/2, 1, true);
	/* Movemos o MovieClip ant */
	var twant:Tween = new Tween(ant, "y", Back.easeOut, ant.y, (borda.y+holder.height/2)+8, 1, true);
	/* Movemos o MovieClip prox */
	var twpro:Tween = new Tween(prox, "y", Back.easeOut, prox.y, (borda.y+holder.height/2)+8, 1, true);
	/* Movemos o campo de texto dinamico */
	var twtxt:Tween = new Tween(texto, "y", Back.easeOut, texto.y, (borda.y+holder.height/2)+8+ant.height, 1, true);
	/* Adicionamos um EventListener para uma das instancias da Classe Tween criadas */
	/* Esse listener será disparado assim que o MovieClip holder terminar de se mover */
	/* Quando o listener for acionado, chamará a função termina */
	twhx.addEventListener(TweenEvent.MOTION_FINISH, termina);
}
/* Função chamada quando o MovieClip holder terminar de ser movido */
function termina(Event:TweenEvent) {
	/* Escondemos o MovieClip preloader */
	preloader.scaleX = 0;
	/* Apagamos o texto do campo porcento */
	porcento.text = "";
	/* Damos um efeito em alpha ao MovieClip holder */
	var twha:Tween = new Tween(holder, "alpha", Regular.easeOut, 0, 1, 1, true);
	/* Adicionamos um EventListener para a instancia da Classe Tween */
	/* Esse listener será disparado assim que o MovieClip holder tiver um alpha de 100% */
	/* Quando o listener for acionado, chamará a função alphaTerminou */
	twha.addEventListener(TweenEvent.MOTION_FINISH, alphaTerminou);
}
/* Função chamada quando o MovieClip holder tiver um alpha de 100% */
function alphaTerminou(Event:TweenEvent) {
	/* Adicionamos os EventListener novamente */
	prox.addEventListener(MouseEvent.CLICK, proxPress);
	ant.addEventListener(MouseEvent.CLICK, antPress);
	/* Habilitamos os MovieClips prox e ant */
	prox.enabled = true;
	ant.enabled = true;
}
/* Adicionamos um EventListener para os MovieClips prox e ant */
/* Esse listener será disparado assim que o Mouse for clicado sobre eles */
/* Quando o listener for acionado, chamará a função mudaImagem */
prox.addEventListener(MouseEvent.CLICK, proxPress);
ant.addEventListener(MouseEvent.CLICK, antPress);
/* Usando a propriedade buttonMode fazemos com que os MovieClips */
/* Passem a ter a mãozinha do Mouse */
prox.buttonMode = true;
ant.buttonMode = true;
/* Função que carrega uma outra imagem */
function proxPress(event:MouseEvent):void {
	/* Verifica se a foto atual é menor que o total de imagens */
	if (fotoAtual < (total-1)) {
		/* Incrementamos a variável fotoAtual */
		fotoAtual++;
		/* Chama a função mostraImagem */
		mostraImagem(fotoAtual);
	}
}
function antPress(event:MouseEvent):void {
	/* Verifica se a foto atual é maior que 0 */
	if (fotoAtual > 0) {
		/* Decrementa a variável fotoAtual */
		fotoAtual--;
		/* Chama a função mostraImagem */
		mostraImagem(fotoAtual);
	}
}

Aqui um Exemplo da Galeria funcionando.

Considerações Finais

O objetivo desse tutorial é fazer uma comparação da mesma galeria feita em ActionScript 2 dessa vez usando o ActionScript 3, ver quais funções mudaram, novas regras, etc. Não entrei em muitos detalhes sobre algumas funções pois esse não era o ojetivo principal, entrarei com mais detalhes em futuros tutoriais usando o ActionScript 3.

Uma dica aos que querem começar a aprender ActionScript 3, pegue seus projetos, tutoriais e aplicações feitas em ActionScript 2 tentem converter para o ActionScript 3. Apesar das novidades, não é tão complicado aprender se já tiver uma base no ActionScript 2, vocês irão se surpreender.

Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: http://www.natanalves.com

Um abraço a todos e até a próxima.

Autor: Natan D. Alves – Moderador do Fórum de Flash & ActionSctipt MXSTUDIO

Qualquer dúvida envie um e-mail para natanalves@mxstudio.com.br ou acesse nosso fórum


Assine o nosso Feed
1.404 assinantes,
assine você também!
Publique esse artigo no Twitter Salve este artigo no Delicious Cadastre esse artigo no Dihitt Cadastre esse artigo no UEBA Cadastre esse artigo no Rec6

10 Comments to Galeria de Imagens ActionScript 3

  1. Calazans's Gravatar Calazans
    Abril 22, 2008 at 1:28 pm | Permalink

    Já usei esse tutorial. Mas tem um problema. Quando se tem muitas fotos, fica chato ficar clicando nos botões “próximo” e “anterio”. Falta um botão automático para carregar as fotos em um determinado tempo.

  2. rapidaum's Gravatar rapidaum
    Junho 30, 2008 at 1:53 pm | Permalink

    Não consegui rodar…
    Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.

  3. Agosto 26, 2008 at 2:33 pm | Permalink

    Perfeito, a solução funciona!!!
    Parabéns…

  4. Novembro 26, 2008 at 6:44 pm | Permalink

    Olá!

    Eu estou utilizando este código para montar a minha galeria, mas não está funcionando.

    Eu criei todos os elementos em um frame apenas, converti os objetos e instanciei eles conforme o tutorial. Uso Flash CS3, está em ActionScript 3 e Flash player 9. O XML está na mesma pasta….as fotos estão com o mesmo nome….

    Quando testo a cena, não funciona nada, nem o preloader, nem carrega a imagem…

    poderiam me ajudar??

  5. nisca's Gravatar nisca
    Fevereiro 5, 2009 at 12:41 am | Permalink

    olá nada funciona no meu porque será os botões tem codogos as imagens colcam onde rsss vixe to perdido

  6. Magnata's Gravatar Magnata
    Fevereiro 16, 2009 at 2:13 pm | Permalink

    Sei q este tutorial é meio antigo, mas tentei usa-lo e estou com um probleminha,

    está ocorrendo erro nas linhas:
    if (fotoAtual < (total-1)) {
    e na linha
    if (fotoAtual > 0) {

    O flash diz q é erro de syntax, ai tentei retirar o ‘;’ das duas linhas e até funcionou, mas qdo executo o .swf ocorre outro erro q parece dizer q o ‘lt’ e o ‘gt’, estão indefinidos, será q pode me ajudar?

    Obrigado

  7. sheyla's Gravatar sheyla
    Fevereiro 22, 2009 at 5:24 pm | Permalink

    Boa tarde, estou estudando ActionScript 3 e fazendo alguns tutoriais, fiz essa galeria igual do tutorial mas retorna um erro assim:
    1046: Type was not found or was not a compile-time constant: Event. – referente a linha:
    function loadComplete(event:Event){

    Pode me ajudar?
    Obrigada

  8. felipe's Gravatar felipe
    Junho 25, 2009 at 10:06 pm | Permalink

    esta dando erro nessa linha

    function alphaTerminou(Event:TweenEvent) {

  9. marcio's Gravatar marcio
    Setembro 21, 2009 at 4:02 pm | Permalink

    nao consigo importar o swf na pagina html q eu to fazendo.
    nao funciona a galeria.
    e as vezes qd eu gero o swf no proprio flash nao funciona.
    ja tentei publicar o swc e outras coisas. mas nada ta funcionando.

    tem com resolver isso?

  1. By on Julho 5, 2008 at 6:06 pm
  2. By on Julho 19, 2008 at 7:27 pm

Deixe um Comentario

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">

Natan D. Alves

Fã e divulgador da plataforma Flash e do ActionScript, músico nas horas vagas e estudante do curso de Ciência da Computação.

Últimos Artigos do Autor