Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Capítulo 2, Descobrindo o que Você Precisa para Trabalhar com ActionScript 3.0
Classes Fechadas
Seguindo o mesmo estilo, como exceções do tempo de execução e tipos de tempo
de execução, ActionScript 3.0 estabelece o conceito de classes fechadas de uma forma
cuidadosa, mais formalizada que em ActionScript 2.0. Uma classe fechada é a que não
Em contraste, uma classe que realmente pode ter propriedades e métodos designados
à hora de execução é chamada dinâmica. Uma das classes dinâmicas mais familiares é
MovieClip, mas, se falarmos historicamente, muitos desenvolvedores de script de
estrutura não têm considerado clipes de filmes em termos de classe. O mesmo pode
ser dito de botões e campos de texto, porque se pode criar tais elementos com as
ferramentas de desenho de Flash (dos elementos ora mencionados, apenas clipes de
filmes são dinâmicos). Por codificadores de script de estrutura, clipes de filmes são
em geral vistos como simplesmente símbolos ou linhas de tempo, e estas últimas têm
sempre estado aptas a receber novas variáveis à hora de execução. É bem verdade. O
que está realmente ocorrendo, no entanto, é que as variáveis definidas em scripts de
quadro de teclas são, na realidade, propriedades dinâmicas de um objeto MovieClip;
as funções são realmente métodos dinâmicos. Declarar uma variável em um quadro de
teclas de uma linha do tempo principal ou em uma linha de tempo de clipe de filme é,
conceitualmente, o mesmo que no caso a seguir:
No papel, isso é como era em ActionScript 2.0, mas de fato, até classes não-dinâmicas
podem ser alteradas com a manipulação da propriedade Object.prototype (herdada
por todos objetos) ou pelo operador de matriz de acesso ([]). Programadores avançados
que utilizaram tal caminho no passado irão entender o que não funciona mais em
ActionScript 3.0 para classes fechadas.
// ActionScript 2.0
var str:String = “”;
str.customProperty = “Porta dos fundos secreta.”;
// Exibe: Não há propriedade com o nome ‘customProperty’.
Encerramentos de Método
De todas as atualizações de ActionScript 3.0, não surpreende que desenvolvedores, não
obstante seu nível de habilidade, casualmente acharam uma em particular: encerramentos
de método. Por quê? Porque a apresentação de encerramentos de método muda o ponto
de vista, ou alcance, de métodos em ActionScript 3.0.
O objetivo se refere à área conceitual de um programa dentro do qual o código executa.
A disponibilidade de definições de código, tais como variáveis, funções, propriedades
e métodos, dependem do objetivo do código sendo executado. Por exemplo, se uma
variável é declarada em uma estrutura de linha de tempo, aquela variável pode ser
referida por qualquer outro código naquela estrutura, desde que o código apareça após a
declaração. Mesmo a função definida naquela estrutura pode referir à variável objetivada
na linha do tempo, pois escopos podem ser aninhados, e o fluxo do escopo se move de
fora para dentro: as definições da linha de tempo se tornam disponíveis à função.
// Uma variável declarada aqui ...
var favoriteCereal:String = “Star Crunchers!”;
function myFunction():void {
// e aqui ...
trace(favoriteCereal); // Exibe: Star Crunchers!
}
myFunction();
Em contrapartida, uma variável declarada dentro da função pode apenas ser referida por
aquela função, porque o objetivo da função está confinado nela mesma.
function myFunction():void {
// Uma variável declarada aqui ...
var favoriteCereal:String = “Star Crunchers!”;
// ActionScript 2.0
myButton.onRelease = buttonHandler;
function buttonHandler():Void {
trace(this); // Exibe: _level0.myButton
// outro código de manejo de evento
}
// ActionScript 2.0
var audio:Sound = new Sound();
audio.loadSound(“externalFile.mp3”, true);
audio.onSoundComplete = completeHandler;
function completeHandler():Void {
this.start();
}
Novamente, a função é do âmbito do objeto. Nesse caso, a expressão this.start()
importa para invocar o método Sound.start()no objeto audio. Ainda que
conveniente nesse tipo de situação, dificuldades aparecem quando o manejador do
evento precisa referir a objetos fora do âmbito da função, especialmente em classes sob
medida. Em larga escala, esse tema poderia ser tratado em ActionScript 2.0 com a classe
Delegate, a qual permite que você redirecione o objetivo como desejado:
// ActionScript 2.0
import mx.utils.Delegate;
var audio:Sound = new Sound();
audio.loadSound(“externalFile.mp3”, true);
audio.onSoundComplete = Delegate.create(this, completeHandler);
function completeHandler():Void {
audio.start();
}
myXML..track[4].@title;
Qual você preferiria digitar?
Além disso, você pode comparar dados num conjunto familiar de operadores. Por
exemplo, se o documento XML à mão contém vários artistas gravados, o nó The Beatles’
<artist> poderia ser singularizado tão facilmente quanto isto:
myXML.artist.(@name == “The Beatles”)
trace(pangram.indexOf(“o”)); // Exibe 13
trace(pangram.indexOf(“o”, 14)); // Exibe 18
trace(pangram.lastIndexOf(“o”)); // Exibe 40
Namespaces
Em cenários avançados de programação, o conceito de namespaces traz um valioso
mecanismo novo a ActionScript 3.0. Em suma, namespaces são essencialmente
especificadores de acesso sob medida − como public (público), private
(privado), protected (protegido) e internal (interno)− exceto
com nomes que você escolher. Namespaces permitem que você controle a visibilidade
de suas propriedades e métodos até o ponto de desprezar estruturas de pacotes de
programas. Eles também permitem que você qualifique membros sob vários estilos.
Como exemplo rápido, você poderia desenvolver um aplicativo AIR que desempenhe
um comportamento, enquanto uma conexão de Internet está presente, e outro quando
não houver conexão. Utilizando namespaces, você pode definir versões múltiplas do
Uma nota de atenção: porque os valores uint são sempre positivos, preste
atenção quando tentar subtrair um uint em território negativo. Um uint
vai por volta de 4.294.967.295, se você subtrair passando de zero, como o
código seguinte demonstra.
var n:uint = 0;
trace(n); // Exibe 0
n--;
trace(n); // Exibe 4294967295
Até o momento da publicação deste livro, Flash Lite ainda não suporta
ActionScript 3.0, devido ao processador próprio e limitações de memória
de dispositivos móveis. As funções detalhadas aqui se aplicam a Flash
Player 9 (e superior) e AIR, mas não se aplicam a Flash Lite até que o
tempo de execução acrescente suporte para ActionScript 3.0.
Pelo fato de ActionScript 3.0 confiar em uma nova máquina virtual, é garantido que
se faça uma ruptura limpa no modo em que manipula eventos. Com uma pequena
exceção (discutida no Capítulo 4), o controle de evento agora está consolidado, através
da placa, em um modo simples e consistente: o método EventDispatcher.
addEventListener(). Este mecanismo é baseado no W3C’s Document Object
Model (DOM) Level 3 Events Specification — Modelo de Objeto de Documento Nível 3
Especificação de Eventos — (http://www.w3.org/TR/DOM-Level-3-Events/). Isso significa
que em ActionScript 3.0, a sintaxe de controle de eventos é a mesma em quase todos os
casos, não importando se o executor de evento é um botão, um clipe de áudio ou um
objeto carregador para arquivos XML ou JPEG. A estrutura básica se parece com isto:
eventDispatchingObject.addEventListener(
EventType,
functionToPerform
);
• addChild()
• addChildAt()
• contains()
• getChildAt()
• getChildByName()
• getChildIndex()
• removeChild()
• removeChildAt()
• setChildIndex()
• swapChildren()
• swapChildtenAt()
Versão
Flash Player Mudanças notáveis
9.0.16.0 ActionScript 3.0, inclindo exceções de tempo de execução e comando de erros, classes
fechadas, fechamento de métodos, ECMAScript para XML (E4X), regex, namespaces,
novos tipos primitivos, evento modelo DOM3, lista de exibição APIs, novo som APIs e
dados binários e soquetes.
9.0.28.0 Suporte para sistema operacional Windows Vista. Acréscimo de constante de eventos
ADDED_TO_STAGE e REMOVED_FROM_STAGE, para deixar um monitor
DisplayObject, e saber quando pode, ou não, acessar sua propriedade stage.
Aumentos de segurança.
9.0.45.0 Reparo de defeitos e melhorias para Adobe Flash CS3 Professional. Afeta apenas
plataformas Windows e Macintosh.
9.0.115.0 Vídeo H.264 e High Efficiency AAC (HE-AAC) suporte de codificador de áudio.
Aceleração de Hardware, conversão de hardware, decodificação de vídeo de exibição
múltitpla e conversão de imagem realçada. O cache Flash Player ativa componentes
comuns, tais como Flex Framework, para ser armazenado localmente e, então, usado
por qualquer SWF de qualquer domínio. O armazenamento Flash Media Server
mantém fluxo de armazenamento, enquanto um fluxo é pausado.
Uma lista completa com todas as notas de versão de Flash Player, incluindo
correção de defeitos, pode ser encontrada em: http://www.adobe.com/support/
documentation/en/flashplayer/releasenotes.html.
Se a maior parte desse código existe em classes velhas, seu projeto provavelmente
envolveria mais do que falar bobagens de ActionScript. Ainda que a probabilidade
signifique que você passará mais tempo em migração de código (pois há mais disso!),
o fato de seu código estar separado significa que você pode testar e revisar cada classe
individualmente. Em ambos os casos, este livro lhe ajudará a tomar seu rumo.