Leandro Amano (*)
O novo Flash CS3 diferentemente dos anteriores vem com uma linguagem que outro software já vinha utilizando (Adobe Flex), porém, nem mesmo assim alguns desenvolvedores conseguiram migrar com facilidade, a linguagem de programação mudou como nunca, nem mesmo a mudança do ActionScript 1 para o ActionScript 2 (Flash MX 2004) representava tantas novidades. A migração desta vez é realmente significativa tanto em performance quanto em metodologia de desenvolvimento e facilitará muito o entendimento da linguagem agora totalmente renovada.
Neste artigo tentarei passar o que desenvolvedores mais antigos podem estudar para a migração da versão, que está mais poderosa do que nunca.
Display Object Container x MovieClip
Na versão anterior, ActionScript 2, o Flash sempre abusou da classe MovieClip, que era a principal classe para a construção de elementos visuais no Flash. Hoje, devemos pensar um pouco diferente, devemos usar a MovieClip somente quando possuímos frames, uma timeline interna ao objeto. Isso porque a classe MovieClip representa muito mais espaço na memória que um simples Shape, ou mesmo um objeto do tipo Sprite.
Em ActionScript 3, Shape é representado por uma classe, onde esta exibe simplesmente um desenho no Stage, ela não pode conter outros objetos dentro, representa a display object.
Para inserir objetos dentro de outros, assim como é feito com a classe MovieClip em AS2, devemos utilizar um objeto que representa a display object container, que é o caso da classe MovieClip e Sprite. A Sprite significativamente menor que a MovieClip em relação à memória, isso porque ela não contém frames, pode conter outros objetos dentro, mas não possui métodos como o play(), específico para MovieClip.
Undefined x Null
Os objetos que eram criados na ActionScript sempre eram representados por undefined, um tipo de objeto primitivo, porém, associado ao valor de uma variável. Na ActionScript 3 é retornado null ao invés de undefined quando pedimos o tipo string. Exemplo:
ActionScript 2
var software:String;
trace(software);
//retorna undefined
var numero:Number;
trace(numero);
//retorna undefined
ActionScript 3
var software:String;
trace(software);
//retorna null
var numero:Number;
trace(numero);
//retorna NaN (not a number)
Onde ficou o undefined? Temos o resultado undefined quando tipificamos o objeto como sem tipo definido, isso mesmo, qualquer instância:
var software:*;
trace(software);
//retorna undefined
Ou ainda em retornos indefinidos em funções que é representado pela keyword void (não mais Void), exemplo:
private function init():void{
}
Constantes
Constantes são como variáveis, porém, representam algo e mantém seu valor inalterado, por exemplo, PI, da classe Math.
Hoje podemos realmente dizer ao compilador quem é uma constante, não só pela representação textual em caixa alta, mas também pela sua definição:
ActionScript 2
var NUMERO_MINIMO:Number = 1;
ActionScript 3
const NUMERO_MINIMO:Number = 1;
Muito interessante não? Agora usuários de sua constante não mais poderão alterar o valor dela.
Propriedades MovieClip
Seguindo a convenção de nomes, que muitos desenvolvedores adotam, a Adobe retirou os antigos sinais underscore ( _ ) do início das propriedades da classe MovieClip:
import flash.display.MovieClip;
var quadro:Sprite = new Sprite();
quadro.graphics.beginFill(0x990000);
quadro.graphics.drawRect(50, 50, 100, 100);
quadro.graphics.endFill ();
quadro.alpha = 50;
quadro.rotation = 45;
Lembrando que as propriedades se encontram na DisplayObject, não mais em MovieClip, objetos do tipo MovieClip apenas contêm essas propriedades por derivarem da classe Sprite, que por sua vez herda DisplayObjectContainer.
Document class
Para mim, uma mudança fundamental, aguardava essa implementação desde o Flash MX 2004, onde foram inseridas as classes.
Alterar a classe da root é fundamental pra que você controle o projeto 100% via ActionScript, sem se quer abrir o Flash. Anteriormente não era possível fazer isso, as opções que tínhamos era inserir código no primeiro frame da timeline ou inserir um MovieClip no primeiro frame da aplicação convertendo-o posteriormente em classe, para assim teoricamente substituir a classe do documento principal.
Depths
Antigamente utilizados para manipular o nível de cada objeto visual no stage, agora substituído pela childIndex, mantém um padrão mais fácil para inserção de objetos visuais no palco:
import flash.display.Sprite;
import flash.geom.Matrix;
var matrix:Matrix = new Matrix();
matrix.createGradientBox(100, 100, 0, 50, 50);
var colors = [0x990000, 0xFF0000];
var alphas = [100, 100];
var ratios = [0x00, 0xFF];
var desenho:Sprite = new Sprite();
desenho.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, matrix);
desenho.graphics.drawRoundRect(50, 50, 100, 50, 20);
desenho.graphics.endFill();
this.addChild(desenho);
Como vemos, os objeto são criados, porém só estão visíveis a partir do momento que utilizamos o método addChild() para anexa-los a algum objeto.
Event handling
Os tratadores de evento foram incluídos no ActionScript 3 num padrão único, utilizados antigamente somente por componentes do próprio Flash e componentes criados com a classe EventDispatcher. Os quais eram utilizados da seguinte maneira:
import mx.controls.Button;
var adiciona:Button;
var listener:Object = new Object();
listener.click = function(evt:Object):Void {
trace(evt.target);
};
adiciona.addEventListener("click",listener);
Em ActionScript 3 manipulamos todos os eventos da mesma forma, porém cada string pode ser representada por uma constante, como no exemplo abaixo, onde utilizo o enterFrame:
import flash.events.Event;
import flash.display.Sprite;
var objeto:Sprite = new Sprite();
objeto.graphics.beginFill(0x990000);
objeto.graphics.drawRect(50, 50, 50, 50);
objeto.graphics.endFill();
objeto.addEventListener(Event.ENTER_FRAME, _onEnterFrame);
function _onEnterFrame(evt:Event):void {
evt.target.x += 2;
}
this.addChild(objeto);
Finalização
O Flash hoje é totalmente manipulado pela ActionScript, possui uma Orientação a Objetos rígida e está indo para um ponto diferente, onde escalabilidade, manutenção e performance são o ponto diferencial, além de manter o rico apelo visual que o Flash sempre proporcionou. Neste artigo foquei apenas alterações básicas no código, porém o Flash CS3 ActionScript 3 proporciona muito mais que isso, onde entramos no assunto sobre classes, visando maior expansão e reutilização de código… Maiores informações ou mesmo cursos na área podem ser obtidos na ENG, onde ministro treinamentos em todos os módulos da ActionScript 1, 2 e 3, o site é www.eng.com.br.
Espero que tenham aproveitado e aproveitem mais ainda essa ferramenta que hoje é um grande presente para os desenvolvedores para a internet rica, que cresce cada vez mais!
(*) Leandro Amano atualmente é desenvolvedor Adobe/Macromedia e produz aplicativos ricos (RIA) desde 2002, Adobe User Group Leader do Flashfor, diretor de criação da Digital Bug e instrutor Adobe/Macromedia na ENG DTP & Multimídia em São Paulo – SP e Curitiba – PR. Site www.leandroamano.com.br