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.
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.
No 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.
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:
var software:String;
trace(software);
//retorna undefined
var numero:Number;
trace(numero);
//retorna undefinedvar 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 undefinedOu ainda em retornos indefinidos, em funções, que é representado pela keyword void (não mais Void), exemplo:
private function init():void{
}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:
var NUMERO_MINIMO:Number = 1;
const NUMERO_MINIMO:Number = 1;
Muito interessante não? Agora usuários de sua constante não mais poderão alterar o valor dela.
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, ou qualquer propriedade herdada da classe DisplayObject:
import flash.display.Sprite;
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.
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.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 objetos são criados, porém só estão visíveis a partir do momento que utilizamos o método addChild() para anexá-los a algum objeto.
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);
//ou ainda
// adiciona.addEventListener(MouseEvent.CLICK,listener);No 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);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!
carlos diego
cara parabens pela materia ta muito bem escrita.
a adobe agora mudou quase que radicalmente o do as2 para o as3.
a cada mudança do as eu percebo que ele fica cada vez mas parecido com o java.
te mas velho.
abraços.
Ronaldo Ferreira
A Macromedia ja tinha em mãos os AS3...
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.