Dev (Back & Front)ARTIGO

Migrando para ActionScript Parte 3

Este artigo define uma série de alterações feitas no ActionScript 3. Todos os códigos de exemplos podem ser copiados e colados no painel de ActionScript, não necessitando de qualquer elemento visual no stage. Não existe qualquer pré-requisito, mas conhecer a linguagem ActionScript 2 facilita muito o entendimento.

Também é importante ler o artigo anterior, o segundo desta série.

Carregando Arquivos Externos em Tempo de Execução

O Flash possui a capacidade de dividir seu conteúdo em pedaços, o que significa que o usuário pode carregar áreas do site apenas quando necessário, e quando solicitado pelo cliente.

Isso torna a experiência do usuário mais gratificante, pois, assim como não precisamos colocar todos os produtos do supermercado num carrinho de compras para comprar uma bolacha, o usuário do site não precisa fazer o download de toda a sessão de produtos para saber o telefone de contato.

Carregando arquivos externos (SWF, JPG, PNG, ou GIF)

Em ActionScript 3, precisamos basicamente da classe Loader (objeto onde eles são carregados) para que haja um container para os objetos que serão carregados.

O método load() pede um objeto do tipo URLRequest.

Os arquivos carregados podem ser swfs ou mesmo imagens (jpg, png ou gif).

import flash.display.Loader;
import flash.net.URLRequest;

var loader:Loader = new Loader();
loader.load(new URLRequest("flash.jpg"));
addChild(loader);

O código acima chama uma imagem que se encontra na mesma pasta, de nome flash.jpg.

Não existe qualquer tratamento no código acima, ou seja, não sabemos se ocorreu um erro, quando carregou, ou mesmo qual o peso do arquivo.

Para esse tipo de tratamento podemos inserir alguns eventos caso desejemos trata-los, ou não.

Os eventos, como citados em cursos anteriores, se encontram no pacote flash.events. Usaremos a classe Event e ProgressEvent para determinar o carregamento.

Manipulando o progresso de carregamentos externos

O objeto Loader contêm uma propriedade chamada contentLoaderInfo, é nela que cadastramos os listeners:

import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;

var imagens:Array = new Array("flex.jpg", "air.gif", "flash.jpg");

function loadRandomImages():void {
	var random:Number = Math.round(Math.random()*(imagens.length-1));
	var loader:Loader = new Loader();
	//Determina quando o download começa
	loader.contentLoaderInfo.addEventListener(Event.OPEN, onLoadInit);
	//Determina o andamento do progresso de download do arquivo
	loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
//Determina algo quando o download acaba
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
	loader.load(new URLRequest(imagens[random]));
	addChild(loader);
}

var progressBarBG:Sprite = new Sprite();
progressBarBG.graphics.beginFill(0xCCCCCC);
progressBarBG.graphics.drawRect(0, 0, stage.stageWidth, 2);
progressBarBG.graphics.endFill();
addChild(progressBarBG);

var progressBar:Sprite = new Sprite();
progressBar.graphics.beginFill(0x990000);
progressBar.graphics.drawRect(0, 0, stage.stageWidth, 2);
progressBar.graphics.endFill();
addChild(progressBar);
progressBar.scaleX = 0;

function onLoadInit(event:Event):void {
	trace("init");
}

function onLoadProgress(event:ProgressEvent):void {
	progressBar.scaleX = event.bytesLoaded / event.bytesTotal * 1;
}

function onLoadComplete(event:Event):void {
	trace("complete");
}

loadRandomImages();

Manipulando arquivos externos

Se desejarmos que algo aconteça quando o objeto Loader termina o pré-carregamento, utilizamos uma action no evento COMPLETE, porém, repare o tipo de objeto utilizado, fazemos isso porque ainda não sabemos qual o tipo de conteúdo que será ali carregado.

//Arquivo A

import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
loader.load(new URLRequest("11_arquivo_externo.swf"));
addChild(loader);

function onLoadComplete(event:Event):void {
	var movie:* = loader.content;
	movie.alpha = .5;
}

//Arquivo B
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.MouseEvent;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
addChild(loader);

var botao:Sprite = new Sprite();
botao.graphics.beginFill(0x990000);
botao.graphics.drawRect(0, 0, 50, 20);
botao.graphics.endFill();
botao.x = 200;
botao.y = 300;
addChild(botao);
botao.addEventListener(MouseEvent.CLICK, onClick);

function onLoadComplete(event:Event):void {
	var movie:* = event.target.content;
	movie.rotation = 45;
}

function onClick (event:MouseEvent):void {
	loader.load(new URLRequest("flex.jpg"));
}
Leandro AmanoAutor

É designer/desenvolvedor. Iniciou sua carreira em 1999 e atualmente é Adobe Certified Expert, Adobe Certified Instructor, Adobe User Group Leader, Adobe Community Professional e Adobe Community Leader.

Ver perfil