Escolar Documentos
Profissional Documentos
Cultura Documentos
0 no Flash
Marcas comerciais
1 Step RoboPDF, ActiveEdit, ActiveTest, Authorware, Blue Sky Software, Blue Sky, Breeze, Breezo, Captivate, Central,
ColdFusion, Contribute, Database Explorer, Director, Dreamweaver, Fireworks, Flash, FlashCast, FlashHelp, Flash Lite,
FlashPaper, Flash Video Encoder, Flex, Flex Builder, Fontographer, FreeHand, Generator, HomeSite, JRun, MacRecorder,
Macromedia, MXML, RoboEngine, RoboHelp, RoboInfo, RoboPDF, Roundtrip, Roundtrip HTML, Shockwave, SoundEdit,
Studio MX, UltraDev e WebHelp são marcas comerciais registradas ou marcas comerciais da Macromedia, Inc. e podem estar
registradas nos Estados Unidos ou em outras jurisdições, inclusive internacionais. Outros nomes de produtos, logotipos, designs,
títulos, palavras ou frases mencionados nesta publicação podem ser marcas comerciais, marcas de serviço ou nomes comerciais da
Macromedia, Inc. ou de outras entidades e podem estar registrados em certas jurisdições, inclusive internacionais.
Informações de terceiros
Este guia contém links para sites da Web de terceiros que não estão sob o controle da Macromedia. Nesses casos, a Macromedia
não é responsável pelo conteúdo de nenhum site vinculado. Se acessar um dos sites da Web de terceiros mencionados neste guia,
você estará assumindo os riscos inerentes. A Macromedia oferece esses links apenas como uma conveniência, e a inclusão de um
link não significa que a Macromedia apóia ou aceita qualquer responsabilidade pelo conteúdo apresentado nos sites de terceiros.
Navegador Opera ® Copyright © 1995-2002 Opera Software ASA e seus fornecedores. Todos os
direitos reservados.
O vídeo Macromedia Flash 8 possui tecnologia de vídeo On2 TrueMotion. © 1992-2005 On2 Technologies, Inc. Todos os
direitos reservados. http://www.on2.com.
Visual SourceSafe é uma marca comercial ou comercial registrada da Microsoft Corporation nos Estados Unidos e/ou em outros
países.
Copyright © 2005 Macromedia, Inc. Todos os direitos reservados. Este manual não pode ser copiado, fotocopiado,
reproduzido, traduzido ou convertido em nenhum formato eletrônico ou que possa ser lido por máquina, por inteiro ou
em parte, sem o consentimento prévio por escrito da Macromedia, Inc. Não obstante o precedente, o proprietário ou
usuário autorizado de uma cópia válida do software com que este manual foi fornecido pode imprimir uma cópia deste
manual a partir de uma versão eletrônica com a finalidade única de ele próprio ou um usuário autorizado aprender a usar
este software, desde que nenhuma parte deste manual seja impressa, reproduzida, distribuída, revendida ou transmitida
para qualquer outro fim, incluindo, sem limitação, fins comerciais, como vendas de cópias desta documentação ou
fornecimento de serviços de suporte pré-pagos.
Agradecimentos
Gerenciamento de projetos: Sheila McGinn
Criação do texto: Jen deHaan; Peter deHaan, Joey Lott
Editora geral: Rosana Francescato
Editora chefe: Lisa Stanziano
Edição: Linda Adler, Geta Carlson, Evelyn Eldridge, John Hammett, Mary Kraemer, Noreen Maher, Jessie Wood, Anne Szabla
Gerenciamento de produção: Patrice O’Neill, Kristin Conradi, Yuko Yagi
Projeto de mídia e produção: Adam Barnett, Aaron Begley, Paul Benkman. John Francis, Geeta Karmarkar, Masayo Noda,
Paul Rangel, Arena Reed, Mario Reynoso
Agradecimentos especiais a Jody Bleyle, Mary Burger, Lisa Friendly, Stephanie Gowin, Bonnie Loo, Mary Ann Walsh, Erick Vera,
aos testadores beta e a toda a equipe de engenharia e controle de qualidade do Flash e do Flash Player.
Primeira edição: Setembro de 2005
Macromedia, Inc.
601 Townsend St.
San Francisco, CA 94103
Conteúdo
Introdução. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Público-alvo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Requisitos de sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Atualizando arquivos XML para Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Sobre a documentação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Recursos adicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3
Capítulo 4: Dados e tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . 75
Sobre dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Sobre tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Sobre variáveis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Organizando dados em objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
Sobre a conversão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
4 Conteúdo
Capítulo 9: Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Sobre interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331
Criando interfaces como tipos de dados. . . . . . . . . . . . . . . . . . . . . . . . 337
Noções básicas sobre herança e interfaces . . . . . . . . . . . . . . . . . . . . . 339
Exemplo: Usando interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Exemplo: Criando uma interface complexa . . . . . . . . . . . . . . . . . . . . . 342
Conteúdo 5
Sobre o layout e a formatação de texto . . . . . . . . . . . . . . . . . . . . . . . . 439
Formatando texto com estilos CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . .447
Usando texto em formato HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Exemplo: Criando texto de rolagem . . . . . . . . . . . . . . . . . . . . . . . . . . . .475
Sobre seqüências de caracteres e a classe String. . . . . . . . . . . . . . . . 477
6 Conteúdo
Capítulo 16: Trabalhando com dados externos . . . . . . . . . . . . . 663
Enviando e carregando variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
Usando HTTP para conectar a scripts do servidor . . . . . . . . . . . . . . . 668
Sobre upload e download de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . 674
Sobre XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Enviando mensagens para o Flash Player e a partir deste . . . . . . . . 692
Sobre a API External . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
Conteúdo 7
Apêndice E: Programação orientada a objeto com
o ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Sobre o ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Criando um objeto personalizado no ActionScript 1.0 . . . . . . . . . . . . 831
Atribuindo métodos a um objeto personalizado no
ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .832
Definindo métodos manipuladores de eventos no
ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .834
Criando herança no ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . .836
Adicionando propriedades getter/setter a objetos no
ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
Usando as propriedades do objeto Function no ActionScript 1.0 . .838
Índice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
8 Conteúdo
Introdução
Público-alvo
Este manual pressupõe que você já tenha instalado o Flash Basic 8 ou o Flash Professional 8 e
saiba como usar a interface de usuário.É preciso que saiba posicionar objetos no Stage e
manipulá-los no ambiente de criação do Flash. Se já tiver usado uma linguagem de criação, o
ActionScript lhe parecerá familiar. No entanto, se for iniciante em programação, saiba que os
fundamentos do ActionScript são fáceis de aprender. Você pode começar com comandos
simples e criar mais complexidade com o tempo. Pode adicionar muita interatividade aos seus
arquivos sem precisar aprender (ou escrever) muito código.
Requisitos de sistema
O ActionScript 2.0 não tem qualquer requisito de sistema além do Flash 8 .
9
Este manual pressupõe que você esteja utilizando as configurações de publicação padrão para
os arquivos do Flash: Flash Player 8 e ActionScript 2.0. Se você alterar qualquer uma dessas
configurações, as explicações e exemplos de código apresentados na documentação poderão
não funcionar corretamente. Caso desenvolva aplicativos para versões anteriores do Flash
Player, consulte o Apêndice D, “Criando scripts para versões anteriores do Flash Player”, na
página 825.
Sobre a documentação
Este manual oferece uma visão geral da sintaxe do ActionScript e informações sobre como usá-
lo quando trabalhar com diferentes tipos de objetos. Para obter detalhes sobre a sintaxe e o uso
de cada elemento da linguagem, consulte o ActionScript 2.0 Language Reference.
Para obter mais informações, consulte os seguintes tópicos:
■ “Visão geral do manual Aprendendo ActionScript 2.0” na página 11
■ “Sobre os arquivos de exemplo” na página 15
■ “Termos usados neste documento” na página 13
■ “Copiar e colar código” na página 13
10 Introdução
Visão geral do manual Aprendendo ActionScript 2.0
A lista a seguir resume o conteúdo deste manual:
■ O Capítulo 1, “Novidades do ActionScript no Flash 8,” descreve recursos que são novos
no ActionScript, alterações no compilador e no depurador e o novo modelo de
programação para a linguagem ActionScript 2.0.
■ O Capítulo 2, “Escrevendo e editando o ActionScript 2.0,” descreve recursos do editor do
ActionScript dentro do Flash que facilitam a escrita de código.
■ O Capítulo 3, “Sobre o ActionScript,” descreve o que é a linguagem ActionScript e
detalha como escolher qual versão utilizar.
■ O Capítulo 4, “Dados e tipos de dados,” descreve a terminologia e os conceitos básicos
sobre dados, tipos de dados e variáveis. Esses conceitos serão usados em todo o manual.
■ O Capítulo 5, “Fundamentos da sintaxe e da linguagem,” descreve a terminologia e os
conceitos básicos da linguagem ActionScript. Esses conceitos serão usados em todo o
manual.
■ O Capítulo 6, “Funções e métodos,” descreve como escrever diferentes tipos de funções e
métodos e como usá-los no seu aplicativo.
■ O Capítulo 7, “Classes,” descreve como criar classes e objetos personalizados no
ActionScript. Esse capítulo também lista as classes internas do ActionScript e oferece uma
visão geral de como utilizá-las para acessar recursos avançados do ActionScript.
■ O Capítulo 8, “Herança,” descreve a herança na linguagem ActionScript e como estender
classes internas ou personalizadas.
■ O Capítulo 9, “Interfaces,” descreve como criar interfaces e trabalhar com elas no
ActionScript.
■ O Capítulo 10, “Manipulando eventos,” descreve várias formas de manipular eventos:
métodos manipuladores de eventos, ouvintes de eventos e manipuladores de eventos de
botão e de clipe de filme.
■ O Capítulo 11, “Trabalhando com clipes de filme,” descreve clipes de filme e o
AcionScript que você pode usar para crontrolá-los.
■ O Capítulo 12, “Trabalhando com texto e seqüências de caracteres,” descreve os diferentes
modos como você pode controlar o texto e as seqüências de caracteres no Flash e inclui
informações sobre formatação de texto e o FlashType (renderização de texto avançada,
como texto sem serrilhado).
■ O Capítulo 13, “Animação, filtros e desenhos,” descreve como criar animação e imagens
baseadas em código, adicionar filtros a objetos e desenhar usando o ActionScript.
Sobre a documentação 11
■ O Capítulo 14, “Criando interação com o ActionScript,” descreve alguns modos simples
de criar aplicativos mais interativos, incluindo o controle quando os arquivos SWF são
executados e a criação de ponteiros personalizados e de controles de som.
■ O Capítulo 15, “Trabalhando com imagens, som e vídeo,” descreve como importar
arquivos de mídia externos, como imagens de bitmap, arquivos MP3, arquivos Flash
Video (FLV) e outros arquivos SWF, nos aplicativos Flash. Esse capítulo também oferece
uma visão geral de como trabalhar com o vídeo nos aplicativos e como criar animações
para o carregamento da barra de progresso.
■ O Capítulo 16, “Trabalhando com dados externos,” descreve como processar dados de
fontes externas usando scripts de servidor ou de cliente nos aplicativos. Esse capítulo
descreve como integrar os dados com os aplicativos.
■ O Capítulo 17, “Noções básicas de segurança,” explica a segurança no Flash Player, na
medida em que se relaciona com o trabalho com arquivos SWF localmente no disco
rígido. Esse capítulo também explica questões de segurança entre domínios e como
carregar dados de servidores ou através de domínios.
■ O Capítulo 18, “Depurando aplicativos,” descreve o depurador do ActionScript dentro do
Flash, que facilita a escrita de aplicativos.
■ O Capítulo 19, “Melhores práticas e convenções de codificação para ActionScript 2.0,”
explica as melhores práticas para usar o Flash e para escrever o ActionScript. Esse capítulo
também lista convenções de codificação padronizadas, como variáveis de atribuição de
nome e outras convenções.
■ O Apêndice A, “Mensagens de erro,” lista as mensagens de erro que o compilador do Flash
pode gerar.
■ O Apêndice B, “Operadores Flash 4 obsoletos,” lista todos os operadores obsoletos do
Flash 4 e sua associatividade.
■ O Apêndice C, “Teclas do teclado e valores de códigos de teclas,” lista todas as teclas de
um teclado padrão e os valores de códigos de teclas ASCII correspondentes usados para
identificar as teclas no ActionScript.
■ O Apêndice D, “Criando scripts para versões anteriores do Flash Player,” fornece diretrizes
para ajudá-lo a criar scripts sintaticamente corretos para a versão do Flash Player desejada.
■ O Apêndice E, “Programação orientada a objeto com o ActionScript 1.0,” fornece
informações sobre o uso do modelo de objeto ActionScript 1.0 para escrver scripts.
■ O Apêndice F, “Terminologia,” lista a terminologia comumente usada ao trabalhar com a
linguagem ActionScript e fornece descrições para os termos.
Este manual explica como usar a linguagem ActionScript. Para obter informações sobre os
elementos de linguagem propriamente ditos, consulte o ActionScript 2.0 Language Reference.
12 Introdução
Convenções tipográficas
Este manual usa as seguintes convenções tipográficas:
■ Fonte Code indica código do ActionScript.
■ Fonte Code negrito, normalmente em um procedimento, indica código que você
precisa modificar ou adicionar a um código já adicionado ao arquivo FLA. Em alguns
casos, pode ser usado para realçar o código a ser observado.
■ Texto em negrito indica dados que você precisa digitar na interface de usuário, como
nome de arquivo ou nome de instância.
■ Texto em itálico indica um novo termo definido no texto que se segue. Em um caminho de
arquivo, pode indicar um valor que deve ser substituído (por exemplo, por um nome de
diretório no seu próprio disco rígido).
Sobre a documentação 13
Você pode identificar se os caracteres de aspas são especiais quando eles não são codificados
por cores de forma correta. Ou seja, se nenhuma seqüência de caracteres mudar de cor no
editor de cores, será preciso substituir os caracteres especiais por caracteres de aspas retas
comuns. Se você digitar um caractere de aspa simples ou dupla diretamente no editor do
ActionScript, sempre digitará um caractere de aspa reta. O compilador (quando você testa ou
publica um arquivo SWF) lança um erro e permite que você saiba que há um tipo errado
(marcas de aspas especiais ou curvas) de caracteres no seu código.
N OT A
Você também pode encontrar aspas especiais se colar o ActionScript de outros locais,
como de uma página da Web ou um documento do Microsoft Word.
Cuidado com quebras de linha ao copiar e colar código. Ao colar o seu código de alguns
locais, a linha de código poderá se quebrar em um local inapropriado. Certifique-se de que a
codificação de cores da sua sintaxe esteja correta no editor do ActionScript se achar que as
quebras de linha representam um problema. Compare o código do painel Actions (Ações)
com o do painel Help para ver se correspondem. Procure ativar o Word Wrap (quebra
automática de linha) no editor do ActionScript para ajudar a solucionar quebras de linha
excedentes no código (selecione View (Exibir) > Word Wrap (quebra automática de linha) na
janela Script ou Word Wrap no menu pop-up do painel Actions.)
Recursos adicionais
Além deste manual sobre o ActionScript, existem outros sobre outros tópicos do Flash, como
componentes e o Macromedia Flash Lite. Você pode acessar cada manual no painel Help
(Help > Flash Help (Ajuda do Flash)), exibindo o sumário padrão. Clique no botão Clear
(Limpar) para ver os manuais disponíveis; para obter mais informações, consulte “Onde
encontrar documentação sobre outros assuntos” na página 17.
Para obter mais informações sobre outros recursos disponíveis, consulte os seguintes tópicos:
■ “Sobre os arquivos de exemplo” na página 15
■ “Onde encontrar arquivos PDF ou documentação impressa” na página 15
■ “Sobre o LiveDocs” na página 16
■ “Recursos on-line adicionais” na página 17
■ “Onde encontrar documentação sobre outros assuntos” na página 17
14 Introdução
Sobre os arquivos de exemplo
Há vários arquivos de exemplo baseados no ActionScript que são instalados com o Flash. Esses
arquivos de exemplo mostram como o código funciona em um arquivo FLA; geralmente
servem como uma ferramenta de aprendizado bem útil. Os capítulos deste manual muitas
vezes fazem referência a esses arquivos, mas recomendamos que você consulte também a pasta
de arquivos de exemplo do seu disco rígido.
Os arquivos de exemplo incluem arquivos FLA de aplicativo que usam funções comuns do
Flash instaladas com ele. Esses aplicativos foram projetados para apresentar aos novos
desenvolvedores do Flash as capacidades dos aplicativos Flash assim como para mostrar aos
desenvolvedores avançados como funcionam os recursos do Flash no contexto.
Você pode encontrar os arquivos de origem de exemplo com foco no ActionScript na pasta
Samples (Exemplos) do disco rígido.
■ No Windows, navegue até a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\.
■ No Macintosh, navegue até Macintosh HD/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/.
Você verá como são úteis os seguintes arquivos de exemplo com foco em componentes, pois
eles contêm vários códigos ActionScript. Eles também podem ser encontrados na pasta
Samples do disco rígido:
■ No Windows, navegue até a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\Components\.
■ No Macintosh, navegue até Macintosh HD/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/Components/.
Você também pode encontrar arquivos de exemplo adicionais para download na Internet. A
página da Web a seguir contém links e descrições de arquivos de exemplo adicionais:
www.macromedia.com/go/flash_samples/.
Recursos adicionais 15
Muitas vezes você também pode adquirir a documentação impressa. Para obter informações
atualizadas, vá até o site de suporte da documentação e selecione Flash Basic 8 ou Flash
Professional 8.
Sobre o LiveDocs
Você pode acessar a documentação no site LiveDocs ou pelo painel Help. O site LiveDocs
contém todas as páginas de ajuda do Flash e pode conter comentários que esclareçam,
atualizem ou corrijam partes da documentação. Clique em View Comments (Exibir
comentários) em LiveDocs na parte inferior de uma página do painel Help para exibir a
página equivalente no site LiveDocs. Vá até http://livedocs.macromedia.com para ver uma
lista de toda a documentação disponível no formato LiveDocs.
Escritores técnicos monitoram o site LiveDocs. Uma das vantagens do LiveDocs é ver
comentários que esclarecem a documentação ou corrigir erros ou problemas que surgem após
o lançamento de um software. Não é no LiveDocs que você faz solicitações de ajuda, como
perguntas sobre seu código que não funciona, comentários sobre problemas com software ou
instalação ou perguntas sobre como criar algo com o Flash. Nele você fornece informações
sobre a documentação (por exemplo, você aponta uma frase ou parágrafo que requer
esclarecimento).
Quando você clica no botão para adicionar um comentário sobre o LiveDocs, há diversos
pontos sobre os tipos de comentários que são aceitáveis no sistema. Leia essas diretrizes
atentamente para que seu comentário não seja removido do site.
Se tiver alguma dúvida sobr eo Flash, faça sua pergunta nos fóruns da Web da Macromedia:
www.macromedia.com/support/forums/. Os fóruns da Web são o melhor local para fazer
perguntas, pois há vários funcionários da Macromedia lá, voluntários da equipe Macromedia,
gerentes e membros de grupos de usuário da Macromedia e até escritores técnicos que
monitoram esses fóruns.
Engenheiros não monitoram o sistema LiveDocs, mas a lista de tarefas do Flash. Se achar que
encontrou um erro (bug) no software ou se quiser solicitar um aprimoramento para o Flash,
preencha o formulário em www.macromedia.com/go/wish. Se você relatar o bug ou a
solicitação de aprimoramento no LiveDocs, eles não serão adicionados de forma oficial ao
banco de dados de bugs. Use o formulário apropriado se quiser que um engenheiro dê atenção
ao bug reportado ou à sua solicitação.
Lembre-se de dar atenção aos caracteres especiais e às quebras de linha quando colar da Web,
incluindo do LiveDocs. A Macromedia vem se esforçando para remover todos os caracteres
especiais dos exemplos de código, mas, se você tiver dificuldades para colar o código, consulte
“Copiar e colar código” na página 13.
16 Introdução
Recursos on-line adicionais
Existem vários recursos on-line que oferecem várias instruções, ajuda e orientação para
facilitar o uso do Macromedia Flash 8. Consulte com freqüência os seguintes sites para obter
atualizações:
O site The Macromedia Developer Center (www.macromedia.com/devnet) é atualizado
regularmente com as informações mais recentes sobre o Flash, além de oferecer
aconselhamentos de usuários experientes, tópicos avançados, exemplos, dicas, tutoriais
(incluindo tutoriais com várias partes) e outras atualizações. Visite com freqüência o site da
Web para saber das últimas novidades sobre o Flash e como obter o máximo do programa.
O site The Macromedia Flash Support Center (www.macromedia.com/support/flash)
fornece TechNotes (Notas Técnicas), atualizações de documentação e links para recursos
adicionais na comunidade Flash.
O site The Macromedia Weblogs (http://weblogs.macromedia.com) fornece uma lista dos
weblogs (também chamados de blogs) de funcionários e da comunidade Macromedia .
Os fóruns da Web da Macromedia (http://webforums.macromedia.com) oferecem vários
fóruns para perguntas específicas sobre o Flash, seus aplicativos ou a linguagem ActionScript.
Os fóruns são monitorados por voluntários da equipe Macromedia e muitas vezes são visitados
por funcionários de lá também. Se não souber a quem recorrer ou como resolver um
problema, comece por um fórum do Flash.
O site The Macromedia Community (www.macromedia.com/community) hospeda
regularmente Macrochats, uma série de apresentações ao vivo sobre uma variedade de tópicos
feitas por funcionários ou membros da comunidade Macromedia. Consulte regulamente o site
à procura de atualizações e para registrar-se nos Macrochats.
Recursos adicionais 17
18 Introdução
CAPÍTULO 1
Novidades do ActionScript
no Flash 8
1
O Macromedia Flash Basic 8 e o Macromedia Flash Professional 8 oferecem vários
aprimoramentos que facilitam a criação de scripts mais eficientes com uso da linguagem
ActionScript. Os novos recursos, analisados neste capítulo, incluem novos elementos de
linguagem (consulte “Acréscimos à linguagem ActionScript” na página 22), ferramentas de
edição aprimoradas (consulte “Alterações de edição do ActionScript” na página 28), alterações
no modelo de segurança e outros aprimoramentos do ActionScript relacionados à ferramenta
de criação.
Para obter mais informações, consulte os seguintes tópicos:
Novidades do ActionScript 2.0 e do Flash 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Alterações no modelo de segurança para arquivos SWF instalados localmente . 29
19
Os recursos a seguir foram adicionados ao Flash Basic 8 e ao Flash Professional 8 (a menos que
explicitado de forma diferente):
■ Os aprimoramentos do editor do ActionScript permitem a exibição de caracteres ocultos
nos scripts. Para obter mais informações, consulte “Exibindo caracteres ocultos”
na página 57.
■ As opções de depuração agora encontram-se disponíveis na janela Script, assim como no
painel Actions, para arquivos do ActionScript.
■ O diretório Configuration que inclui arquivos XML e arquivos de classes está
reorganizado. Para obter detalhes, consulte “Arquivos de configuração instalados com o
Flash 8” na página 69.
■ É possível definir uma preferência para recarregar arquivos de script modificados ao
trabalhar em um aplicativo, o que ajuda a evitar o trabalho com versões mais antigas de
arquivos de script e a substituição de arquivos de script mais novos. Para obter mais
informações, consulte “Sobre as preferências do ActionScript” na página 44.
■ O recurso da janela Script encontra-se disponível no Flash Basic 8 e no Flash Professional
8. Isso significa que você pode criar um arquivo do ActionScript nos dois programas.
■ O Script Assist (Assistência de script), semelhante ao Normal Mode (Modo Normal) em
edições anteriores do Flash, ajuda você a codificar sem que precise ter noções de sintaxe.
Para obter mais informações sobre o Script Assist, consulte “Sobre o Script Assist”
na página 62.
■ É possível carregar novos tipos de arquivos de imagem durante a execução, o que inclui
imagens JPEG progressivas e arquivos GIF e PNG não-animados. Se você carregar um
arquivo animado, o primeiro quadro da animação será exibido.
■ É possível atribuir identificadores de vinculação a arquivos de bitmap e de som
armazenados na biblioteca (Library), o que significa que você pode anexar imagens ao
Stage ou trabalhar com esses recursos em bibliotecas compartilhadas.
■ O cache de bitmap permite o aumento do desempenho dos aplicativos durante a execução
por meio do cache de uma representação de bitmap de suas instâncias. Você pode usar o
ActionScript para acessar essa propriedade. Para obter mais informações, consulte “Sobre
cache de bitmap, rolagem e desempenho” na página 508.
Nas versões anteriores do Flash Player, os arquivos SWF locais podiam interagir com outros
arquivos SWF e carregar dados de qualquer computador remoto ou local sem configurar
definições de segurança. No Flash Player 8, um arquivo SWF não pode fazer conexões com o
sistema de arquivos local e a rede (como a Internet) no mesmo aplicativo sem fazer uma
configuração de segurança. Isso é para sua segurança. Dessa forma, um arquivo SWF não pode
ler arquivos no seu disco rígido e depois enviar o conteúdo deles pela Internet.
A restrição de segurança afeta todo o conteúdo implantado localmente, seja um conteúdo
herdado (um arquivo FLA criado em uma versão anterior do Flash) ou criado no Flash 8.
Usando o Flash MX 2004 ou uma ferramenta de criação anterior, você pode testar um
aplicativo Flash que seja executado localmente e também acesse a Internet. No Flash Player 8,
esse aplicativo agora solicita permissão ao usuário para se comunicar com a Internet.
Escrevendo e editando o
ActionScript 2.0
2
Ao escrever o código ActionScript no Macromedia Flash Basic 8 ou no Macromedia Flash
Professional 8, use o painel Actions (Ações) ou a janela Script. O painel Actions e a janela
Script contêm um editor de código completo (o editor do ActionScript) que inclui referências
de código e sinalização por cores, formatação de código, realce de sintaxe, verificação de
sintaxe, depuração, números de linha, quebra automática de linha e suporte a Unicode em
duas exibições diferentes. Para obter mais informações sobre o editor do ActionScript,
consulte “Usando o painel Actions e a janela Script” na página 36.
Use um dos dois métodos para escrever o código ActionScript no Flash. Você pode criar
scripts que façam parte de seu documento do Flash (ou seja, scripts incorporados ao arquivo
FLA) ou criar scripts externos (scripts ou classes armazenadas em arquivos externos). Não é
possível usar o painel Actions para criar scripts externos.
Use o editor do ActionScript no painel Actions ao criar scripts em um arquivo FLA. O painel
Actions contém o editor do ActionScript em um painel Script e ferramentas de suporte para
facilitar a criação de scripts. Essas ferramentas incluem a caixa de ferramentas Actions (Ações)
que oferece um acesso rápido aos elementos básicos da linguagem ActionScript; o navegador
Script que ajuda na navegação por todos os scripts do documento; e o modo Script Assist
(Assistência de script) que solicita os elementos necessários para a criação de scripts. Para obter
mais informações sobre o painel Actions, consulte “Sobre o painel Actions” na página 37. Para
obter mais informações sobre o Script Assist, consulte “Sobre o Script Assist” na página 62.
Quando precisar criar um script externo, use o editor do ActionScript na janela Script para
criar um novo arquivo do ActionScript. (Você também pode usar o seu editor de texto favorito
para criar um arquivo externo do AS.) Na janela Script, o editor do Action Script inclui
recursos de assistência a código, como referências de código e sinalização por cores, verificação
de sintaxe etc., da mesma forma que no painel Actions. Para obter mais informações sobre a
janela Script, consulte “Sobre a janela Script” na página 38.
31
O Flash oferece assistência adicional a scripts através de comportamentos. Os
comportamentos são funções predefinidas do ActionScript que você pode anexar a objetos no
documento do Flash sem precisar criar o código ActionScript. Para obter mais informações
sobre comportamentos, consulte “Sobre comportamentos” na página 65.
Para obter mais informações sobre como manipular eventos, consulte as seguintes seções:
Sobre o ActionScript e eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Organizando o código ActionScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Usando o painel Actions e a janela Script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Sobre o painel Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Sobre a janela Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Sobre a codificação no painel Actions e na janela Script . . . . . . . . . . . . . . . . . . . . . . 39
Sobre recursos do painel Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Sobre comportamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Sobre as configurações de publicação do ActionScript . . . . . . . . . . . . . . . . . . . . . . . 66
Eventos de clipe
Em um clipe de filme, você pode reagir a diversos eventos de clipe ativados quando o usuário
entra ou sai da cena ou interagir com a cena usando o mouse ou o teclado. Por exemplo, você
pode carregar uma imagem externa SWF ou JPG no clipe de filme quando o usuário entrar na
cena ou permitir que os movimentos do mouse do usuário reposicionem elementos na cena.
Eventos de quadro
Em uma timeline principal ou de clipe de filme, um evento de sistema ocorre quando a
reprodução entra em um quadro-chave — conhecido como evento de quadro. Os eventos de
quadro são úteis para ativar ações baseadas na passagem de tempo (que se movem pela
timeline) ou para interagir com elementos visíveis no momento no Stage. Quando você
adiciona um script a um quadro-chave, ele é executado quando o quadro-chave é alcançado
durante uma reprodução. Os script anexados a um quadro são chamados scripts de quadro.
Uma das utilizações mais comuns dos scripts de quadro é interromper a reprodução quando
um determinado quadro-chave é alcançado. Isso é feito com a função stop(). Selecione um
quadro-chave e adicione a função stop() como um elemento de script no painel Actions.
Ao anexar todos os scripts a elementos individuais, você incorpora todo o código ao arquivo
FLA. Se o compartilhamento de seu código com outros aplicativos do Flash for um requisito
importante para você, use a janela Script ou o seu editor de texto favorito para criar um
arquivo externo do ActionScript (AS).
A criação de um arquivo externo torna o seu código mais modular e bem organizado. À
medida que seu projeto for se desenvolvendo, essa conveniência terá cada vez mais utilidade
do que você imagina. Um arquivo externo ajudará na depuração e também no gerenciamento
do controle de origem caso você esteja trabalhando em um projeto junto com outros
desenvolvedores.
Para usar o código ActionScript contido em um arquivo externo do AS, crie um script no
arquivo FLA e use a instrução #include para acessar o código armazenado externamente,
como mostrado no exemplo a seguir:
#include "../core/Functions.as"
Ao criar o ActionScript no Flash 8, use o painel Actions, a janela Script ou ambos. O uso do
painel Actions ou da janela Script é determinado pelo modo de resposta aos eventos, pelo
modo de organização do código e, principalmente, pelas práticas recomendadas de
codificação.
Para obter mais informações sobre convenções e práticas recomendadas de codificação,
consulte “Convenções de codificação do ActionScript” na página 782.
Outros problemas relacionados a fluxo de trabalho e organização de código deverão ser
considerados quando você usar comportamentos, que são funções predefinidas do
ActionScript (consulte “Sobre comportamentos” na página 65).
Caixa de ferramentas Actions Use esta caixa de ferramentas para pesquisar uma lista
categórica de elementos da linguagem ActionScript (funções, classes, tipos etc.) e, em
seguida, insira-os no painel Script. Para inserir um elemento de script no painel Script,
clique duas vezes nele ou arraste-o diretamente para esse painel. Você também pode
adicionar elementos de linguagem aos scripts usando o botão Add (+) (Adicionar)
localizado na barra de ferramentas do painel Actions. Para obter mais informações,
consulte “Sobre as barras de ferramentas do painel Actions e da janela Script”
na página 40.
Navegador Script Exibe uma lista hierárquica de elementos do Flash (clipes de filme,
quadros e botões) contendo scripts. Use o navegador Script para se mover rapidamente
entre todos os scripts do documento do Flash.
Se você clicar em um item no navegador Script, o script associado a esse item aparecerá no
painel Script e a reprodução passará para essa posição na timeline. Se você clicar duas vezes
em um item do navegador Script, o script ficará preso (travado no lugar). Para obter mais
informações, consulte “Prendendo scripts no painel Actions” na página 63.
Algumas opções a seguir estão localizadas apenas no painel Actions. Esses recursos
estão marcados como Somente no painel Actions.
Add a new item to the script (Adicionar um novo item ao script) Exiba todos os
elementos de linguagem também existentes na caixa de ferramentas do ActionScript. A
seleção de um item na lista categorizada de elementos de linguagem adiciona-o ao script.
Find (Localizar) Localize e substitua qualquer texto no código ActionScript. Para obter
mais informações, consulte “Usando a ferramenta Find” na página 58.
Insert target path (Inserir caminho de destino) Somente no painel Actions. Ajuda na
configuração de um caminho de destino relativo ou absoluto de uma ação no script. Para
obter mais informações, consulte “Inserindo caminhos de destino” na página 65.
Check Syntax (Verificar sintaxe) Verifique erros na sintaxe do script atual. Os erros de
sintaxe são listados no painel Output (Saída). Para obter mais informações, consulte
“Verificando sintaxe e pontuação” na página 59.
Auto Format (Formatação automática) Formate seu script para uma sintaxe de
codificação apropriada e para melhorar a legibilidade. Você pode definir as preferências de
formatação automática na caixa de diálogo Preferences (Preferências), disponível no menu
Edit (Editar) ou no menu pop-up do painel Actions. Para obter mais informações,
consulte “Formatando código” na página 53.
Show Code Hint (Mostrar referência de código) Se tiver desativado a referência de
código automática, você poderá usar o comando Show Code Hint para exibir
manualmente uma referência de código relativa à linha de código na qual estiver
trabalhando. Para obter mais informações, consulte “Sobre o Script Assist” na página 62.
Debug Options (Opções de depuração) Defina e remova pontos de interrupção no
script, para que, ao depurar seu documento do Flash, você possa parar e, em seguida,
percorrer o script linha por linha. As opções de depuração agora estão disponíveis na janela
Script e também no painel Actions, mas somente para arquivos do ActionScript. Essa
opção está desativada para arquivos do ActionScript Communication e do Flash
JavaScript. Para obter mais informações sobre como depurar documentos do Flash,
consulte “Depurando scripts” na página 745. Para obter informações sobre como definir e
remover pontos de interrupção, consulte “Definindo e removendo pontos de interrupção”
na página 755.
Algumas opções a seguir estão localizadas apenas no painel Actions. Esses recursos
estão marcados como Somente no painel Actions.
Para assegurar a ativação das referências de código, é necessário que as opções de Code Hints
(Referências de código) estejam selecionadas na caixa de diálogo Preferences do ActionScript.
Para obter mais informações, consulte “Sobre o painel Actions” na página 37.
Se nenhuma referência de código for exibida, verifique se você não desativou Code
Hints nas preferências do ActionScript (Edit > Preferences (Windows) ou Flash >
Preferences (Macintosh)) e clique em ActionScript na lista Category). Para exibir
referências de código para uma variável ou um objeto criado, verifique se você
atribuiu nome à variável ou ao objeto corretamente (consulte “Sobre o uso de sufixos
para ativar referências de código” na página 51) ou se usou a atribuição de tipo
estrita para a variável ou o objeto (consulte “Sobre a atribuição de tipo a objetos para
ativar referências de código” na página 51).
2. Para percorrer as referências de código, use as teclas de seta para cima e de seta para baixo.
3. Para selecionar um item no menu, pressione Enter ou Tab ou clique duas vezes no item.
4. Para desconsiderar a referência de código, siga um destes procedimentos:
■ Selecione um dos itens de menu.
■ Clique acima ou abaixo da janela de menu.
■ Digite um parêntese de fechamento [)] se já tiver digitado um parêntese de abertura
[(].
■ Pressione Escape.
Assim que você digita o ponto (.), o Flash exibe uma lista de métodos e propriedades
disponíveis para objetos Array em um menu pop-up, porque você digitou a variável como se
fosse um array. Para obter mais informações sobre como atribuir tipos de dados, consulte
“Sobre a atribuição de tipos de dados e a atribuição estrita de tipos de dados” na página 85.
Para obter informações sobre como usar referências de código quando elas aparecerem,
consulte “Usando referências de código” na página 48.
Button _btn
ContextMenu _cm
ContextMenuItem _cmi
Date _date
Error _err
LoadVars _lv
LocalConnection _lc
MovieClip _mc
MovieClipLoader _mcl
PrintJob _pj
NetConnection _nc
NetStream _ns
SharedObject _so
Sound _sound
String _str
TextField _txt
TextFormat _fmt
Video _video
XML _xml
XMLNode _xmlnode
XMLSocket _xmlsocket
Para obter informações sobre como usar referências de código quando elas aparecerem,
consulte “Usando referências de código” na página 48.
Entretanto, a Macromedia recomenda que você utilize a atribuição estrita de tipos de dados
(consulte “Sobre a atribuição de tipo a objetos para ativar referências de código” na página 51)
ou sufixos (consulte “Sobre o uso de sufixos para ativar referências de código” na página 51)
em vez dessa técnica, porque eles ativam automaticamente as referências de código e tornam o
código mais compreensível. Para obter mais informações sobre como usar referências de
código, consulte “Usando referências de código” na página 48.
Formatando código
Você pode especificar configurações para determinar se o código será formatado e recuado
automática ou manualmente. Você também pode optar por usar o mapeamento dinâmico de
fontes, que assegura o uso de fontes corretas durante o trabalho com texto multilíngüe.
Esses atalhos são diferentes dos atalhos de teclado que iniciam determinados
comandos de menu.
Por exemplo, se você estiver trabalhando no painel Script e pressionar Escape+d+o, o código a
seguir será inserido no seu script:
do {
} while ();
O ponto de inserção é inserido imediatamente após a palavra while, para que você possa
começar a digitar sua condição. Da mesma forma, se você pressionar Escape+c+h, o código a
seguir será inserido no script, e o ponto de inserção será posicionado entre os parênteses [()],
para que você possa começar a digitar a condição:
catch () {
}
Para aprender (ou ser lembrado de) quais comandos possuem teclas de atalho de Escape,
exiba-os ao lado dos elementos na caixa de ferramentas do ActionScript.
espaço de um byte .
espaço de bytes l
duplos
tabulação >>
quebra de linha
Quando você usa um aplicativo em um idioma que não está em inglês em um sistema em
inglês, o comando Test Movie (Testar filme) (consulte “Depurando scripts”
na página 745) falha quando qualquer parte do caminho do arquivo SWF possui
caracteres que não podem ser representados usando o esquema de codificação MBCS
(Multibyte Character Sets, conjuntos de caracteres de vários bytes). Por exemplo,
caminhos em japonês, que funcionam em um sistema em japonês, não funcionarão em
um sistema em inglês. Todas as áreas do aplicativo que usarem o exibidor externo
estarão sujeitas a esta limitação.
Se o conteúdo no painel Script não mudar para refletir o local selecionado na timeline, o
painel Script provavelmente estará exibindo um script preso. Clique na guia à esquerda
localizada na parte inferior esquerda do painel Script para exibir o ActionScript
associado ao seu local na timeline.
Sobre comportamentos
Os comportamentos são funções predefinidas do ActionScript que você pode anexar a objetos
no documento do Flash sem precisar criar o código ActionScript. Eles oferecem uma
funcionalidade predefinida do ActionScript, como navegação por quadros, carregamento de
arquivos SWF e JPEGs externos, controle da ordem de empilhamento dos clipes de filme,
além de uma funcionalidade que permite arrastar clipes de filme.
Os comportamentos podem ser usados de modo conveniente na criação do aplicativo Flash —
como uma forma de evitar a escrita do ActionScript ou, inversamente, como um meio de
aprender sobre o funcionamento do ActionScript em determinadas situações.
Sobre comportamentos 65
Eles somente estão disponíveis quando você trabalha em um documento do Flash, e não em
um arquivo de script externo. Em geral, você seleciona um objeto de ativação em seu
documento, um clipe de filme ou um botão, seleciona o botão Add (Adicionar) no painel
Behaviors (Comportamentos) para exibir os comportamentos disponíveis e, em seguida,
seleciona o comportamento desejado, como mostrado no exemplo a seguir:
Sobre o ActionScript 3
Os recursos OOP (object-oriented programming, programação orientada a objeto) no
ActionScript 2.0 tem como base a proposta ECMAScript 4 desenvolvidas no momento pela
ECMA TC39-TG1 (consulte www.mozilla.org/js/language/es4/index.html). Como a
proposta ECMA-4 ainda não se tornou padrão e está em processo de alteração, o
ActionScript 2.0 baseia-se nessa especificação com menos rigidez.
O ActionScript 2.0 oferece suporte a todos os elementos padrão da linguagem ActionScript;
ele permite escrever scripts que atendem melhor aos padrões usados em outras linguagens
orientadas a objeto, como Java. O ActionScript 2.0 deve interessar principalmente a
desenvolvedores de Flash intermediários ou avançados autores de aplicativos que precisam da
implementação de classes e subclasses. O ActionScript 2.0 também permite que você declare o
tipo de objeto de uma variável ao criá-la (consulte “Sobre a atribuição de tipos de dados e a
atribuição estrita de tipos de dados” na página 85) e fornece erros de compilador bem
aprimorados (consulte Apêndice A, “Mensagens de erro”, na página 809).
As principais considerações sobre o ActionScript 2.0 incluem os seguintes pontos:
■ Scripts que usam o ActionScript 2.0 para definir classes ou interfaces devem ser
armazenados como arquivos de script externos, com uma única classe definida em cada
script, ou seja, classes e interfaces não podem ser definidas no painel Actions (Ações).
■ Você pode importar arquivos de classes individuais implicitamente (armazenando-os em
um local especificado por caminhos de pesquisa globais ou específicos de documentos e
depois utilizando-os em um script) ou explicitamente (usando o comando import). É
possível importar pacotes (coleções de arquivos de classe em um diretório) usando
caracteres curinga.
71
■ Os aplicativos desenvolvidos com o ActionScript 2.0 são suportados pelo Flash Player 6 e
versões posteriores.
A T E NÇ Ã O
Para obter mais informações sobre como usar o ActionScript 2.0 para escrever programas
orientados a objeto no Flash, consulte o Capítulo 7, “Classes”, na página 239.
Embora a Macromedia recomende o uso do ActionScript 2.0, você pode continuar usando a
sintaxe do ActionScript 1.0, especialmente se estiver realizando um trabalho mais tradicional
do Flash, por exemplo, uma animação simples, que não requer a interação do usuário.
O que é ActionScript
Os principais recursos do ActionScript 2.0 incluem:
Modelo familiar OOP (Object-Oriented Programming, Programação orientada a
objeto) O recurso primário do ActionScript 2.0 é um modelo familiar para a criação de
programas orientados a objeto. O ActionScript 2.0 implementa vários conceitos e palavras-
chave orientados a objeto, como class, interface e packages, que parecerão familiares se você já
tiver programado com Java.
O modelo OOP fornecido pelo ActionScript 2.0 é uma “formalização sintática” do método de
encadeamento de protótipo usado em versões anteriores do Macromedia Flash para criar
objetos e estabelecer herança. Com o ActionScript 2.0, é possível criar classes personalizadas e
estender as classes internas do Flash.
Atribuição estrita de tipos de dados O ActionScript 2.0 também permite especificar
explicitamente os tipos de dados para variáveis, parâmetros de função e tipos de retorno de
função. Por exemplo, o código a seguir declara uma variável chamada userName de tipo String
(um tipo de dados interno do ActionScript, ou classe).
var userName:String = "";
72 Sobre o ActionScript
Ao usar o ActionScript 2.0, verifique se as configurações de publicação para o arquivo FLA
especificam ActionScript 2.0. Esse é o padrão para arquivos criados em Flash MX 2004 e
Flash 8. Entretanto, se você abrir um arquivo FLA antigo que usa ActionScript 1.0 e começar
a reescrevê-lo em ActionScript 2.0, altere suas configurações de publicação para
ActionScript 2.0. Caso contrário, seu arquivo FLA não será compilado corretamente e não
serão gerados erros.
74 Sobre o ActionScript
CAPÍTULO 4
Sobre dados
Dados referem-se a números, seqüências de caracteres e outras informações que você pode
manipular no Flash. O uso de dados é geralmente essencial durante a criação de aplicativos ou
sites da Web. Você também pode usar dados ao criar gráficos avançados e animação gerada
com script e possivelmente terá de manipular os valores usados para controlar seus efeitos.
É possível definir dados em variáveis no Flash ou carregar dados de sites ou arquivos externos
usando XML, serviços da Web, classes internas do ActionScript etc. Você pode armazenar
dados em um banco de dados e representar as informações de diversas maneiras em um
arquivo SWF. Por exemplo, você pode exibir as informações em campos de texto ou
componentes ou exibir imagens em instâncias de clipe de filme.
Alguns dos tipos de dados mais comuns incluem seqüências de caracteres (como nomes e
partes de texto), números, objetos (como clipes de filme), valores booleanos (true e false)
etc. Neste capítulo, você também aprenderá sobre os tipos de dados do Flash e como usá-los.
75
Para obter informações sobre tipos de dados, consulte “Sobre tipos de dados” na página 76.
Para obter informações sobre variáveis, consulte “Sobre variáveis” na página 91.
Number Primitivo. Esse tipo de dados pode representar inteiros, inteiros sem
sinal e números de ponto flutuante. Para armazenar um número de
ponto flutuante, inclua um ponto decimal no número. Sem o ponto
decimal, o número é armazenado como um inteiro. O tipo de dados
Number pode armazenar desde um valor Number.MAX_VALUE (muito alto)
até Number.MIN_VALUE (muito baixo). Para obter mais informações,
consulte, ActionScript 2.0 Language Reference e “Tipo de dados
Number” na página 82.
Object Complexo. O tipo de dados Object é definido pela classe Object. Essa
classe serve como base para todas as definições de classe do
ActionScript e permite organizar os objetos uns dentro dos outros
(objetos aninhados). Para obter mais informações, consulte “Tipo de
dados Object” na página 83.
String Primitivo. O tipo de dados String representa uma seqüência de
caracteres de 16 bits que pode incluir letras, números e sinais de
pontuação. As seqüências de caracteres são armazenadas como
caracteres Unicode, usando o formato UTF-16. Uma operação em um
valor String retorna uma nova instância da seqüência de caracteres.
Para obter mais informações, consulte “Tipo de dados String”
na página 83.
Void Complexo. O tipo de dados Void contém somente um valor: void. Use
esse tipo de dados para designar funções que não retornam um valor.
Void é um tipo de dados complexo que faz referência ao tipo de dados
primitivo Void. Para obter mais informações, consulte “Tipo de dados
Void” na página 85.
//Ocultar o rótulo
welcome_lbl.visible = false;
Para obter mais informações, consulte “Usando funções no Flash” na página 227 e “Sobre
operadores lógicos” na página 205.
O segundo exemplo retorna a largura do clipe de filme chamado my_mc no Stage. A instância
especificada como destino deve ser um clipe de filme, e o valor retornado deve ser numérico.
function getMCWidth(target_mc:MovieClip):Number {
return target_mc._width;
}
trace(getMCWidth(my_mc));
O segundo exemplo cria um clipe de filme chamado square_mc que usa a API (Application
Programming Interface, Interface de programação de aplicativos) Drawing para desenhar um
retângulo. Os manipuladores de eventos e os métodos startDrag() e stopDrag() da classe
MovieClip são adicionados para tornar o retângulo arrastável.
this.createEmptyMovieClip("square_mc", 1);
square_mc.lineStyle(1, 0x000000, 100);
square_mc.beginFill(0xFF0000, 100);
square_mc.moveTo(100, 100);
square_mc.lineTo(200, 100);
square_mc.lineTo(200, 200);
square_mc.lineTo(100, 200);
square_mc.lineTo(100, 100);
square_mc.endFill();
square_mc.onPress = function() {
this.startDrag();
};
square_mc.onRelease = function() {
this.stopDrag();
};
Para obter mais informações, consulte Capítulo 11, “Trabalhando com clipes de filme”, na
página 369 e a entrada %{MovieClip}% em ActionScript 2.0 Language Reference.
Você também pode criar objetos personalizados para organizar informações em seu aplicativo
Flash. Para adicionar interatividade a um aplicativo com o ActionScript, você precisará de
muitas informações, por exemplo, o nome, a idade e o telefone do usuário; a velocidade de
uma bola; os nomes dos itens de um carrinho de compras; o número de quadros carregados;
ou a última tecla pressionada pelo usuário. A criação de objetos personalizados permite que
você organize essas informações em grupos, simplifique e reutilize scripts.
O código ActionScript apresentado a seguir mostra como usar objetos personalizados para
organizar informações. Ele cria um novo objeto chamado user e três propriedades, name, age
e phone, que são tipos de dados String e Numeric.
var user:Object = new Object();
user.name = "Irving";
user.age = 32;
user.phone = "555-1234";
Você pode usar o operador de adição (+) para concatenar, ou unir, duas seqüências de
caracteres. O ActionScript trata os espaços no início ou no final de uma seqüência de
caracteres como uma parte literal dessa seqüência. A expressão a seguir inclui um espaço
depois da vírgula:
var greeting_str:String = "Welcome, " + firstName;
Para incluir aspas em uma seqüência de caracteres, coloque uma barra invertida (\) antes delas.
Isso é chamado escape de caractere. Há outros caracteres que só podem ser representados no
ActionScript por seqüências de escape especiais. A tabela a seguir lista todos os caracteres de
escape do ActionScript:
Seqüência de Caractere
escape
\b Caractere Backspace (ASCII 8)
\f Caractere de alimentação de formulário (ASCII 12)
\n Caractere de alimentação de linha (ASCII 10)
\r Caractere de retorno de carro (ASCII 13)
\t Caractere Tab (ASCII 9)
\" Aspas duplas
\' Aspas simples
\\ Barra invertida
\000 - \377 Um byte especificado em octal
\x00 - \xFF Um byte especificado em hexadecimal
\u0000 - \uFFFF Um caractere Unicode de 16 bits especificado em hexadecimal
Se o aplicativo tiver vários quadros, o código não será executado uma segunda vez porque a
variável init não será mais undefined.
Há vários tipos de dados possíveis, incluindo desde tipos nativos, como Number, String e
Boolean, ou classes internas fornecidas com o Flash Player 8, como BitmapData e
FileReference, ou até mesmo classes personalizadas criadas por você ou outros
desenvolvedores. Os tipos mais comuns de dados que precisam ser especificados são os
internos, como Number, String, Boolean, Array ou Object, que são mostrados nos exemplos
de código apresentados a seguir.
Para atribuir um tipo de dados específico a um item, defina seu tipo usando a palavra-chave
var e a sintaxe pós-dois-pontos, como no exemplo a seguir:
// Atribuição estrita de tipo de dados a uma variável ou a um objeto
var myNum:Number = 7;
var birthday:Date = new Date();
Quando o Flash compila esse script, um erro de tipos incompatíveis é gerado porque o
arquivo SWF espera um valor booleano.
Se criar uma função que não tenha um tipo de retorno, você poderá especificar o tipo de
retorno Void para essa função. Ou, se criar um atalho para uma função, você poderá atribuir o
tipo de dados Function à nova variável. Veja no exemplo a seguir como especificar o tipo
Function ou Void para objetos:
function sayHello(name_str:String):Void {
trace("Hello, " + name_str);
}
sayHello("world"); // Olá, mundo
var greeting:Function = sayHello;
greeting("Augustus"); // Olá, Augustus
Outra vantagem da atribuição estrita de tipos de dados é que o Flash exibe automaticamente
referências de código para objetos internos quando o tipo de dados é atribuído a eles
estritamente. Para obter mais informações, consulte “Sobre a atribuição de tipos de dados e a
atribuição estrita de tipos de dados” na página 85.
Como os arquivos publicados com o ActionScript 1.0 não respeitam as atribuições estritas de
tipos de dados durante a compilação, a atribuição do tipo incorreto de valor a uma variável à
qual um tipo foi atribuído estritamente não gera um erro do compilador.
var myNum:String = "abc";
myNum = 12;
/* Não há erro no ActionScript 1.0, mas há um erro de tipos incompatíveis no
ActionScript 2.0 */
Para obter mais informações sobre esses operadores, consulte %{operador typeof}% e
%{operador instanceof}% em ActionScript 2.0 Language Reference. Para obter mais
informações sobre testes e depuração, consulte o Capítulo 18, “Depurando aplicativos”, na
página 745 Para obter mais informações sobre herança e interfaces, consulte o Capítulo 8,
“Herança”, na página 319. Para obter mais informações sobre classes, consulte o Capítulo 7,
“Classes”, na página 239.
Sobre variáveis
Uma variável é um recipiente que contém informações. O código a seguir mostra a aparência
de uma variável no ActionScript:
var myVariable:Number = 10;
Essa variável contém um valor numérico. O uso de :Number no código anterior atribui o tipo
de valor que a variável contém, denominado atribuição de tipos de dados. Para obter mais
informações sobre como atribuir tipos de dados, consulte “Sobre a atribuição de tipos de
dados e a atribuição estrita de tipos de dados” na página 85 e “Atribuindo um tipo de dados”
na página 87.
O recipiente (representado pelo nome da variável) é sempre o mesmo em todo o ActionScript,
mas o conteúdo (o valor) pode mudar. Você pode alterar o valor de uma variável em um script
quantas vezes desejar. Ao alterar o valor de uma variável durante a reprodução do arquivo
SWF, você poderá registrar e salvar informações sobre as atividades do usuário, gravar valores
que mudam à medida que o arquivo SWF é reproduzido ou avaliar se uma condição é true
ou false. Talvez a variável precise ser atualizada continuamente durante a reprodução do
arquivo SWF, como, por exemplo, quando o placar de um jogador muda em um jogo do
Flash. As variáveis são essenciais quando você cria e trata da interação com o usuário em um
arquivo SWF.
Sobre variáveis 91
É recomendável atribuir um valor a uma variável ao declará-la pela primeira vez. A atribuição
de um valor inicial é chamada inicialização da variável e ocorre geralmente no Frame 1
(Quadro 1) da Timeline (Linha de tempo) ou em uma classe carregada quando a reprodução
do arquivo SWF inicia. Há diversos tipos de variáveis, que são afetados pelo escopo. Para obter
mais informações sobre os diversos tipos de variáveis e escopo, consulte “Sobre variáveis e
escopo” na página 101.
D IC A
As variáveis podem conter diversos tipos de dados; para obter mais informações, consulte
“Sobre tipos de dados” na página 76. O tipo de dados que uma variável contém afeta a forma
como o valor da variável é alterado quando atribuído em um script.
Os tipos mais comuns de informações que podem ser armazenados em uma variável são um
URL (tipo String), um nome de usuário (tipo String), o resultado de uma operação
matemática (tipo Number), o número de vezes que um evento ocorreu (tipo Number) ou se o
usuário clicou em determinado botão (tipo Boolean). Cada arquivo SWF e instância de um
objeto (como um clipe de filme) tem um conjunto de variáveis, sendo que cada variável possui
um valor, independentemente das variáveis de outros arquivos SWF ou clipes de filme.
Para exibir o valor de uma variável, use a instrução trace() a fim de enviar o valor para o
painel Output. Em seguida, o valor será exibido no painel Output quando você testar o
arquivo SWF no ambiente de teste. Por exemplo, trace(hoursWorked) envia o valor da
variável hoursWorked para o painel Output no ambiente de teste. Também é possível verificar
e definir os valores da variável no Debugger (Depurador), no ambiente de teste.
Para obter mais informações sobre variáveis, consulte os tópicos a seguir:
■ “Sobre a declaração de variáveis” na página 93
■ “Sobre a atribuição de valores” na página 93
■ “Sobre a atribuição de nomes a variáveis” na página 96
■ “Usando variáveis em um aplicativo” na página 97
■ “Sobre variáveis e escopo” na página 101
■ “Sobre valores padrão” na página 93
■ “Sobre operadores e variáveis” na página 96
Sobre variáveis 93
Após declarar a variável, você poderá atribuir um valor a ela. Após a linha anterior do
ActionScript, insira esta linha:
catName = "Pirate Eye";
NO T A
Como Pirate Eye é uma seqüência de caracteres, o valor precisa estar entre aspas
retas.
Esse exemplo atribui o valor Pirate Eye à variável catName. Ao declarar uma variável, você
também pode atribuir um valor a ela, em vez de atribuí-lo posteriormente (como nos
exemplos anteriores). Você poderia definir a variável catName ao declará-la, como no seguinte
exemplo:
var catName:String = "Pirate Eye";
Se desejar exibir o valor da variável catName no ambiente de teste, você poderá usar a
instrução trace(). Essa instrução envia o valor para o painel Output. Você pode rastrear o
valor da variável catName e verificar que o valor real não inclui as aspas, usando o seguinte
ActionScript:
var catName:String = "Pirate Eye";
trace(catName); // Pirate Eye
Lembre-se de que o valor atribuído deve corresponder ao tipo de dados atribuído a ele (nesse
caso, String). Se você posteriormente tentar atribuir um número à variável catName, como
catName = 10, o seguinte erro será exibido no painel Output durante o teste do arquivo
SWF:
Type mismatch in assignment statement: found Number where String is
required.
Esse erro informa que você tentou definir o tipo incorreto de dados para uma variável
especificada.
Quando um valor numérico é atribuído a uma variável, as aspas não são necessárias, como
mostra o código a seguir:
var numWrinkles:Number = 55;
Ao reatribuir um valor a uma variável existente, você não precisa usar a palavra-chave var ou
definir o tipo de dados da variável (nesse caso, :Number).
Se o valor for numérico ou booleano (true ou false), ele não usará aspas retas. Exemplos de
valores numéricos e booleanos são mostrados no trecho de código a seguir:
No exemplo anterior, a variável age contém um valor inteiro (não-decimal), embora você
também possa usar um valor decimal ou de ponto flutuante, como 38,4. As variáveis
booleanas (como married ou hasChildren) têm somente dois valores possíveis, true ou
false.
Se você desejar criar um array e atribuir valores a ele, o formato será ligeiramente diferente,
como mostra o código a seguir:
var childrenArr:Array = new Array("Pylon", "Smithers", "Gil");
Há uma sintaxe alternativa (abreviada) para criar um array com os operadores de acesso de
array, que usam colchetes ([]). Você pode reescrever o exemplo anterior da seguinte maneira:
var childrenArr:Array = ["Pylon", "Smithers", "Gil"];
Para obter mais informações sobre como criar arrays e os operadores de acesso de array,
consulte “Sobre arrays” na página 172 e “Sobre uso da sintaxe de ponto para referenciar uma
instância” na página 125.
De maneira semelhante, você pode criar um novo objeto chamado myObj. Há dois métodos
para criar um novo objeto. O primeiro (e mais longo) método para codificar um array é
apresentado a seguir:
var myObj:Object = new Object();
myObj.firstName = "Steve";
myObj.age = 50;
myObj.childrenArr = new Array("Mike", "Robbie", "Chip");
Como você pode observar nesse exemplo, o uso do método mais curto pode poupar muito
tempo e digitação, especialmente quando você define instâncias de objetos. É importante estar
familiarizado com essa sintaxe alternativa, pois você a encontrará se trabalhar em equipes ou
quando trabalhar com código ActionScript de terceiros encontrado, por exemplo, na Internet
ou em manuais.
N OT A
Nem todas as variáveis precisam ser definidas explicitamente. O Flash cria algumas
variáveis automaticamente. Por exemplo, para encontrar as dimensões do Stage, você
poderia usar os valores destas duas variáveis predefinidas: Stage.width e
Stage.height.
Sobre variáveis 95
Sobre operadores e variáveis
Talvez você não entenda os símbolos matemáticos contidos em seu código. Esses símbolos são
chamados operadores no ActionScript. Os operadores calculam um novo valor a partir de um
ou mais valores e são usados para atribuir um valor a uma variável no código. Use o operador
de igualdade (=) para atribuir um valor a uma variável:
var username:String = "Gus";
Outro exemplo é o operador de adição (+), que adiciona dois ou mais valores numéricos para
produzir um novo valor. Se você usar o operador + em dois ou mais valores de seqüência de
caracteres, as seqüências serão concatenadas. Os valores manipulados pelos operadores são
denominados operandos.
Ao atribuir um valor, use um operador a fim de definir um valor para uma variável. Por
exemplo, o script a seguir usa o operador de atribuição para atribuir o valor 7 à variável
numChildren:
var numChildren:Number = 7;
Para obter mais informações sobre como usar operadores no ActionScript, consulte “Sobre
operadores” na página 185.
■ Uma variável não pode ser uma palavra-chave nem um literal do ActionScript, como
true, false, null ou undefined. Para obter mais informações sobre literais, consulte
“Sobre literais” na página 138.
■ As variáveis devem ser exclusivas em seu escopo (consulte “Sobre variáveis e escopo”
na página 101).
Assim que você digita o ponto (.) no painel Actions (Ações), o Flash exibe uma lista de
métodos e propriedades disponíveis para objetos Array.
Para obter as convenções de codificação recomendadas para a atribuição de nomes a variáveis,
consulte “Atribuição de nome a variáveis” na página 772.
Sobre variáveis 97
var squared:Number = myNum * myNum;
trace(squared); // NaN
var myNum:Number = 6;
No exemplo a seguir, a instrução que declara e inicializa a variável myNum vem em primeiro
lugar; portanto, squared pode ser substituído por um valor:
var myNum:Number = 6;
var squared:Number = myNum * myNum;
trace(squared); // 36
Um comportamento semelhante ocorre quando você passa uma variável não definida para um
método ou uma função, como mostrado a seguir.
4. Selecione Control (Controlar) > Test Movie (Testar filme) e observe que o botão não
funciona (ele não abre a página da Web).
5. Arraste outro componente Button até o Stage. Selecione o botão.
6. Abra o inspetor Properties e digite good_button na caixa de texto Instance Name.
7. Adicione o seguinte ActionScript ao Frame 1 da Timeline (após o ActionScript adicionado
anteriormente):
// Funciona
function goodClickListener(evt:Object):Void {
var targetUrl:String = "http://www.macromedia.com";
getURL(targetUrl);
}
good_button.addEventListener("click", goodClickListener);
8. Selecione Control > Test Movie e clique no segundo botão adicionado ao Stage.
Esse botão abre a página da Web corretamente.
Quando você altera myNum para 30 (na linha 3 do código), o valor de otherNum permanece
igual a 15 porque otherNum não procura o seu valor em myNum. A variável otherNum
contém o valor de myNum recebido (na linha 2 do código).
3. Selecione Control > Test Movie para que os valores sejam exibidos no painel Output.
4. Agora adicione o seguinte ActionScript após o código adicionado na etapa 2:
function sqr(myNum:Number):Number {
myNum *= myNum;
return myNum;
}
var inValue:Number = 3;
var outValue:Number = sqr(inValue);
trace(inValue); // 3
trace(outValue); // 9
Sobre variáveis 99
Para obter informações sobre como passar uma variável por referência, consulte “Passando
uma variável por referência” na página 100.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript.
Esse ActionScript cria um objeto Array chamado myArray com dois elementos. Crie a
variável newArray e passe uma referência para myArray. Quando você altera o segundo
elemento de myArray para jack, ele afeta todas as variáveis que contêm uma referência a
ele. A instrução trace() envia tom,jack para o painel Output.
N OT A
O Flash usa um índice que inicia em zero, ou seja, 0 é o primeiro item do array, 1 é o
segundo e assim por diante.
No exemplo a seguir, myArray contém um objeto Array, portanto, o array é passado para a
função zeroArray() por referência. A função zeroArray() aceita um objeto Array como
parâmetro e define todos os elementos desse array como 0. Ela pode modificar o array porque
ele é passado por referência.
As classes do ActionScript 2.0 criadas por você oferecem suporte a escopos públicos,
privados e estáticos de variáveis. Para obter mais informações, consulte “Sobre
membros de classe” na página 265 e “Controlando o acesso de membros em classes”
na página 288.
Não é possível usar a atribuição estrita de dados para variáveis globais. Para obter informações
e uma solução alternativa, consulte “Variáveis globais” na página 102.
Variáveis globais
As variáveis globais e as funções estão visíveis para cada timeline e escopo do documento. Para
declarar (ou criar) uma variável com escopo global, use o identificador _global antes do
nome da variável e não use a sintaxe var =. Por exemplo, o código a seguir cria a variável
global myName:
var _global.myName = "George"; // Sintaxe incorreta para a variável global
_global.myName = "George"; // Sintaxe correta para a variável global
Entretanto, se inicializar uma variável local com o mesmo nome de uma variável global, você
não terá acesso à variável global enquanto estiver no escopo da variável local, como mostra o
exemplo a seguir:
_global.counter = 100; // Declara a variável global
trace(counter); // Acessa a variável global e exibe 100
function count():Void {
for (var counter:Number = 0; counter <= 2; counter++) { // Variável local
trace(counter); // Acessa a variável local e exibe de 0 a 2
}
}
count();
trace(counter); // Acessa a variável global e exibe 100
Esse exemplo mostra simplesmente que a variável global não é acessada no escopo da função
count(). Entretanto, você poderá acessar a variável de escopo global se adicionar a ela o
prefixo _global. Por exemplo, você poderia acessá-la se adicionasse o prefixo _global ao
contador, como no seguinte código:
trace(_global.counter);
O recurso de segurança sandbox do Flash Player versão 7 e versões posteriores impõe restrições
ao acesso de variáveis globais em arquivos SWF carregados a partir de domínios de segurança
separados. Para obter mais informações, consulte Capítulo 17, “Noções básicas de segurança”,
na página 707.
Variáveis de Timeline
As variáveis de Timeline estão disponíveis para qualquer script nessa timeline. Para declarar
variáveis de timeline, use a instrução var e inicialize-as em qualquer quadro da timeline. A
variável está disponível para esse quadro e para todos os quadros subseqüentes, como no
exemplo apresentado a seguir.
Se o nome usado para a variável local já estiver declarado como uma variável de timeline, a
definição local terá precedência sobre a definição da timeline enquanto a variável local estiver
no escopo. A variável de timeline ainda existirá for a da função. Por exemplo, o código a seguir
cria uma variável de seqüência de caracteres timeline chamada str1 e, em seguida, cria uma
variável local de mesmo nome na função scopeTest(). A instrução trace contida na função
gera a definição local da variável, mas a instrução trace fora da função gera a definição da
variável na timeline.
var str1:String = "Timeline";
function scopeTest():Void {
var str1:String = "Local";
trace(str1); // Local
}
scopeTest();
trace(str1); // Timeline
No próximo exemplo, observe que certas variáveis existem apenas enquanto determinada
função existir e poderão gerar erros se você tentar fazer referência a elas fora do escopo dessa
função.
A sintaxe a seguir também costuma ser usada para um loop for: for (var i:Number =
0; i < arrayLength; i++) {...}.
Esse exemplo exibe undefined no ambiente de teste do Flash porque a variável i não está
definida na timeline principal. Ela existe somente na função initArray().
Você pode usar variáveis locais para ajudar a evitar conflitos de nome, que podem gerar
resultados inesperados em seu aplicativo. Por exemplo, se usar age como uma variável local,
você poderá usá-la para armazenar a idade de uma pessoa em um contexto e a idade do filho
de uma pessoa em outro contexto. Nesse caso, não há conflito porque as variáveis são usadas
em escopos separados.
É recomendável usar variáveis locais no corpo de uma função para que a função possa atuar
como um código independente. Uma variável local só pode ser alterada em seu próprio bloco
de código. Se uma expressão em uma função usar uma variável global, um código ou eventos
externos à função poderão alterar seu valor, o que alteraria a função.
Você pode atribuir um tipo de dados a uma variável local ao declará-la. Isso ajuda a evitar a
atribuição do tipo de dados incorreto a uma variável existente. Para obter mais informações,
consulte “Sobre a atribuição de tipos de dados e a atribuição estrita de tipos de dados”
na página 85.
4. Selecione Control > Test Movie para testar o arquivo SWF no Flash Player.
O campo de texto exibe undefined. Para ter certeza de que as variáveis estão definidas
corretamente antes de continuar, verifique a existência das variáveis no Flash. Para isso,
verifique se elas estão indefinidas.
Quando você publica o documento do Flash, um documento HTML é criado por padrão
no mesmo diretório do arquivo SWF. Se um arquivo HTML não tiver sido criado,
selecione File (Arquivo) > Publish settings (Configurações de publicação) e, em seguida,
HTML na guia Formats (Formatos). Em seguida, publique o documento novamente.
O código a seguir demonstra o HTML do documento responsável por incorporar um
documento do Flash em uma página HTML. Examine esse HTML para entender como
as variáveis de URL funcionam na etapa a seguir (na qual você adicionará um código para
essas variáveis).
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=8,0,0,0" width="550" height="400"
id="urlvariables" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="urlvariables.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="urlvariables.swf" quality="high" bgcolor="#ffffff"
width="550" height="400" name="urlvariables" align="middle"
allowScriptAccess="sameDomain" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
6. Para passar variáveis do documento HTML gerado para o documento do Flash, você pode
passá-las após o caminho e o nome do arquivo (urlvariables.swf). Adicione o texto em
negrito ao arquivo HTML gerado na área de trabalho.
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=8,0,0,0" width="550" height="400"
id="urlvariables" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="urlvariables.swf?myURL=http://
weblogs.macromedia.com" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
Lembre-se de que é necessário efetuar as mesmas alterações nas marcas object e embed
para manter a consistência entre todos os navegadores. Observe que as palavras estão
separadas pelos sinais +. As palavras são separadas dessa maneira porque os valores são
codificados em URL e o sinal + representa um único espaço em branco.
N OT A
Para obter uma lista de caracteres especiais comuns codificados em URL, consulte
a Flash TechNote (Nota técnica do Flash), URL Encoding: Reading special
characters from a text file (Codificação de URL: Lendo caracteres especiais em um
arquivo de texto).
Como o E comercial (&) serve como delimitador para diversos pares de nome/valor, se os
valores passados contiverem esse caractere, poderão ocorrer resultados inesperados. Em
virtude da natureza dos pares de nome/valor e da análise, se os valores a seguir forem
passados para o Flash,
my.swf?name=Ben+&+Jerry&flavor=Half+Baked
Para evitar isso, use o E comercial (&) como um caractere de escape no par de nome/valor
com seu equivalente codificado em URL (%26).
8. Abra o documento urlvariables.html e localize o seguinte código:
?myURL=http://weblogs.macromedia.com&myTitle=Macromedia+News+Aggregator
4. Selecione File (Arquivo) > Publish (Publicar) para publicar os arquivos SWF e HTML.
5. Abra o diretório que contém os arquivos publicados (onde você salvou myflashvars.fla no
disco rígido) e abra o documento HTML (myflashvars.html, por padrão) em um editor
HTML, como o Dreamweaver ou o Bloco de Notas.
6. Adicione o código que aparece em negrito abaixo, para que o documento HTML
corresponda ao seguinte:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=8,0,0,0" width="550" height="400" id="myflashvars"
align="middle">
<param name="allowScriptAccess" value="sameDomain" />
Esse código passa uma única variável chamada myURL, que contém a seqüência de
caracteres
http://weblogs.macromedia.com. Quando o arquivo SWF é carregado, uma
propriedade chamada myURL é criada no escopo _level0. Uma das vantagens de usar
FlashVars ou passar variáveis no URL é que elas ficam imediatamente disponíveis no Flash
quando o arquivo SWF é carregado. Isso significa que não é preciso criar funções para
verificar se o carregamento das variáveis foi concluído; esse procedimento seria necessário
se elas fossem carregadas com LoadVars ou XML.
7. Salve as alterações no documento HTML e feche-o.
8. Clique duas vezes em myflashvars.html para testar o aplicativo.
O texto http://weblogs.macromedia.com, uma variável do arquivo HTML, é exibido
no arquivo SWF.
N OT A
Esse código carrega um arquivo de texto de um servidor remoto e analisa seus pares de
nome/valor.
DICA
this.createEmptyMovieClip("img_mc", 10);
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip):Void {
target_mc._x = (Stage.width - target_mc._width) / 2;
target_mc._y = (Stage.height - target_mc._height) / 2;
}
mclListener.onLoadError = function(target_mc:MovieClip):Void {
target_mc.createTextField("error_txt", 1, 0, 0, 100, 20);
target_mc.error_txt.autoSize = "left";
target_mc.error_txt.text = "Error downloading specified image;\n\t" +
target_mc._url;
}
var myMCL:MovieClipLoader = new MovieClipLoader();
myMCL.addListener(mclListener);
myMCL.loadClip(imgUrl, img_mc);
7. Teste o documento HTML para ver as alterações. Uma imagem especificada no código
HTML é exibida no arquivo SWF.
Para modificar esse exemplo e usar suas próprias imagens, altere o valor de FlashVars (a
seqüência de caracteres entre aspas).
Esse código, que é um dos métodos usados para criar um objeto simples, cria uma nova
instância do objeto e define algumas propriedades dele.
3. Agora digite o seguinte ActionScript após o código inserido na etapa 2.
// O segundo método
var secondObj:Object = {firstVar:"hello world", secondVar:28,
thirdVar:new Date(1980, 0, 1)};
Você também pode usar arrays para criar objetos. Em vez de ter uma série de variáveis como
firstname1, firstname2 e firstname3 para representar uma coleção de variáveis, é possível
criar um array de objetos para representar os mesmos dados. Essa técnica é demonstrada a
seguir.
A vantagem de organizar variáveis em arrays e objetos é que é muito mais fácil executar um
loop nas variáveis e ver os valores, como mostra a etapa a seguir.
3. Digite o seguinte código após o ActionScript adicionado na etapa 2.
var i:Number;
for (i = 0; i < usersArr.length; i++) {
trace(usersArr[i].firstname); // George, John, Thomas
}
4. Selecione Control > Test Movie e o seguinte texto será exibido no painel Output:
George
John
Thomas
Para obter informações sobre como criar loops, consulte o Capítulo 5, “Usando os loops for”,
na página 166. Para obter informações sobre loops for...in, consulte “Usando os loops for..in”
na página 167. Para obter mais informações sobre objetos, consulte o Capítulo 7, “Classes”,
na página 239.
Sobre a conversão
O ActionScript 2.0 permite que você converta um tipo de dados em outro. A conversão de
um objeto em um tipo diferente consiste em converter o valor armazenado no objeto ou na
variável em outro tipo.
Os resultados da conversão de tipos variam de acordo com os tipos de dados envolvidos. Para
converter um objeto em um tipo diferente, coloque o nome do objeto entre parênteses (()) e
preceda-o com o nome do novo tipo. Por exemplo, o código a seguir converte um valor
booleano em um inteiro.
var myBoolean:Boolean = true;
var myNumber:Number = Number(myBoolean);
Nesse exemplo, você declarou ao compilador que foo é um objeto Dog e, portanto, o
compilador pressupõe que foo.bark(); é uma instrução legal. Entretanto, o compilador não
sabe que a conversão falhará (ou seja, que você tentou converter um objeto Cat em um tipo
Animal), portanto, nenhum erro ocorrerá durante a compilação. Entretanto, se você incluir
uma verificação no script para garantir que a conversão tenha êxito, poderão ocorrer erros
durante a execução, como mostra este exemplo.
function bark(myAnimal:Animal) {
var foo:Dog = Dog(myAnimal);
if (foo) {
foo.bark();
}
}
Você pode converter uma expressão em uma interface. Se a expressão for um objeto que
implemente a interface ou tenha uma classe base que implemente a interface, a conversão terá
êxito. Caso contrário, ela falhará.
N O TA
Para obter mais informações sobre as funções de conversão de dados, consulte a entrada de
cada função de conversão em ActionScript 2.0 Language Reference: %{função Array}%,
%{função Boolean}%, %{função Number}%, %{função Object}% e %{função String}%.
Fundamentos da sintaxe e da
linguagem
5
A função da sintaxe e das instruções do ActionScript é semelhante à função das palavras nas
frases, que podem ser agrupadas para formar os parágrafos. O ActionScript pode ser tão
simples quanto isso. Por exemplo, na língua portuguesa, um ponto encerra uma frase. No
ActionScript, um ponto-e-vírgula encerra uma instrução. Na linguagem ActionScript, é
possível digitar uma ação stop() para interromper o loop da reprodução de uma instância de
clipe de filme ou de um arquivo SWF. É possível também escrever milhares de linhas de
código para potencializar uma aplicação bancária interativa. Como você pode ver, o
ActionScript pode realizar tarefas muito simples ou tarefas muito complexas.
O Capítulo 4, “Dados e tipos de dados,” explicou como a linguagem ActionScript usa os
dados e como é possível formatá-los no código. Este capítulo demonstrará como formar as
instruções no ActionScript usando a sintaxe. Ele contém pequenos trechos de código e alguns
exemplos para demonstrar os conceitos fundamentais da linguagem. Os próximos capítulos
apresentarão exemplos de código mais longos e cada vez mais complexos que complementarão
e facilitarão os fundamentos aprendidos neste capítulo.
As regras gerais descritas nesta seção aplicam-se a toda a linguagem ActionScript. A maioria
dos termos do ActionScript também tem requisitos individuais. Para obter as regras de um
termo específico, consulte a entrada correspondente em ActionScript 2.0 Language Reference
(Referência à linguagem ActionScript 2.0.
Aplicar os princípios básicos do ActionScript para criar programas sofisticados pode ser
desafiador para usuários novatos no ActionScript. Para obter mais informações sobre como
aplicar as regras descritas nesta seção, consulte Capítulo 19, “Melhores práticas e convenções
de codificação para ActionScript 2.0”, na página 767.
NO TA
119
Para obter mais informações sobre como trabalhar com os fundamentos da sintaxe e da
linguagem do ActionScript, consulte os seguintes tópicos:
Sobre sintaxe, instruções e expressões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Sobre sintaxe de ponto e caminhos de destino. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Sobre pontuadores de linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Sobre constantes e palavras-chave. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Sobre instruções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Sobre arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Sobre operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Para obter mais informações sobre as instruções, consulte “Sobre instruções” na página 149.
As expressões, diferentes das instruções, são combinações legais de símbolos do ActionScript
que representam um valor. As expressões têm valores, enquanto os valores e as propriedades
têm tipos. Uma expressão pode ser composta por operadores, operandos, valores, funções e
procedimentos. A expressão segue as regras de precedência e associação do ActionScript.
Geralmente, o Flash Player interpreta a expressão e retorna um valor que pode ser utilizado no
aplicativo.
Esse código cria um novo clipe de filme e atribui a ele o nome de instância pic_mc. Em
seguida, você pode manipular a instância pic_mc usando o código, como acontece ao carregar
uma imagem nele, conforme demonstrou o código anterior.
Para obter mais informações sobre como trabalhar com o escopo, consulte “Sobre escopo e
referência” na página 130 e “Sobre variáveis e escopo” na página 101.
Observe que o clipe manipulado (nestedClip, por exemplo) aparece imediatamente antes da
ação. Você observará essa tendência nas próximas seções.
4. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
Você pode informar que criou um clipe de filme devido à instrução trace, mas não
conseguirá ver nada no Stage (Palco). Mesmo que tenha adicionado um código que crie
uma instância de clipe de filme, nada aparecerá no Stage, a menos que tenha adicionado
algo ao clipe. Por exemplo, você poderia carregar uma imagem no clipe de filme.
5. Retorne ao ambiente de criação e abra o painel Actions (Ações).
6. Digite o seguinte ActionScript após o código adicionado na etapa 3:
rotateClip.loadMovie("http://www.helpexamples.com/flash/images/
image1.jpg");
É recomendável evitar o uso de níveis caso seja possível carregar um conteúdo nos
clipes de filme em profundidades diferentes. O método
MovieClip.getNextHighestDepth() permite criar dinamicamente novas instâncias de
clipe de filme no Stage sem que seja necessário verificar se já existe alguma
instância em uma profundidade específica.
Você poderia adicionar a palavra-chave this para fins de legibilidade e consistência. Para
obter mais informações sobre as práticas de codificação recomendadas, consulte Capítulo 19,
“Melhores práticas e convenções de codificação para ActionScript 2.0”, na página 767.
Caso rastreie o clipe de filme, _level0.myClip aparecerá no painel Output (Saída) para cada
trecho de código acima. No entanto, se o ActionScript estiver dentro do clipe de filme
myClip, mas a linha de tempo principal tiver que ser referenciada, referencie o pai do clipe de
filme (que é o Stage principal). Clique duas vezes em um clipe de filme e coloque o seguinte
ActionScript na linha de tempo do clipe de filme:
trace("me: " + this);
trace("my parent: " + this._parent);
Isso significa que você referenciou a linha de tempo principal. Use parent para criar um
caminho relativo para um objeto. Por exemplo, se o clipe de filme dogClip estiver aninhado
dentro do clipe de filme de animação animalClip, a seguinte instrução da instância dogClip
instruirá animalClip a interromper a animação:
this._parent.stop();
Ponto-e-vírgula e dois-pontos
As instruções do ActionScript são encerradas com um ponto-e-vírgula (;), conforme
demonstrado nas duas linhas de código a seguir:
var myNum:Number = 50;
myClip._alpha = myNum;
O uso de um ponto-e-vírgula para encerrar uma instrução permite inserir mais de uma
instrução em uma única linha, mas isso geralmente dificulta a leitura do código.
Um outro local em que se usa o ponto-e-vírgula é nos loops for. Ele é utilizado para separar
parâmetros, conforme mostrado no exemplo a seguir. O exemplo se repete de 0 a 9 e exibe
cada número no painel Output (Saída):
Os dois-pontos (:) são utilizados no código para atribuir tipos de dados às variáveis. Para
atribuir a um item um tipo de dados específico, defina seu tipo usando a palavra-chave var e a
sintaxe pós-dois-pontos, como no exemplo a seguir:
// strict typing of variable or object
var myNum:Number = 7;
var myDate:Date = new Date();
// strict typing of parameters
function welcome(firstName:String, myAge:Number) {
}
// strict typing of parameter and return value
function square(num:Number):Number {
var squared:Number = num * num;
return squared;
}
É possível declarar o tipo de dados de objetos com base em classes internas (Button, Date,
MovieClip etc.) e em classes e interfaces criadas por você. No trecho a seguir, você criará um
novo objeto, do tipo personalizado Student:
var firstStudent:Student = new Student();
Também é possível especificar se os objetos são do tipo de dados Function ou Void. Para obter
mais informações sobre como atribuir tipos de dados, consulte Capítulo 4, “Dados e tipos de
dados”, na página 75.
Chaves
Agrupe os eventos, as definições de classe e as funções do ActionScript em blocos usando as
chaves ({}). Coloque a chave de abertura na mesma linha da declaração.
N OT A
Delimite cada instrução entre chaves quando ela fizer parte de uma estrutura de controle
if..else ou for), mesmo que ela contenha somente uma instrução. Essa prática ajudará a
evitar erros no ActionScript quando você esquecer de adicionar chaves ao código. O exemplo
a seguir mostra um código escrito de modo insatisfatório:
Embora esse código seja válido, ele é considerado insatisfatório porque não tem chaves
delimitando as instruções.
DICA
As chaves serão adicionadas a essa instrução se você clicar no botão Check Syntax
(Verificar sintaxe).
Nesse caso, se você adicionar uma segunda instrução após a instrução trace, a segunda
instrução será executada, quer a variável numUsers seja igual a 0 ou não, o que poderá gerar
resultados inesperados. Por isso, adicione as chaves para que a saída do código seja semelhante
à mostrada neste exemplo:
var numUsers:Number;
if (numUsers == 0) {
trace("no users found");
}
O exemplo a seguir exibe um arquivo de classe simples que pode ser utilizado para criar um
objeto Student. Para obter mais informações sobre os arquivos de classe, consulte Capítulo 7,
“Classes”, na página 239.
8. Selecione File > Save (Salvar) para salvar as alterações efetuadas em student_test.fla.
9. Selecione Control (Controlar) > Test Movie (Testar filme) para testar os arquivos FLA e
AS.
O exemplo a seguir demonstra como as chaves são utilizadas nas funções.
Também é possível usar chaves vazias como atalho de sintaxe para a função new Object().
Por exemplo, o código a seguir cria uma instância Object vazia:
var myObject:Object = {};
DICA
Lembre-se de que cada chave de abertura deve ter uma chave de fechamento.
Parênteses
Ao definir uma função no ActionScript, você coloca os parâmetros entre parênteses [()],
conforme mostrado nas linhas de código a seguir:
function myFunction(myName:String, myAge:Number, happy:Boolean):Void {
// Your code goes here.
}
Ao chamar uma função, você também coloca qualquer parâmetro transmitido para a função
entre parênteses, conforme mostrado no exemplo a seguir:
myFunction("Carl", 78, true);
Devido à ordem de precedência, se você não utilizou os parênteses ou usou duas instruções
separadas, a multiplicação será computada primeiro, o que significa que a primeira operação
será 20 * 0.8. O resultado, 16, será adicionado ao valor atual de circleClip._x e, por fim,
atribuído à variável computedValue.
Se você não usar parênteses, deverá adicionar uma instrução para avaliar a expressão, conforme
mostrado no exemplo a seguir:
var tempValue:Number = circleClip._x + 20;
var computedValue:Number = tempValue * 0.8;
Os literais também podem ser agrupados para formar literais compostos. Os literais de array
são delimitados por colchetes ([]) e usam a vírgula (,) para separar elementos de array. Um
literal de array pode ser usado para inicializar um array. Os exemplos a seguir mostram dois
arrays que são inicializados através de literais de array. É possível usar a instrução new e
transmitir o literal composto como um parâmetro para o construtor da classe Array, mas
também é possível atribuir valores de literal diretamente ao instanciar qualquer classe interna
do ActionScript.
// using new statement
var myStrings:Array = new Array("alpha", "beta", "gamma");
var myNums:Array = new Array(1, 2, 3, 5, 8);
Os literais também podem ser usados para inicializar um objeto genérico. Um objeto genérico
é uma instância da classe Object. Os literais de objeto são delimitados por chaves ({}) e usam
a vírgula (,) para separar as propriedades de objeto. Cada propriedade é declarada com dois-
pontos (:), pontuador que separa o nome da propriedade do valor da propriedade.
É possível criar um objeto genérico usando a instrução new e transmitir o literal de objeto
como um parâmetro para o construtor da classe Object. Uma outra alternativa é atribuir o
literal de objeto diretamente à instância que está sendo declarada. O exemplo a seguir cria um
novo objeto genérico e o inicializa com três propriedades, propA, propB e propC, cada uma
delas com valores definidos para 1, 2 e 3, respectivamente.
// using new statement
var myObject:Object = new Object({propA:1, propB:2, propC:3});
Use literais de seqüência de caracteres, a menos que seja estritamente necessário usar um
objeto String para obter melhor desempenho. Para obter mais informações sobre as seqüências
de caracteres, consulte “Sobre seqüências de caracteres e a classe String” na página 477.
Sobre comentários
Os comentários são uma forma de fazer anotações no código com descrições em inglês sem
formatação que não serão avaliadas pelo compilador. É possível usar comentários no código
para descrever o que o código está fazendo ou quais dados serão retornados ao documento. O
uso dos comentários pode ajudar você a lembrar decisões de codificação importantes e pode
ser útil para qualquer outra pessoa que leia o código. Os comentários devem explicar
claramente a intenção do código, e não apenas traduzi-lo. Se algo não estiver muito óbvio no
código, adicione comentários.
É altamente recomendável o uso de comentários para adicionar observações aos scripts. Os
comentários documentam as decisões tomadas em relação ao código, respondendo a
perguntas "como" e "por quê". Eles facilitam a compreensão do ActionScript. Por exemplo,
você pode descrever uma solução alternativa nos comentários. Assim, você ou outro
desenvolvedor poderá localizar facilmente seções de código para atualizar ou corrigir. Se o
problema for corrigido ou amenizado em uma versão futura do Flash ou Flash Player, será
possível aperfeiçoar o ActionScript removendo a solução alternativa.
Evite usar comentários desordenados. Um exemplo de comentário desordenado é uma linha
de sinais de igual (=) ou asteriscos (*) utilizada para criar um bloco ou uma separação em
torno dos comentários. Em vez disso, use espaços em branco para separar os comentários do
ActionScript. Se você formatar o ActionScript usando o botão Auto Format (Formatação
automática) do painel Actions (Ações) ou da Janela Script, o espaço em branco será removido.
Lembre-se de adicionar novamente o espaço em branco no código ou use linhas de
comentário únicas (//) para manter o espaçamento. Será mais fácil remover essas linhas depois
que você formatar o código do que tentar encontrar o espaço em branco.
Os comentários de linha única são geralmente utilizados para explicar um pequeno trecho de
código. É possível usar comentários de linha única para fazer qualquer comentário breve que
caiba em uma linha. O exemplo a seguir inclui um comentário de linha única:
while (condition) {
// handle condition with statements
}
Recue os comentários para a direita, a fim de que os leitores possam distinguí-los do código.
Tente manter os comentários alinhados, se possível, conforme mostrado no código a seguir.
var myAge:Number = 28; // my age
var myCountry:String = "Canada"; // my country
var myCoffee:String = "Hortons"; // my coffee preference
Se você usar a formatação automática (clique no botão Auto Format (Formatação automática)
no painel Actions (Ações), os comentários finais se moverão para a próxima linha. Adicione
esses comentários depois que formatar o código. Do contrário, será necessário modificar a
posição dos comentários após o uso do botão Auto Format.
Use comentários em bloco para descrever arquivos, estruturas de dados e métodos. Eles são
geralmente inseridos no início de um arquivo e antes ou dentro de um método.
Há dois tipos de comentários em uma classe ou arquivo de interface comum: comentários de
documentação e comentários de implementação. Os comentários de documentação são
usados para descrever as especificações do código e não descrevem a implementação. Use os
comentários de documentação para descrever interfaces, classes, métodos e construtores. Os
comentários de implementação são usados para fazer comentários sobre o código ou sobre a
implementação de seções específicas do código.
Não inclua comentários que não estejam diretamente relacionados à classe que está
sendo lida. Por exemplo, não inclua comentários que descrevam o pacote
correspondente.
Usando constantes
As constantes são propriedades com um valor fixo que não podem ser alteradas. Portanto, elas
são valores que não se alteram em todo o aplicativo. A linguagem ActionScript contém várias
constantes predefinidas. Por exemplo, as constantes BACKSPACE, ENTER, SPACE e TAB são
propriedades da classe Key e se referem às teclas do teclado. A constante Key.TAB sempre tem
o mesmo significado: ela indica a tecla Tab em um teclado. As constantes são úteis quando se
quer comparar valores e usar valores fixos no aplicativo.
Para testar se o usuário está pressionando a tecla Enter, use a seguinte instrução:
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
if (Key.getCode() == Key.ENTER) {
trace("Are you ready to play?");
}
};
Key.addListener(keyListener);
Para que o ActionScript anterior funcione, talvez seja necessário desativar os atalhos de teclado
no ambiente de criação. Selecione Control (Controlar) > Test Movie (Testar filme) no menu
principal. Depois, enquanto visualiza o arquivo SWF no player, selecione Control > Disable
Keyboard Shortcuts (Desativar atalhos de teclado) na janela de visualização do arquivo SWF.
No Flash, não há como criar seus próprios valores de constante, a não ser quando você cria
suas próprias classes personalizadas com variáveis de membro privadas. Não é possível criar
uma variável “somente leitura” no Flash.
As variáveis devem conter letras minúsculas ou letras minúsculas e maiúsculas. No entanto, as
constantes (variáveis que não se alteram) devem conter letras maiúsculas. Separe as palavras
com caracteres de sublinhado, conforme mostrado no ActionScript a seguir:
A propriedade EXAMPLE_STATIC é estática, o que significa que ela se aplica à classe como
um todo, e não a uma determinada instância da classe. Você deve acessar a propriedade
estática de uma classe usando o nome da classe, e não o nome de uma instância. Não é
possível acessar uma propriedade estática através de uma instância de classe.
4. Crie um novo documento do Flash e salve-o como const.fla.
5. Abra o painel Actions (Ações) e digite o código a seguir no Frame 1 (Quadro 1) da Timeline
(Linha de tempo):
trace(ConstExample.EXAMPLE_STATIC); // output: Global access
Ao declarar a propriedade EXAMPLE_STATIC como estática, você usa esse código para
acessar o valor da propriedade.
6. Selecione Control > Test Movie para testar o documento.
Global access será exibido no painel Output (Saída).
7. No painel Actions, digite esse código após o código adicionado na etapa 5.
Para acessar uma propriedade não estática, acesse o valor através de uma instância da
classe. Como a propriedade EXAMPLE_PUBLIC é pública, ela está disponível para ser
codificada fora da definição da classe.
9. No painel Actions, exclua as instruções trace adicionadas nas etapas 5 e 7.
10. Insira o seguinte código no painel Actions:
var myExample:ConstExample = new ConstExample();
trace(myExample.EXAMPLE_PUBLIC); // output: Public access
Sobre palavras-chave
As palavras-chave são palavras do ActionScript que têm uma função específica. Por exemplo,
use a palavra-chave var para declarar uma variável. A palavra-chave var é mostrada na linha
de código a seguir:
var myAge:Number = 26;
As palavras-chave não podem ser usadas como identificadores (como nomes de variável,
função ou rótulo) e você não deve usá-las em nenhum outro local dos arquivos FLA para
outros fins (como nomes de instância). Você já utilizou bastante a palavra-chave var,
principalmente se leu o Capítulo 4, “Dados e tipos de dados”, na página 75. O ActionScript
reserva palavras da linguagem para fins específicos. Portanto, não é possível usar palavras-
chave como identificadores (como nomes de variável, função ou rótulo). Essas palavras-chave
estão listadas em “Sobre palavras reservadas” na página 147.
le lt ne new
not on onClipEvent or
Todos os nomes de classe interna, classe de componente e interface são palavras reservadas e
não devem ser usados como identificadores no código:
XUpdateResolver
Diversas palavras, embora não sejam palavras reservadas, não devem ser usadas como
identificadores (como nomes de variável ou instância) no código do ActionScript. Essas
palavras são usadas pelas classes internas que compõem a linguagem ActionScript. Portanto,
não use nomes de propriedades, métodos, classes, interfaces, nomes de classe de componente e
valores como nomes no código (como acontece quando você atribui nomes a variáveis, classes
ou instâncias).
Para entender o que são esses nomes, consulte ActionScript 2.0 Language Reference (Referência
à linguagem ActionScript 2.0) e pesquise o painel Help (Ajuda) para obter instruções
adicionais e as seções de uso deste manual (Introdução ao ActionScript 2.0 no Flash).
Sobre instruções
Uma instrução é uma diretriz fornecida ao arquivo FLA para fazer algo; por exemplo, executar
uma ação específica. Você pode, por exemplo, utilizar uma instrução condicional para
determinar se algo é verdadeiro ou existe. Em seguida, o código poderá executar ações
especificadas, como funções ou expressões, de acordo com o status da condição, se verdadeira
ou não.
Por exemplo, a instrução if é condicional e avalia uma condição para determinar a próxima
ação a ser executada no código.
// if statement
if (condition) {
// statements;
}
Um outro exemplo é a instrução return, que retorna um resultado como valor da função em
que ela é executada.
Existem diversas maneiras de formatar ou escrever o ActionScript. A escrita do ActionScript
pode ser diferenciada através do modo como você forma a sintaxe; por exemplo, através da
maneira como você espaça as instruções ou do local em que insere as chaves ({}) no código.
Mesmo que haja diferentes formas de compor instruções sem interromper o código, existem
algumas diretrizes gerais que você pode seguir para escrever um ActionScript válido.
Coloque apenas uma instrução em uma linha para aumentar a legibilidade do
ActionScript. O exemplo a seguir mostra o uso recomendado e não recomendado das
instruções:
Esse ActionScript incorpora uma atribuição no código, o que dificulta a leitura. Se você
atribuir variáveis como instruções separadas, isso melhorará a legibilidade, como mostra o
exemplo a seguir:
var a:Number = b + c;
var myNum:Number = a + d;
As seções a seguir mostram como compor instruções específicas no ActionScript. Para obter
informações sobre como escrever e formatar eventos, consulte Capítulo 10, “Manipulando
eventos”, na página 347.
Para obter mais informações sobre cada instrução, consulte os seguintes tópicos:
■ “Sobre instruções compostas” na página 150
■ “Sobre condições” na página 151
■ “Repetindo ações através de loops” na página 162
Essa instrução composta contém várias instruções, mas atua como se fosse uma instrução
única no código do ActionScript. A chave de abertura é colocada no final da instrução
composta. A chave de fechamento começa com uma linha e se alinha ao início da instrução
composta.
Sobre condições
Você usa as condições para determinar se algo é verdadeiro ou existe. Em seguida, se desejar,
pode repetir uma ação (usando loops) ou executar ações especificadas, como funções ou
expressões, com base no status da condição, se verdadeira ou não. Por exemplo, é possível
determinar se uma determinada variável é definida ou tem um valor específico e executar um
bloco de código com base no resultado. Além disso, é possível alterar os gráficos no
documento do Flash com base na hora do relógio do sistema do usuário ou nas condições
climáticas do local em que o usuário está no momento.
Para executar uma ação que dependa da existência de uma condição ou para repetir uma ação
(criar instruções de loop), use as instruções if, else, else if, for, while, do while,
for..in ou switch.
Para obter mais informações sobre quais condições você pode usar e sobre como escrevê-las,
consulte os seguintes tópicos:
■ “Sobre condições de escrita” na página 151
■ “Usando a instrução if ” na página 152
■ “Usando a instrução if..else” na página 153
■ “Usando a instrução if..else if ” na página 154
■ “Usando uma instrução switch” na página 156
■ “Usando as instruções try..catch e try..catch..finally” na página 158
■ “Sobre o operador condicional e a sintaxe alternativa” na página 160
Nesse trecho de código, se o tamanho dos campos de texto passwordTxt ou emailTxt for 0
(por exemplo, o usuário não digitou um valor), o documento do Flash será redirecionado para
o rótulo de quadro invalidLogin. Se os campos passwordTxt e emailTxt contiverem valores
e o conteúdo do campo de texto passwordTxt corresponder à variável userID, o arquivo SWF
será redirecionado para o rótulo de quadro startProgram.
Para procurar uma das diversas condições, use a instrução switch, em vez de várias instruções
else if. Para obter mais informações sobre as instruções switch, consulte “Usando uma
instrução switch” na página 156.
Consulte as seções a seguir para obter informações sobre como escrever diferentes tipos de
condições nos aplicativos ActionScript.
Usando a instrução if
Use a instrução if quando quiser executar uma série de instruções com base no status true de
uma determinada condição.
// if statement
if (condition) {
// statements;
}
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript.
Nesse código, você cria uma seqüência de caracteres que exibirá AM ou PM com base na
hora do dia. Se a hora atual for maior ou igual a 12, a seqüência de caracteres amPM será
definida para PM. Por fim, você rastreia a seqüência de caracteres amPm e, se a hora for
maior ou igual a 12, a sigla PM será exibida. Do contrário, a sigla AM será exibida.
Para executar um bloco de código alternativo, use a instrução if sem a instrução else.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript.
Nesse código, você cria uma seqüência de caracteres que retém a sigla AM ou PM de acordo
com a hora do dia. Se a hora atual for maior ou igual a 12, a seqüência de caracteres amPM
será definida para PM. Por fim, você rastreia a seqüência de caracteres amPm e, se a hora for
maior ou igual a 12, a sigla PM será exibida. Do contrário, você verá a sigla AM no painel
Output (Saída).
Um bloco if..else if é utilizado nos projetos do Flash quando é necessário verificar uma
série de condições. Por exemplo, se você quiser exibir uma imagem diferente na tela com base
na hora do dia em que o usuário está acessando, crie uma série de instruções if que
determinarão se é de manhã cedo, de tarde, início da noite ou final da noite. Em seguida,
exiba um gráfico apropriado.
O código a seguir não somente testa se o valor x é maior que 20, mas também se o valor x é
negativo:
if (x > 20) {
trace("x is > 20");
} else if (x < 0) {
trace("x is negative");
}
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript.
Nesse código, você cria uma seqüência de caracteres chamada currentHour que retém o
número da hora atual (por exemplo, se a hora for 18:19, currentHour reterá o número
18). Use o método getHours() da classe Date para obter a hora atual. Em seguida, use a
instrução if..else if para rastrear informações no painel Output (Saída), com base no
número retornado. Para obter mais informações, consulte os comentários no trecho de
código anterior.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript.
Digite letras usando o teclado, incluindo as teclas a, e ou i. Ao digitar essas três teclas, você
verá as instruções trace no ActionScript anterior. A linha de código cria um novo objeto
que será utilizado como ouvinte da classe Key. Use esse objeto para informar ao evento
onKeyDown() que o usuário pressionou uma tecla. O método Key.getAscii() retorna o
código ASCII da última tecla que o usuário pressionou ou liberou; portanto, é necessário
usar o método String.fromCharCode() para retornar uma seqüência de caracteres que
contém os caracteres representados pelos valores ASCII dos parâmetros. Como “E” não
possui uma instrução break, o bloco será executado se o usuário pressionar a tecla e ou E.
Se o usuário pressionar uma tecla que não seja abordada por nenhum dos três primeiros
casos, o caso padrão será executado.
O bloco finally será executado mesmo que o bloco try seja encerrado por uma instrução
return.
// try-catch-finally
try {
// statements
} catch (myError) {
// statements
} finally {
// statements
}
Sempre que o código gerar um erro, você poderá escrever manipuladores personalizados para
lidar com esse erros e executar as ações apropriadas. Talvez seja necessário carregar dados
externos de um serviço da Web ou de um arquivo de texto ou exibir uma mensagem de erro
para o usuário final. Você pode, até mesmo, usar o bloco catch para tentar se conectar a um
serviço da Web que informe um administrador sobre um determinado erro, a fim de que ele
possa verificar o funcionamento do aplicativo.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
4. O painel Output (Saída) exibirá a mensagem Unable to divide by zero (Não é possível
dividir por zero).
5. Retorne ao ambiente de criação e altere a seguinte linha de código:
var n2:Number = 0;
to
var n2:Number = 2;
6. Selecione Control > Enter (Entrar) para testar o documento novamente.
Se o valor n2 for igual a zero, ocorrerá um erro, que será detectado pelo bloco catch e
resultará na exibição de uma mensagem no painel Output. Se o valor y não for igual a
zero, o painel Output exibirá o resultado de n1 dividido por n2. O bloco finally será
executado, independentemente da geração de um erro, e excluirá os valores das variáveis
n1 e n2 do documento do Flash.
Você não está limitado a gerar novas instâncias da classe Error quando ocorrer um erro. Você
poderá também estender a classe Error para criar erros personalizados, conforme demonstrado
no exemplo a seguir.
7. Salve o documento do Flash e selecione Control > Test Movie para testar o arquivo no
ambiente de teste.
Como o valor de n2 é igual a 0, o Flash gera uma classe de erro personalizada
DivideByZeroException e exibe o erro Divide By Zero no painel Output. Se você
alterar o valor de n2 na segunda linha de 0 para -1 e testar novamente o documento do
Flash, verá a mensagem An unknown error occurred; n2 cannot be less than
zero (Erro desconhecido; n2 não pode ser menor que zero) no painel Output. A definição
do valor de n2 para qualquer número maior que 0 fará com que o resultado da divisão
apareça no painel Output. Para obter mais informações sobre como criar classes
personalizadas, consulte o Capítulo 7, “Classes”, na página 239.
Usando uma expressão condicional, você escreverá o mesmo código usando o seguinte
formato:
var numOne:Number = 8;
var numTwo:Number = 0;
trace((numTwo > 0) ? numOne/numTwo : "carrot");
Como pode ver, a sintaxe reduzida prejudica a legibilidade e, portanto, não é preferencial.
Caso precise usar operadores condicionais, coloque a condição inicial (antes do ponto de
interrogação [?]) entre parênteses. Isso ajudará a melhorar a legibilidade do ActionScript. O
código a seguir é um exemplo de ActionScript com melhor legibilidade:
var numOne:Number;
(numOne >= 5) ? numOne : -numOne;
É possível escrever uma instrução condicional que retorne um valor booleano, como mostra o
exemplo a seguir:
if (cartArr.length > 0) {
return true;
} else {
return false;
}
O segundo trecho é mais curto e tem menos expressões para avaliação, além de ser mais fácil
de ler e entender.
Ao escrever condições complexas, recomenda-se usar parênteses [()] para agrupar as
condições. Caso não use parênteses, você (ou outras pessoas que estejam usando o
ActionScript) poderá encontrar erros de precedência de operador. Para obter mais informações
sobre precedência de operador, consulte “Sobre associatividade e precedência de operadores”
na página 188.
Por exemplo, o código a seguir não usa parênteses ao redor da condição:
if (fruit == "apple" && veggie == "leek") {}
A maioria dos loops usa algum tipo de contador para controlar o número de execuções. Cada
execução de um loop é denominada iteração. Você pode declarar uma variável e escrever uma
instrução que aumente ou diminua a variável sempre que o loop for executado. Na ação for,
o contador e a instrução que aumenta a contagem fazem parte da ação.
Loop Descrição
for Repete uma ação usando um contador interno.
O tipo de loop mais comum é o for, que é repetido em um bloco de códigos um número
predefinido de vezes. Por exemplo, se você tiver um array de itens e quiser executar uma série
de instruções em cada item do array, use um loop for e execute-o de 0 até o número de itens
do array. Um outro tipo de loop é o for..in, que pode ser muito útil quando é necessário
repetir cada combinação nome/valor de um objeto e executar algum tipo de ação. Isso poderá
ser útil quando você estiver depurando projetos do Flash e quiser exibir os valores carregados
de fontes externas, como serviços da Web ou arquivos de texto/XML externos. Os dois
últimos tipos de loops (while e do..while) são úteis quando é necessário executar uma
repetição em uma série de instruções mas você não sabe necessariamente quantas vezes precisa
fazer isso. Nesse caso, é possível usar um loop while que execute a repetição desde que uma
determinada condição seja verdadeira.
O ActionScript pode repetir uma ação um número especificado de vezes ou enquanto uma
condição específica existir. Use as ações while, do..while, for e for..in para criar loops.
Esta seção contém informações gerais sobre esses loops. Consulte os procedimentos a seguir
para obter mais informações sobre cada um desses loops.
Você pode usar a instrução do...while para criar o mesmo tipo de loop que while. Em
um loop do..while, a expressão é avaliada na parte inferior do bloco de códigos, a fim de
que o loop sempre seja executado pelo menos uma vez.
Isso é mostrado no exemplo a seguir:
var i:Number = 4;
do {
myClip.duplicateMovieClip("newMC" + i, i, {_x:i*20, _y:i*20});
i--;
} while (i > 0);
Para obter mais informações sobre a instrução while, consulte “Usando os loops while”
na página 169.
Talvez seja necessário que o script itere um determinado tipo de filho; por exemplo, apenas
filhos de clipes de filme. Você pode fazer isso usando for..in com o operador typeof.
No exemplo a seguir, uma instância de clipe de filme filho (chamada instance2) está
dentro de um clipe de filme no Stage (Palco). Adicione o seguinte ActionScript ao Frame 1
(Quadro 1) da Timeline (Linha de tempo):
for (var myName in this) {
if (typeof (this[myName]) == "movieclip") {
trace("I have a movie clip child named " + myName);
}
}
Para obter mais informações sobre a instrução for..in, consulte “Usando os loops for..in”
na página 167.
A VI S O
Para obter mais informações sobre cada instrução, consulte as seções individuais que
acompanham este capítulo, como “Usando os loops while” na página 169 e suas respectivas
entradas em ActionScript 2.0 Language Reference (Referência à linguagem ActionScript 2.0).
Quando se trabalha com arrays, quer eles sejam simples ou complexos, é necessário conhecer
uma condição chamada loop infinito. O loop infinito, como o próprio nome já diz, é um loop
sem condição de término. Isso gera problemas, pois ocasiona falha no aplicativo Flash, faz
com que o documento do Flash pare de responder a um navegador da Web ou gera um
comportamento muito inconsistente do documento do Flash. O código a seguir é um
exemplo de loop infinito:
// BAD CODE- creates an infinite loop
// USE AT OWN RISK!
var i:Number;
for (i = 0; i < 10; i--) {
trace(i);
}
Quando se trabalha com um loop (especialmente com os loops while e do..while), sempre
verifique se é possível encerrá-lo adequadamente (ou seja, se ele não é encerrado com um loop
infinito).
Para obter mais informações sobre como controlar loops, consulte “Usando uma instrução
switch” na página 156.
Você deve fornecer três expressões a uma instrução for: uma variável que é definida com um
valor inicial, uma instrução condicional que determina quando o loop terminará e uma
expressão que altera o valor da variável com cada loop. Por exemplo, o código a seguir se
repete cinco vezes. O valor da variável i começa em 0 e termina em 4. A saída da variável são
os números de 0 a 4, cada um na sua própria linha.
var i:Number;
for (i = 0; i < 5; i++) {
trace(i);
}
6. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código no Flash
Player.
Observe como cinco clipes de filme se duplicaram na parte superior do Stage. Esse
ActionScript duplica o símbolo de clipe de filme na biblioteca e reposiciona os clipes no
Stage nas coordenadas x de 0, 100, 200, 300 e 400 pixels. O loop é executado cinco vezes,
com a variável i definida com um valor de 0 a 4. Na última iteração do loop, o valor de i
é incrementado para 4 e a segunda expressão (i < 5) não é mais verdadeira, o que fará
com o loop seja encerrado.
Lembre-se de incluir um espaço após cada expressão em uma instrução for. Para obter mais
informações, consulte %{for statement}% em ActionScript 2.0 Language Reference
(Referência à linguagem ActionScript 2.0).
Para obter mais informações sobre os objetos e as propriedades, consulte “Tipo de dados
Object” na página 83.
NO T A
Não será possível iterar as propriedades de um objeto se ele for um instância de uma
classe personalizada, a menos que a classe seja dinâmica. Mesmo com instâncias de
classes dinâmicas, você pode iterar somente as propriedades adicionadas
dinamicamente.
NO TA
As chaves ({}) usadas para delimitar o bloco de instruções a ser executado pela
instrução for..in não serão necessárias se apenas uma instrução for executada.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código no Flash
Player.
Ao testar o arquivo SWF, você verá o seguinte texto no painel Output:
myObj.name = Tara
myObj.age = 27
myObj.city = San Francisco
Uma desvantagem do uso de um loop while, em vez de um loop for, é que os loops infinitos
são mais fáceis de serem gerados com os loops while. O código de exemplo do loop for não
será compilado se você omitir a expressão que incrementa a variável do contador, mas o
exemplo do loop while é compilado mesmo que essa etapa seja omitida. Sem a expressão que
incrementa i, o loop se torna um loop infinito.
Para criar e usar um loop while em um arquivo FLA, siga este exemplo.
5. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
As seguintes informações são exibidas no painel Output:
name:Irving, age:34
name:Christopher, age:48
name:Walter, age:23
Para obter mais informações, consulte %{while statement}% em ActionScript 2.0 Language
Reference (Referência à linguagem ActionScript 2.0).
4. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código.
O seguinte será exibido no painel Output (Saída):
0
name: One
value: 1
1
name: Two
value: 2
Você sabe quantos itens há no array; portanto, pode repetir cada item usando um loop for
simples. Como cada objeto do array pode ter diferentes combinações nome/valor, é
possível usar um loop for..in para iterar cada valor e exibir os resultados no painel
Output.
O array anterior de nomes de meses também pode ser reescrito da seguinte maneira:
var myArr:Array = new Array("January", "February", "March", "April");
Um array é como uma estrutura de dados. É como um edifício comercial, onde cada andar
contém um tipo de dados diferente (como contabilidade no terceiro andar e engenharia no
quinto). Assim, é possível armazenar diferentes tipos de dados em um único array, incluindo
outros arrays. Cada andar desse prédio pode conter vários tipos de conteúdo (o executivo e a
contabilidade poderiam compartilhar o terceiro andar).
Um array contém elementos, que são equivalentes a cada andar do prédio. Cada elemento tem
uma posição numérica (o índice), que é como você indica a posição de cada elemento no array.
É semelhante ao número dos andares de um prédio. Cada elemento pode conter uma parte
dos dados (que pode ser um número, uma seqüência de caracteres, um valor booleano ou, até
mesmo, um array ou objeto) ou ficar vazio.
É possível também controlar e modificar o próprio array. Por exemplo, talvez seja necessário
mover o departamento de engenharia para o térreo do prédio. Os arrays permitem que você
mova os valores e altere o tamanho do array (digamos que ele permite renovar o prédio e
adicionar ou remover andares). Assim, é possível adicionar ou remover elementos e mover
valores para vários elementos.
Portanto, o prédio (o array) contém andares (os elementos), que são numerados (o índice), e
cada andar contém um ou mais departamentos (os valores).
Usando arrays
Existem diversas maneiras de usar os arrays. Utilize-os para armazenar listas de objetos, como
um grupo de itens retornados. Se você carregar dados dos servidores Web remotos, é provável
que receba até mesmo dados como um array de objetos aninhados. Geralmente, os arrays
contêm dados em um formato similar. Por exemplo, se você criar um aplicativo de áudio no
Flash, provavelmente terá a lista de reprodução de um usuário armazenada como um array de
informações de música, armazenada nos objetos. Cada objeto contém o nome da música, o
nome do artista, a duração da música, o local de um arquivo de som (como um MP3) ou
quaisquer outras informações que precisem ser associadas a um determinado arquivo.
O local de um item em um array chama-se índice. Todos os arrays começam com zero, o que
significa que o seu primeiro elemento é [0], o segundo é [1] e assim sucessivamente.
Existem diferentes tipos de arrays, que você descobrirá nas seções a seguir. Os arrays mais
comuns usam um índice numérico para pesquisar um determinado item em um array
indexado. O segundo tipo de array chama-se array associativo e usa um índice de texto, em vez
de um índice numérico, para pesquisar informações. Para obter mais informações sobre os
arrays comuns, consulte “Sobre arrays” na página 172. Para obter mais informações sobre os
arrays associativos, consulte “Criando arrays associativos” na página 181. Para obter mais
informações sobre as matrizes, consulte “Criando matrizes” na página 178. Para obter
informações sobre o operador de acesso de array, consulte “Usando operadores de ponto e de
acesso de array” na página 194.
Para obter mais informações sobre os loops for..in, consulte “Usando os loops for..in”
na página 167.
Para obter informações sobre como criar diferentes tipos de arrays, consulte as seguintes
seções:
■ “Criando arrays indexados” na página 178
■ “Criando matrizes” na página 178
■ “Criando arrays associativos” na página 181
Na pasta Samples do disco rígido, há um arquivo de exemplo de origem chamado array.fla.
Esse exemplo ilustra a manipulação de arrays usando o ActionScript. O código do exemplo
cria um array e classifica, adiciona e remove itens de dois componentes List. Localize o arquivo
de exemplo nos diretórios a seguir:
Talvez seja necessário saber porque é preciso criar uma variável temporária no exemplo
anterior. Se você copiou o conteúdo do índice de array 4 no índice de array 2 e vice-versa, o
conteúdo original do índice de array 2 se perderá. Ao copiar o valor de um dos índices de array
em uma variável temporária, é possível salvar o valor e copiá-lo com segurança de volta para o
código posteriormente. Por exemplo, se você usar o código a seguir, verá que o valor do índice
de array 2 (Accounting) se perdeu. Agora, você tem duas equipes de engenharia, mas
nenhuma de contabilidade.
// wrong way (no temporary variable)
buildingArr[2] = buildingArr[4];
buildingArr[4] = buildingArr[2];
trace(buildingArr); //
undefined,undefined,Engineering,undefined,Engineering
No exemplo anterior, você cria um array e o preenche com nomes de meses. O conteúdo e o
tamanho do array é exibido. O loop for itera cada item do array e converte o valor em
maiúsculas. Depois, o conteúdo do array é exibido novamente.
No ActionScript a seguir, se você criar um elemento no índice de array 5, o tamanho do array
retornará 6 (já que o array começa sempre com zero), em vez do número real de itens do array,
conforme seria o esperado:
var myArr:Array = new Array();
myArr[5] = "five";
trace(myArr.length); // 6
trace(myArr); // undefined,undefined,undefined,undefined,undefined,five
Para obter mais informações sobre os loops for, consulte “Usando os loops for”
na página 166. Para obter informações sobre o operador de acesso de array, consulte “Usando
operadores de ponto e de acesso de array” na página 194.
Na pasta Samples do disco rígido, há um arquivo de exemplo de origem chamado array.fla.
Esse exemplo ilustra a manipulação de arrays usando o ActionScript. O código do exemplo
cria um array e classifica, adiciona e remove itens de dois componentes List. Localize o arquivo
de exemplo nos diretórios a seguir:
■ No Windows, vá para a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples e Tutorials\Samples\ActionScript\Arrays.
■ No Macintosh, vá para Macintosh HD/Applications/Macromedia Flash 8/Samples e
Tutorials/Samples/ActionScript/Arrays.
Mesmo que você tenha excluído o item no índice de array 5, o tamanho do array ainda será 12
e o item no índice de array 5 será alterado para uma seqüência de caracteres em branco, em vez
de desaparecer completamente.
Na pasta Samples do disco rígido, há um arquivo de exemplo de origem chamado array.fla.
Esse exemplo ilustra a manipulação de arrays usando o ActionScript. O código do exemplo
cria um array e classifica, adiciona e remove itens de dois componentes List. Localize o arquivo
de exemplo nos diretórios a seguir:
■ No Windows, vá para a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples e Tutorials\Samples\ActionScript\Arrays.
■ No Macintosh, vá para Macintosh HD/Applications/Macromedia Flash 8/Samples e
Tutorials/Samples/ActionScript/Arrays.
Nesse código, você usará o literal de array para definir um novo array para o código. Esse
código equivale ao ActionScript escrito na etapa 2. Durante o teste do código, a mesma
saída aparece no painel Output.
Criando matrizes
No ActionScript, é possível implementar arrays como arrays aninhados, que são basicamente
arrays de arrays. Os arrays aninhados, também conhecidos como matrizes, podem ser
considerados grades. Portanto, durante a programação, você provavelmente usará matrizes
para modelar esses tipos de estruturas. Por exemplo, um tabuleiro de xadrez é uma grade de
oito colunas e linhas. Você pode modelar esse tabuleiro como um array com oito elementos,
cada um deles contendo também um array com oito elementos.
Para armazenar uma lista separada de tarefas para cada dia da semana, crie um matriz com um
elemento para cada dia da semana. Cada elemento contém um array indexado que armazena a
lista de tarefas.
A T E NÇ ÃO
Esse array, o twoDArray, consiste em dois elementos de array. Esses elementos são arrays
compostos por dois elementos. Nesse caso, twoDArray é o array principal que contém dois
arrays aninhados.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código. O seguinte
será exibido no painel Output (Saída):
one,two,three,four
Para recuperar elementos de uma matriz, use vários operadores de acesso de array ([]) após
o nome do array de nível superior. O primeiro [] refere-se ao índice do array de nível
superior. Os operadores de acesso de array subseqüentes referem-se aos elementos dos
arrays aninhados.
6. Selecione Control > Test Movie para testar o código. O seguinte será exibido no painel
Output:
one
four
Esse ActionScript cria um array 3 x 3 e define o valor de cada nó de array com seu índice.
Em seguida, você rastreia o array (mainArr).
3. Selecione Control > Test Movie para testar o código.
O seguinte será exibido no painel Output:
[0][0],[0][1],[0][2],[1][0],[1][1],[1][2],[2][0],[2][1],[2][2]
Também é possível usar loops for aninhados para iterar os elementos de uma matriz,
conforme mostrado no exemplo a seguir.
Nesse código, conforme mostrado no exemplo anterior, o loop externo itera cada elemento
de mainArray. O loop interno itera cada array aninhado e retorna cada nó de array.
Esse ActionScript itera os elementos do array. Use a propriedade length de cada array
como condição do loop.
4. Selecione Control > Test Movie para exibir os elementos mostrados no painel Output. O
seguinte será exibido no painel Output:
[0][0]
[0][1]
[0][2]
[1][0]
[1][1]
[1][2]
[2][0]
[2][1]
[2][2]
Para obter informações sobre como usar os arrays, consulte o “Usando arrays” na página 173.
Para obter informações sobre os elementos do array, consulte “Sobre adição e remoção de
elementos” na página 177. Para obter informações sobre o operador de acesso de array,
consulte “Usando operadores de ponto e de acesso de array” na página 194.
Ao usar arrays associativos, você pode chamar o elemento de array necessário usando uma
seqüência de caracteres em vez de um número, que é geralmente mais fácil de memorizar. A
desvantagem é que esses arrays não são tão úteis em um loop porque não utilizam números
como valor de índice. Eles são úteis quando é necessário realizar freqüentemente a pesquisa
por valores de chave. Por exemplo, se você tivesse um array de nomes e idades que precisasse
utilizar com muita freqüência, seria recomendável usar um array associativo.
O exemplo a seguir demonstra como criar um objeto e definir uma série de propriedades em
um array associativo.
A primeira linha do ActionScript define um novo objeto (someObj) que é utilizado como
array associativo. Depois disso, você define uma série de propriedades em someObj. Por
fim, você exibe uma propriedade selecionada através do operador de ponto e da sintaxe de
acesso de array.
N O TA
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript.
Se você usar o construtor Object para criar um array associativo, poderá tirar proveito da
inicialização do array com um literal de objeto. Uma instância da classe Object, também
chamada de objeto genérico, é funcionalmente idêntica a um array associativo. Na verdade, as
instâncias Object são basicamente arrays associativos. Recomenda-se usar arrays associativos
nas funcionalidades semelhantes a dicionário, nas quais é mais conveniente ter chaves de
seqüência de strings em vez de índices numéricos. Cada nome de propriedade do objeto
genérico atua como a chave que fornece acesso a um valor armazenado. Para obter mais
informações sobre os literais, consulte “Sobre literais” na página 138. Para obter mais
informações sobre as classes, consulte Capítulo 7, “Classes”, na página 239.
Esse código cria um array associativo chamado monitorInfo e usa um literal de objeto
para inicializar o array com duas combinações chave/valor.
N OT A
Depois que você usar um literal de objeto ou o construtor de classe Object para criar o
array, será possível adicionar novos valores ao array usando o operador de colchetes ([]) ou
o operador de ponto (.), conforme demonstrado nesse código. O código que você acabou
de digitar adiciona dois novos valores ao array monitorInfo.
5. Selecione Control > Test Movie.
O painel Output exibirá o seguinte texto:
16:10, 16.7 million
Observe que uma chave pode conter um caractere de espaço. Isso é possível com o
operador de colchetes, mas gerará um erro se você tentar isso com o operador de ponto. O
uso de espaços nos nomes de chave não é recomendado. Para obter mais informações sobre
os operadores de colchetes e operadores de ponto, consulte “Sobre operadores”
na página 185. Para obter mais informações sobre o código formatado corretamente,
consulte “Formatando a sintaxe do ActionScript” na página 799.
A segunda maneira de criar um array associativo é usar o construtor Array e o operador de
colchetes ([]) ou o operador de ponto (.) para adicionar as combinações chave/valor ao array.
Se você declarar o array associativo para ser do tipo Array, não é possível usar um literal de
objeto para inicializar o array.
NO T A
Não há nenhuma vantagem em usar o construtor Array para criar um array associativo.
O construtor Array é melhor para criar arrays indexados.
O próximo exemplo demonstra como usar o construtor Array para criar um array associativo.
Esse código cria um array associativo chamado monitorInfo usando o construtor Array e
adiciona uma chave chamada type e outra denominada resolution, junto com seus
respectivos valores.
Os arrays associativos são basicamente instâncias da classe Object e não existe nenhuma
vantagem em criar arrays associativos com o construtor Array. Mesmo que você crie um array
associativo com o construtor new Array(), não poderá usar nenhum método e propriedade
da classe Array (como sort() ou length) ao utilizar um array associativo. Para usar
combinações chave/valor em vez de índice numérico, use a classe Object em vez de um array
associativo.
Sobre operadores
Esta seção descreve regras gerais sobre tipos comuns, precedência e associatividade de
operadores.
Os operadores são caracteres que especificam como combinar, comparar ou alterar valores em
uma expressão. Uma expressão é qualquer instrução que o Flash possa avaliar e que retorne
um valor. Você pode criar uma expressão combinando operadores e valores ou chamando uma
função. Para obter mais informações sobre as expressões, consulte “Sobre sintaxe, instruções e
expressões” na página 120.
Por exemplo, uma expressão matemática usa operadores numéricos para manipular os valores
utilizados. Como exemplos de caracteres de operador, pode-se citar +, <, * e =. Uma expressão
consiste em operadores e operandos, os quais são qualquer combinação legal de símbolos do
ActionScript que representam um valor. Um operando é a parte do código na qual o operador
executa ações. Por exemplo, na expressão x + 2, x e 2 são operandos e + é um operador.
As expressões e os operadores são utilizados com freqüência no código. É possível combinar
operadores e valores para criar uma expressão e, ainda, chamar uma função.
N O TA
Esta seção descreve como usar cada tipo de operador. No entanto, não haverá tempo
de discutir cada um deles. Para obter informações sobre cada operador, incluindo os
operadores especiais que não se enquadram nas categorias a seguir, consulte
ActionScript 2.0 Language Reference (Referência à linguagem ActionScript 2.0).
// example two
var secondScore:Number = 1;
secondScore += 3;
trace("Example two: " + secondScore); // 4
Observe que a saída dessa instrução é 14, pois a multiplicação tem uma precedência de
operador mais alta. Portanto, 4 * 3 e avaliado primeiro e o resultado é somado com o número
2.
Dois ou mais operadores de mesma precedência podem aparecer na mesma expressão. Nesses
casos, o compilador usa as regras de associatividade para determinar qual operador deve ser
processado primeiro. Todos os operadores binários, exceto os de atribuição, possuem a
associatividade da esquerda para direita, o que significa que os operadores da esquerda são
processados antes dos operadores da direita. Os operadores de atribuição e o operador
condicional (?:) possuem a associatividade da direita para a esquerda, o que significa que os
operadores da direita são processados antes dos operadores da esquerda. Para obter mais
informações sobre os operadores de atribuição, consulte “Usando operadores de atribuição”
na página 204. Para obter mais informações sobre o operador condicional (?:), consulte
“Sobre o operador condicional” na página 210.
Por exemplo, considere os operadores de sinal de menor (<) e sinal de maior (>), que possuem
a mesma precedência. Se esses dois operadores forem utilizados na mesma expressão, o
operador da esquerda será processado primeiro porque ambos possuem a associatividade da
esquerda para direita. Isso significa que as duas instruções a seguir produzem a mesma saída:
trace(3 > 2 < 1); // false
trace((3 > 2) < 1); // false
Nesse ActionScript, o método sort() da classe Array reordena o conteúdo do array em ordem
alfabética. Observe que o valor “Egg” vem antes de “chicken” porque o E maiúsculo vem antes
do c minúsculo. Para comparar as seqüências de caracteres independentemente do uso de
maiúsculas e minúsculas, é necessário converter as seqüências de caracteres em maiúsculas ou
minúsculas antes de compará-las. Para obter mais informações sobre os operadores de
comparação, consulte “Sobre operadores de igualdade” na página 200 e “Usando operadores
relacionais e de igualdade” na página 200.
É possível usar os métodos toLowerCase() ou toUpperCase() para converter as seqüências
de caracteres e deixá-las com o mesmo uso de maiúsculas e minúsculas antes que elas sejam
comparadas. No exemplo a seguir, as duas seqüências de caracteres são convertidas em
minúsculas e comparadas. Agora, "chicken" virá antes de "egg":
var c:String = "chicken";
var e:String = "Egg";
trace(c.toLowerCase() < e.toLowerCase()); // true
NO T A
É possível usar operadores para manipular seqüências de caracteres. Use o operador de adição
(+) para concatenar operandos de seqüências de caracteres. Talvez você já tenha usado o
operador de adição para concatenar seqüências de caracteres ao escrever instruções trace. Por
exemplo, você poderia escrever o seguinte:
var myNum:Number = 10;
trace("The variable is " + myNum + ".");
No exemplo a seguir, a instrução trace usa o operador + para concatenar, e não para somar.
Quando você está trabalhando com seqüências de caracteres e números, o Flash, algumas
vezes, concatena em vez de somar numericamente.
Por exemplo, é possível concatenar duas seqüências de caracteres de diferentes variáveis em um
único campo de texto. No código ActionScript a seguir, a variável myNum é concatenada com
uma seqüência de caracteres, que, por sua vez, é exibida no campo de texto myTxt do Stage
(Palco).
this.createTextField("myTxt", 11, 0, 0, 100, 20);
myTxt.autoSize = "left";
var myNum:Number = 10;
myTxt.text = "One carrot. " + myNum + " large eggplants.";
myTxt.text += " Lots of vegetable broth.";
Esse código retorna o seguinte em um campo de texto com o nome de instância myTxt:
One carrot. 10 large eggplants. Lots of vegetable broth.
O exemplo anterior mostrou como é possível usar os operadores de adição (+) e atribuição de
adição (+=) para concatenar seqüências de caracteres. Observe como a terceira linha do código
usa o operador de adição para concatenar o valor da variável myNum no campo de texto e como
a quarta linha do código usa o operador de atribuição de adição para concatenar uma
seqüência de caracteres no valor existente do campo de texto.
Se apenas um dos operandos de seqüência de texto for uma seqüência de caracteres, o Flash
converterá o outro operando em seqüência de caracteres. Portanto, o valor de myNum será
convertido em seqüência de caracteres no exemplo anterior.
NO T A
Os operadores de ponto e de acesso de array são muito parecidos. O operador de ponto utiliza
um identificador como propriedade, mas o operador de acesso de array retorna o conteúdo
como nome e acessa o valor desse nome de propriedade. O operador de acesso de array
permite definir e recuperar dinamicamente nomes de instância e variáveis.
O operador de acesso de array será útil ser você não souber exatamente quais chaves estão em
um objeto. Quando isso ocorrer, use o loop for..in para iterar um objeto ou clipe de filme e
exibir seu conteúdo.
Para definir um valor na instância myClip da linha de tempo atual, use os operadores de
ponto ou de acesso de array, conforme demonstrado nesse ActionScript. Se você escrever
uma expressão dentro do operador de acesso de array, ele a avaliará primeiro e usará o
resultado como nome da variável.
5. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
O painel Output (Saída) exibirá o número 5.
6. Retorne ao ambiente de criação e substitua a primeira linha do ActionScript pelo seguinte:
myClip["spam"] = 10;
Quando esse código é rastreado, o texto exibido no painel Output (Saída) é o seguinte:
0
1
Para obter informações sobre como usar os operadores multiplicativos, consulte “Usando
operadores numéricos” na página 198.
Para obter informações sobre como usar operadores aditivos, consulte “Usando operadores
numéricos” na página 198.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript.
O bloco de códigos “Example one” rastreia, mas o bloco de códigos “Example two” não. O
primeiro exemplo usa um pré-incremento (++firstScore) para incrementar e calcular
firstScore antes que ele seja testado em relação ao número 30. Portanto, firstScore é
incrementado em 30 e, em seguida, testado em relação a esse número.
Entretanto, Example two usa um pós-incremento (secondScore++), que é avaliado após a
execução do teste. Portanto, 29 é comparado com 30 e incrementado em 30 após a
avaliação.
Para obter mais informações sobre a precedência de operador, consulte “Sobre associatividade
e precedência de operadores” na página 188.
Ao carregar dados de fontes externas (como arquivos XML, FlashVars, serviços da Web etc.), é
preciso ter cuidado ao trabalhar com operadores numéricos. Às vezes, o Flash trata os números
como seqüências de caracteres, pois o arquivo SWF não conhece o tipo de dados do número.
Nesse caso, você pode adicionar 3 e 7 para obter o resultado 37, pois os dois números são
concatenados como seqüências de caracteres, em vez de serem somados numericamente. Nesse
caso, é necessário converter manualmente os dados das seqüências de caracteres em números
através da função Number().
Para obter informações sobre como usar os operadores relacionais, consulte “Usando
operadores relacionais e de igualdade” na página 200.
Para obter informações sobre como usar operadores de igualdade, consulte “Usando
operadores relacionais e de igualdade” na página 200.
Quando você seleciona Control (Controlar) > Test Movie (Testar filme), a seqüência de
caracteres the array is empty aparece no painel Output.
É possível usar o operador de igualdade para comparar valores, mas não para definir valores.
Tente usar o operador de atribuição (=) para verificar a igualdade.
Nesse ActionScript, use o operador de igualdade (==) para verificar a igualdade. Verifique
se a variável myNum é igual a 2.
3. Selecione Control > Test Movie.
A seqüência de caracteres It equals 2 aparece no painel Output.
4. Retorne ao ambiente de criação e altere:
var myNum:Number = 2;
para:
var myNum:Number = 4;
para
if (myNum = 2) {
Primeiro, você define as variáveis numéricas: num1 enum2. Se você comparar as variáveis
usando o operador de igualdade, o Flash tentará converter os valores no mesmo tipo de dados
e, em seguida, comparará esses valores para constatar se são iguais. Quando o operador de
igualdade estrita (===) é utilizado, o Flash não tenta realizar nenhuma conversão de tipo de
dados antes de comparar os valores. Conseqüentemente, o Flash considera as variáveis como
dois valores separados.
No exemplo a seguir, você usará o operador de maior ou igual a (>=) para comparar valores e
executar o código com base no valor digitado por um usuário em um campo de texto.
this.createEmptyMovieClip("submit_mc", 30);
submit_mc.beginFill(0xFF0000);
submit_mc.moveTo(0, 0);
submit_mc.lineTo(100, 0);
submit_mc.lineTo(100, 20);
submit_mc.onRelease = function(evt_obj:Object):Void {
var myNum:Number = Number(myTxt.text);
if (isNaN(myNum)) {
trace("Please enter a number");
return;
}
if (myNum >= 10) {
trace("Your number is greater than or equal to 10");
} else {
trace("Your number is less than 10");
}
};
Para obter informações sobre como usar operadores de atribuição, consulte “Usando
operadores de atribuição” na página 204.
Também é possível usar o operador de atribuição para atribuir diversas variáveis na mesma
expressão. Na instrução a seguir, o valor 10 é atribuído às variáveis numOne, numTwo e
numThree.
var numOne:Number;
var numTwo:Number;
var numThree:Number;
numOne = numTwo = numThree = 10;
Ao trabalhar com o operador de atribuição, você poderá ter problemas se tentar somar os
valores de uma expressão, conforme mostrado no exemplo a seguir:
trace("the sum of 5 + 2 is: " + 5 + 2); // the sum of 5 + 2 is: 52
O Flash concatena os valores 5 e 2, em vez de somá-los. Para resolver isso, coloque a expressão
5+2 entre parênteses, conforme mostrado no código a seguir:
trace("the sum of 5 + 2 is: " + (5 + 2)); // the sum of 5 + 2 is: 7
Para obter informações sobre como usar os operadores lógicos, consulte “Usando operadores
lógicos” na página 206.
this.createEmptyMovieClip("submit_mc", 30);
submit_mc.beginFill(0xFF0000);
submit_mc.moveTo(0, 0);
submit_mc.lineTo(100, 0);
submit_mc.lineTo(100, 20);
submit_mc.lineTo(0, 20);
submit_mc.lineTo(0, 0);
submit_mc.endFill();
submit_mc._x = 110;
submit_mc.onRelease = function():Void {
var myNum:Number = Number(myTxt.text);
if (isNaN(myNum)) {
trace("Please enter a number");
return;
}
if ((myNum > 10) && (myNum < 20)) {
trace("Your number is between 10 and 20");
} else {
trace("Your number is NOT between 10 and 20");
}
};
Nesse ActionScript, você cria um campo de texto durante a execução. Se você digitar um
número no campo de texto e clicar no botão do Stage (Palco), o Flash usará o operador
lógico para exibir uma mensagem no painel Output (Saída). A mensagem dependerá do
número digitado no campo de texto.
Para obter informações sobre como usar operadores bit a bit, consulte “Usando operadores bit
a bit” na página 208. Para obter informações específicas sobre cada operador bit a bit, consulta
a entrada correspondente em ActionScript 2.0 Language Reference (Referência à Linguagem
ActionScript 2.0).
Para obter informações sobre como usar operadores bit a bit, consulte “Usando operadores bit
a bit” na página 208. Para obter mais informações sobre cada operador bit a bit, consulte a
entrada correspondente em ActionScript 2.0 Language Reference (Referência à linguagem
ActionScript 2.0).
Embora isso provavelmente não seja óbvio, os valores numéricos das opções de classificação
são, na verdade, dígitos bit a bit (binários ou de base 2). O valor de constante
Array.CASEINSENSITIVE equivale ao valor numérico 1, que também é o valor binário 1. O
valor de constante Array.DECENDING tem um valor numérico 2 ou um valor binário 10.
Trabalhar com números binários pode ser confuso. O valor binário tem apenas dois valores
possíveis, 1 ou 0. É por isso que o valor 1 é representado como 10. Para exibir o número 3
como valor binário, ele seria 11 (1+10). O número 4 representado em binário é 100, o
número 5 em binário é 101, e assim sucessivamente.
Para obter informações sobre como usar o operador condicional e um exemplo, consulte
“Sobre o operador condicional e a sintaxe alternativa” na página 160.
Quando você chamar Math.round() nesse exemplo, os pontos serão arredondados para o
número inteiro mais próximo (85) e exibidos no painel Output. Se você multiplicar o
número por 100, antes de chamar Math.round() e dividi-lo por 100, faça com que o
Flash arredonde o número para 2 casas decimais. Esse procedimento retornará uma
pontuação mais precisa.
4. Tente alterar a variável correctAnswers para 3 e selecione Control > Test Movie para
testar o arquivo SWF novamente.
Caso esteja desenvolvendo um aplicativo de teste, talvez seja necessário criar uma série de
perguntas verdadeiro/falso ou de múltipla escolha usando os componentes RadioButton e
Label. Depois que os usuários terminarem de responder cada pergunta e clicar no botão
Submit (Enviar), compare as respostas com um gabarito e calcule os pontos dos usuários.
Funções e métodos 6
Entender funções é importante quando se está escrevendo ActionScript, criando classes e
usando métodos. Há diversos tipos de funções com os quais você irá trabalhar. Nesse capítulo,
você aprenderá sobre funções e métodos: como usá-los nos aplicativos quando se usa classes
internas e como criá-los. No Capítulo 7, “Classes,”, você criará classes personalizadas para as
quais escreverá funções regularmente. Você também aprenderá a criar funções em arquivos de
classe do ActionScript.
Você pode usar funções no seu código para adicionar interatividade, animações e outros
efeitos aos aplicativos. Esse capítulo aborda os tipos de função que você pode criar nos
aplicativos Flash. Para obter informações sobre quais são essas funções e esses métodos, assim
como exercícios nos quais você poderá criar e usar funções e métodos no Flash, consulte os
tópicos a seguir:
Sobre funções e métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Noções básicas sobre métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235
213
Se você passar valores como parâmetros para uma função, esta poderá executar cálculos
usando os valores fornecidos. Cada função tem suas próprias características e algumas delas
exigem que você passe determinados tipos ou números de valores. Se você passar mais
parâmetros do que o necessário para a função, ela ignorará os valores extras. Se algum
parâmetro obrigatório não for passado, a função atribuirá o tipo de dados undefined aos
parâmetros vazios. o que poderá gerar erros durante a execução. Uma função também pode
retornar valores (consulte “Retornando valores de funções” na página 233).
N OT A
Para chamar uma função, a definição dessa função deve estar em um quadro que já
tenha sido reproduzido.
Uma função bem escrita pode ser considerada uma “caixa-preta”. Se ela tiver comentários
cuidadosamente inseridos a respeito de sua entrada, saída e objetivo, um usuário da função
não precisará compreender exatamente como ela funciona internamente.
A sintaxe básica para uma função com nome simples é:
function traceMe() {
trace("sua mensagem");
}
traceMe();
Para obter informações sobre a criação de funções com nome, consulte “Criando funções com
nome” na página 219.
A sintaxe básica de uma função com nome simples que é criada no exemplo anterior passando
um parâmetro, yourMessage, é:
function traceMe(yourMessage:String) {
trace(yourMessage);
}
traceMe("Como vai você?");
Como alternativa, se você quiser passar diversos parâmetros, você poderia usar o seguinte
código:
var yourName:String = "Ester";
var yourAge:String = "65";
var favSoftware:String = "Flash";
function traceMe(favSoftware:String, yourName:String, yourAge:String) {
trace("I'm " + yourName + ", I like " + favSoftware + ", and I'm " +
yourAge + ".");
}
traceMe(favSoftware,yourName,yourAge);
Para obter mais informações sobre como passar parâmetros, consulte “Passando parâmetros
para uma função” na página 231.
Para obter informações sobre criação de código usando Script Assist, consulte
“Criando ActionScript com o Script Assist” na página 368, “Criando um evento
startDrag/stopDrag com o Script Assist” na página 372 e o tutorial ActionScript:Use
Script Assist Mode (que começa com “Open the starter document” on page 211).
Para obter mais informações sobre funções e métodos, consulte os tópicos a seguir:
■ “Sobre tipos de métodos e funções” na página 215
Para obter informações sobre criação de arquivos de classe, tais como o seguinte,
consulte o Capítulo 7, “Classes”, na página 239.
class Person {
public static var numPeople:Number = 0;
// membros de instância
private var _speed:Number;
// construtor
public function Person(speed:Number) {
Person.numPeople++;
this._speed = speed;
}
// métodos estáticos
public static function getPeople():Number {
return Person.numPeople;
}
Para obter uma demonstração completa de como criar métodos como os do código de
exemplo anterior, consulte o Capítulo 7, “Classes”, na página 239. Os métodos usados no
código devem pertencer a uma classe que seja interna à linguagem ActionScript. MovieClip e
Math são exemplos de classes de nível superior que podem ser usadas em um aplicativo.
Quando são usados no código métodos dessas classes, isso significa que eles são funções
criadas na classe interna (semelhantes ao código de exemplo anterior). Opcionalmente, você
poderia usar métodos de uma classe personalizada que tivesse criado.
As funções não pertencentes a uma classe são chamadas de funções de nível superior (às vezes
chamadas de pré-definidas ou funções internas), significando que você pode chamá-las sem um
construtor. Exemplos de funções que são internas ao nível superior da linguagem ActionScript
são trace() e setInterval().
Para adicionar uma chamada de função de nível superior ao código, basta adicionar uma única
linha de código no painel Script do painel Actions (Ações). Por exemplo, digite o seguinte:
trace("minha mensagem");
Quando o arquivo SWF é testado com essa única linha de código, a função de nível superior
trace() é chamada e o texto é exibido no painel Output (Saída).
Quando desejar atribuir um método a uma propriedade, lembre-se de que é necessário omitir
os parênteses após o nome do método porque você está passando uma referência à função:
my_mc.myMethod = aFunction;
Para obter mais informações sobre funções de nível superior, consulte “Sobre funções
internas e de nível superior” na página 217.
Também há várias outras maneiras de se definir funções. Para obter mais informações sobre
cada tipo de função, consulte as seguintes seções:
■ “Sobre funções internas e de nível superior” na página 217
■ “Criando funções com nome” na página 219
■ “Criando funções anônimas e de retorno de chamada” na página 220
■ “Sobre literais de função” na página 222
■ “Especificando e chamando funções definidas pelo usuário” na página 225
■ “Sobre funções construtoras” na página 223
Para obter informações sobre a criação e o uso de funções e métodos, consulte as seguintes
seções relacionadas. Para obter informações sobre o uso de funções, consulte “Usando funções
no Flash” na página 227. Para obter informações sobre o uso de métodos, consulte “Noções
básicas sobre métodos” na página 235.
N OT A
Para obter informações sobre criação de código usando Script Assist, consulte
“Criando ActionScript com o Script Assist” na página 368, “Criando um evento
startDrag/stopDrag com o Script Assist” na página 372 e o tutorial ActionScript:Use
Script Assist Mode (que começa com “Open the starter document” on page 211).
Para chamar uma função, a definição dessa função deve estar em um quadro que já
tenha sido reproduzido.
As funções de nível superior são fáceis de usar. Para chamar uma função, basta usar o nome da
função e passar os parâmetros necessários: (Para obter informações sobre parâmetros
necessários, consulte a entrada para a função em ActionScript 2.0 Language Reference,
Referência da linguagem ActionScript). Por exemplo, adicione o seguinte ActionScript ao Frame
1 (Quadro 1) da Timeline (Linha de tempo):
trace("minha mensagem");
Ao testar o arquivo SWF, minha mensagem é exibida no painel Output (Saída). Dois outros
exemplos de funções de nível superior são setInterval() e getTimer(). O próximo
exemplo mostra como usar essas duas funções em conjunto. Adicione o seguinte código ao
Frame 1 (Quadro 1) da Timeline (Linha de tempo):
function myTimer():Void {
trace(getTimer());
}
var intervalID:Number = setInterval(myTimer, 100);
Esse código cria um temporizador simples usando getTimer() e usa as funções de nível
superior setInterval() e trace() para exibir o número de milissegundos desde que o
arquivo SWF começou a ser reproduzido no Flash Player.
Chamar uma função de nível superior é como chamar uma função definida pelo usuário. Para
obter mais informações, consulte “Especificando e chamando funções definidas pelo usuário”
na página 225. Para obter informações sobre cada função, consulte a entrada correspondente
em ActionScript 2.0 Language Reference (Referência da linguagem ActionScript).
No trecho de código anterior, observe que o manipulador de eventos onLoad() usa uma
função anônima para manipular o evento onLoad().
Para obter mais informações sobre funções de retorno de chamada, consulte o Capítulo 10,
“Manipulando eventos”, na página 347.
Você também pode usar funções anônimas com a função setInterval(), conforme
mostrado no código a seguir, que usa setInterval() para chamar a função anônima
aproximadamente a cada 1000 milissegundos (1 segundo):
setInterval(function() {trace("intervalo");}, 1000);
Você pode usar funções com nome em vez de funções anônimas. Funções com nome são
geralmente mais fáceis de ler e entender (exceto em algumas circunstâncias, tais como funções
de retorno de chamada). Também é possível fazer referência antecipada a uma função com
nome; isso significa que ela é referenciada antes de existir em uma Timeline.
Você não pode referenciar uma função anônima em nenhuma parte do código (a menos que
atribua a função a uma variável), da mesma maneira que pode ser feito com funções com
nome. Por exemplo, suponha que você tenha funções anônimas no Frame 5 do arquivo FLA,
como as seguintes:
//com um clipe de filme chamado my_mc que estende uma timeline
stop();
var myWidth = function () {
Você também pode colocar myWidth() em qualquer quadro após o quadro que contém a
função myWidth.
Ao definir uma função com nome, chamá-la em um script de quadro funciona, embora o
código equivalente com uma função anônima não funcione:
// o código a seguir funciona porque você está chamando uma função com nome:
myWidth();
function myWidth() {
trace("foo");
}
// o código a seguir não funciona porque você está chamando uma função
anônima:
myWidth();
var myWidth:Function = function () {
trace("foo");
};
Para obter mais informações, consulte “Criando funções com nome” na página 219.
N OT A
Para obter informações sobre criação de código usando Script Assist, consulte
“Criando ActionScript com o Script Assist” na página 368, “Criando um evento
startDrag/stopDrag com o Script Assist” na página 372 e o tutorial ActionScript:Use
Script Assist Mode (que começa com “Open the starter document” on page 211).
Quando você redefine um literal de função, a definição da nova função substitui a antiga.
Você pode armazenar um literal de função em uma variável para acessá-lo posteriormente em
seu código. Para fazer isso, use uma função anônima. Para obter mais informações, consulte
“Criando funções anônimas e de retorno de chamada” na página 220.
Se nenhuma função construtora for explicitamente declarada, ou seja, se você não criar
uma função cujo nome corresponda ao da classe, o compilador automaticamente criará
uma função construtora vazia.
Uma classe pode conter apenas uma função construtora; funções construtoras sobrecarregadas
não são permitidas no ActionScript 2.0. Além disso, uma função construtora não pode ter um
tipo de retorno. Para obter mais informações sobre a criação de funções construtoras em
arquivos de classe, consulte “Criando a função construtora” na página 283.
Para obter informações sobre _global e escopo, consulte “Sobre variáveis e escopo”
na página 101.
Para definir uma função de timeline, use a instrução function seguida do nome da função,
dos parâmetros a serem passados para a função e das instruções do ActionScript que indicam o
que ela faz.
O exemplo a seguir é uma função denominada areaOfCircle com o parâmetro radius:
function areaOfCircle(radius:Number):Number {
return (Math.PI * radius * radius);
}
trace (areaOfCircle(8));
Também há várias outras maneiras de se definir funções. Para obter mais informações sobre
cada tipo de função, consulte as seguintes seções:
■ “Sobre funções internas e de nível superior” na página 217
■ “Criando funções com nome” na página 219
■ “Criando funções anônimas e de retorno de chamada” na página 220
■ “Sobre literais de função” na página 222
■ “Sobre funções construtoras” na página 223
■ “Especificando e chamando funções definidas pelo usuário” na página 225
Para obter informações sobre criação de código usando Script Assist, consulte
“Criando ActionScript com o Script Assist” na página 368, “Criando um evento
startDrag/stopDrag com o Script Assist” na página 372 e o tutorial ActionScript:Use
Script Assist Mode (que começa com “Open the starter document” on page 211).
O exemplo a seguir usa um caminho relativo para chamar a função list() definida no clipe
de filme functionsClip:
this._parent.functionsClip.list(6);
Para obter informações sobre a criação de funções com nome, consulte “Criando funções com
nome” na página 219. Para obter mais informações sobre parâmetros, consulte “Passando
parâmetros para uma função” na página 231.
Você também pode definir suas próprias funções com nome. Por exemplo, a seguinte função
com nome helloWorld() é definida pelo usuário:
function helloWorld() {
trace("Olá mundo!");
};
O código anterior cria uma função definida pelo usuário chamada traceHello() que
utiliza um argumento, name, e apresenta uma mensagem de saudação. Para chamar uma
função definida pelo usuário, você pode chamar traceHello a partir da mesma timeline
que a definição da função e passar um único valor de seqüência de caracteres.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Para obter mais informações sobre funções com nome, consulte “Criando funções com nome”
na página 219. As classes contêm várias funções definidas pelo usuário. Para obter
informações sobre a criação de funções em arquivos de classes, consulte “Usando funções no
Flash” na página 227. Consulte também as seguintes seções do Capítulo 7, “Classes”: “Usando
métodos e propriedades de um arquivo de classe” na página 260, “Sobre propriedades
(membros) e métodos públicos, privados e estáticos” na página 262 e “Sobre membros de
classe” na página 265.
O exemplo a seguir mostra como criar e chamar uma função em um arquivo FLA.
Esse ActionScript define a função (com nome e definida pelo usuário) chamada
helloWorld(). Se você testar o arquivo SWF desta vez, nada acontecerá. Por exemplo,
você não verá a instrução trace no painel Output (Saída). Para ver essa instrução, é
necessário chamar a função helloWorld().
Em geral, as funções anônimas são de mais difícil leitura. Compare o código apresentado a
seguir com o anterior.
var myCircle:Function = function(radius:Number):Number {
// insira o bloco de função aqui
return (Math.PI * radius * radius);
};
trace(myCircle(5));
Também é possível colocar funções em arquivos de classes ao usar o ActionScript 2.0, como
mostra este exemplo:
class Circle {
public function area(radius:Number):Number {
return (Math.PI * Math.pow(radius, 2));
}
public function perimeter(radius:Number):Number {
return (2 * Math.PI * radius);
}
public function diameter(radius:Number):Number {
return (radius * 2);
}
}
Para obter mais informações sobre a criação de funções em um arquivo de classe, consulte o
Capítulo 7, “Classes”, na página 239.
3. Selecione File (Arquivo) > Save (Salvar) para salvar o arquivo do ActionScript.
4. Crie um novo documento do Flash e salve-o como classFunctions.fla no mesmo diretório
que Utils.as.
5. Selecione Window > Actions (Ações) para abrir o painel Library (Biblioteca).
6. Digite o seguinte ActionScript no painel Script:
var randomMonth:Number = Utils.randomRange(0, 11);
var min:Number = Utils.arrayMin([3, 3, 5, 34, 2, 1, 1, -3]);
var max:Number = Utils.arrayMax([3, 3, 5, 34, 2, 1, 1, -3]);
7. Selecione Control (Controlar) > Test Movie (Testar filme) para testar os documentos. O
seguinte texto é exibido no painel Output:
month: 7
min -3
max 34
NO TA
Para obter informações sobre criação de código usando Script Assist, consulte
“Criando ActionScript com o Script Assist” na página 368, “Criando um evento
startDrag/stopDrag com o Script Assist” na página 372 e o tutorial ActionScript:Use
Script Assist Mode (que começa com “Open the starter document” on page 211).
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Após passar o parâmetro, você poderá passar um valor para a função ao chamá-la. Esse valor é
exibido no painel Output (Saída), da seguinte maneira:
myFunc("Isso é o que é mostrado");
Ao chamar a função, você deve sempre passar o número especificado de parâmetros, a menos
que a sua função verifique se há valores indefinidos e defina valores padrão de acordo. A
função substitui os valores passados para os parâmetros na definição da função; se algum
parâmetro estiver faltando, o Flash define o valor como undefined. Você passa parâmetros
regularmente para funções ao criar o código ActionScript.
Também é possível passar vários parâmetros para uma função, o que poderá ser tão simples
como mostrado a seguir:
var birthday:Date = new Date(1901, 2, 3);
trace(birthday);
Cada parâmetro é separado por uma vírgula. Várias funções internas da linguagem
ActionScript têm vários parâmetros. Por exemplo, o método startDrag() da classe
MovieClip utiliza cinco parâmetros, lockCenter, left, top, right e bottom:
startDrag(lockCenter:Boolean, left:Number, top:Number, right:Number,
bottom:Number):Void
As primeiras linhas de código criam uma função definida pelo usuário chamada
traceMe(), que utiliza um único parâmetro, yourMessage. A última linha de código
chama a função traceMe() e passa o valor da seqüência de caracteres “Como vai você?”.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
O próximo exemplo demonstra como passar vários parâmetros para uma função.
Selecione Control (Controlar) > Test Movie (Testar filme) para testar a função aninhada. As
funções formatText() e changeString() são aplicadas à seqüência de caracteres quando a
função formatText() é chamada.
O método sortOn() da classe Array é usado para criar um novo objeto Array chamado
userArr. O array é preenchido com três objetos que contêm um nome e uma idade; em
seguida, ele é classificado com base no valor da propriedade firstname de cada objeto.
Finalmente, você executará uma repetição em cada item do array e exibirá o nome no
painel Output (Saída); depois, classificará os nomes em ordem alfabética pela letra inicial.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF.
O código a seguir é exibido no painel Output:
Dan
George
Socks
Utilize verbos para a maioria dos métodos, pois eles executam uma operação em um objeto.
Assim como as variáveis, você não pode usar caracteres especiais e o nome do método não
pode começar com número. Para obter mais informações, consulte “Convenções de atribuição
de nome” na página 769.
Classes 7
Este capítulo mostra como usar e criar classes com o ActionScript 2.0. As classes são o
componente básico do ActionScript 2.0 e desempenham um papel mais importante do que
nas versões anteriores do Macromedia Flash. Neste capítulo, você aprenderá sobre a
importância das classes no Flash.
O capítulo inicia com uma explicação da terminologia fundamental e de sua relação com as
classes e a OOP (Object-Oriented Programming, Programação orientada a objeto). Em
seguida, você examina um arquivo de classe de exemplo para compreender como cada seção
do arquivo funciona e como a classe está organizada. O restante do capítulo mostra como criar
suas próprias classes personalizadas e usá-las nos documentos do Flash. Você aprenderá sobre o
caminho de classe do Flash e como uma classe deve ser documentada para que outras pessoas
possam compreender facilmente o seu código e o objetivo geral da classe ao lerem ou usarem o
código.
Esta seção contém exemplos de códigos para familiarizá-lo com a criação de classes no
ActionScript 2.0. Ao concluir este capítulo, você deverá ser capaz de criar um arquivo de classe
típico, compreender e reconhecer as classes do Flash, e ler arquivos de classes de outros
usuários.
Se não estiver familiarizado com os scripts do ActionScript 2.0, consulte o Capítulo 5,
“Fundamentos da sintaxe e da linguagem”, na página 119 e o Capítulo 19, “Melhores práticas
e convenções de codificação para ActionScript 2.0”, na página 767.
239
Para obter mais informações sobre como trabalhar com classes personalizadas e internas,
consulte os seguintes tópicos:
Sobre a programação orientada a objeto e o Flash . . . . . . . . . . . . . . . . . . . . . . . . . 240
Criando arquivos de classes personalizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Sobre como trabalhar com classes personalizadas em um aplicativo . . . . . . . . . .252
Exemplo: Criando classes personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Exemplo: Usando arquivos de classes personalizados no Flash. . . . . . . . . . . . . . . 291
Atribuindo uma classe a símbolos no Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Compilando e exportando classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296
Noções básicas sobre classes e escopo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Sobre classes de nível superior e internas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Sobre como trabalhar com classes internas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
240 Classes
O Flash Player 8, disponível no Flash Basic 8 e no Flash Professional 8, adiciona vários novos
recursos à linguagem ActionScript, como efeitos de filtro, upload e download de arquivos, e a
API (Application Programming Interface, Interface de programação de aplicativos) externa.
Como sempre, o ActionScript 2.0 fornece várias palavras-chave e conceitos avançados e
familiares de OOP (como classe, interface e pacote) encontrados em outras linguagens
de programação, como Java. A linguagem de programação permite criar estruturas de
programa reutilizáveis, dimensionáveis, resistentes e fáceis de manter. Ela também diminui o
tempo de desenvolvimento fornecendo aos usuários assistência completa sobre codificação e
informações de depuração. Você pode usar o ActionScript 2.0 para criar objetos e estabelecer
herança, bem como para criar classes personalizadas e estender as classes de nível superior e
internas do Flash. Neste capítulo, você aprenderá a criar classes e a usar classes personalizadas.
O Flash Basic 8 e o Flash Professional 8 contêm aproximadamente 65 classes de nível superior
e internas que fornecem desde tipos de dados básicos, ou “primitivos” (Array, Boolean, Date e
assim por diante), a erros e eventos personalizados, além de várias maneiras de carregar
conteúdo externo (XML, imagens, dados binários brutos e muito mais). Você também pode
criar suas próprias classes personalizadas e integrá-las aos documentos do Flash ou, até mesmo,
estender as classes de nível superior e adicionar sua própria funcionalidade ou modificar a
funcionalidade existente. Por exemplo, este capítulo mostra como criar uma classe Person
personalizada em “Sobre membros de classe” na página 265, que contém propriedades
personalizadas relativas ao nome e à idade de uma pessoa. Depois, você pode tratar essa classe
personalizada como um novo tipo de dados em seus documentos e criar uma nova instância
da classe usando o operador new.
Para obter mais informações sobre como trabalhar com programação orientada a objeto,
consulte os seguintes tópicos:
■ “As vantagens de usar classes” na página 241
■ “Sobre pacotes” na página 242
■ “Sobre valores e tipos de dados” na página 245
■ “Princípios da programação orientada a objeto” na página 246
Sobre pacotes
Ao criar classes, organize seus arquivos de classes do ActionScript em pacotes. Um pacote é um
diretório que contém um ou mais arquivos de classes e reside em um diretório determinado do
caminho de classe (consulte “Sobre a importação de arquivos de classes” na página 254 e
“Sobre a definição e a modificação do caminho de classe” na página 255). Um pacote pode,
por sua vez, conter outros pacotes, chamados subpacotes, cada um com seus próprios arquivos
de classes.
Assim como as variáveis, os nomes de pacotes podem ser identificadores; ou seja, o primeiro
caractere pode ser uma letra, sublinhado (_) ou cifrão ($) e os caracteres seguintes podem ser
uma letra, número, sublinhado ou cifrão. Existem maneiras mais usadas de atribuir nomes a
pacotes, por exemplo, a recomendação de evitar usar caracteres sublinhados ou de cifrão. Para
obter mais informações sobre atribuição de nome a pacotes, consulte “Atribuindo nomes a
pacotes” na página 777.
Os pacotes normalmente são usados para organizar classes relacionadas. Por exemplo, você
pode ter três classes relacionadas, Square, Circle e Triangle, que são definidas em Square.as,
Circle.as e Triangle.as. Suponha que você tenha salvo os arquivos ActionScript em um
diretório especificado do caminho de classe, como mostra o seguinte exemplo:
242 Classes
// Em Square.as:
class Square {}
// Em Circle.as:
class Circle {}
// Em Triangle.as:
class Triangle {}
Como esses três arquivos de classes estão relacionados, você pode decidir colocá-los em um
pacote (diretório) chamado Shapes. Nesse caso, o nome de classe totalmente qualificado
conterá o caminho do pacote e o nome de classe simples. Os caminhos de pacotes são
denotados com a sintaxe de ponto (.), na qual cada ponto indica um subdiretório.
Por exemplo, se você tivesse colocado no diretório Shapes cada arquivo ActionScript que
define uma forma, seria necessário alterar o nome de cada arquivo de classe para refletir o novo
local, da seguinte maneira:
// Em Shapes/Square.as:
class Shapes.Square {}
// Em Shapes/Circle.as:
class Shapes.Circle {}
// Em Shapes/Triangle.as:
class Shapes.Triangle {}
Para fazer referência a uma classe que se encontra em um diretório de pacote, você poderá
especificar seu nome de classe totalmente qualificado ou importar o pacote usando a instrução
import. Para obter mais informações, consulte “Trabalhando com pacotes” na página 244.
Para usar a instrução import, é necessário especificar ActionScript 2.0 e Flash Player 6
ou uma versão posterior na guia Flash da caixa de diálogo Publish Settings
(Configurações de publicação) do arquivo FLA.
A instrução import permite acessar classes sem especificar os nomes totalmente qualificados.
Por exemplo, se você quiser usar a classe BlurFilter em um script, você deve referir-se a ela pelo
nome totalmente qualificado (flash.filters.BlurFilter) ou importá-la; se você a importar,
poderá então fazer referência a ela pelo nome da classe (BlurFilter). O código ActionScript a
seguir demonstra as diferenças entre usar a instrução import e usar nomes de classe
totalmente qualificados.
Se você não importar a classe BlurFilter, o seu código precisa usar o nome de classe totalmente
qualificado (nome do pacote seguido do nome da classe) a fim de usar o filtro:
// sem importação
var myBlur:flash.filters.BlurFilter = new flash.filters.BlurFilter(10, 10,
3);
O mesmo código, escrito com uma instrução import, permite acessar o BlurFilter usando
somente o nome da classe em vez de sempre ter que usar o nome totalmente qualificado. Isso
pode representar menos tempo de digitação e reduzir a possibilidade de erros:
// com importação
import flash.filters.BlurFilter;
var myBlur:BlurFilter = new BlurFilter(10, 10, 3);
244 Classes
import flash.filters.BlurFilter;
import flash.filters.DropShadowFilter;
import flash.filters.GlowFilter;
Usando instruções import individuais para cada classe em um pacote pode tornar-se muito
desgastante e pode levar a erros de digitação. O segundo método de importação de classes em
um pacote é usar um caractere curinga que importa todas as classes dentro de um determinado
nível de um pacote. O ActionScript a seguir mostra um exemplo de importação com caractere
curinga:
import flash.filters.*; // importa cada classe dentro de um pacote
flash.filters
A instrução import aplica-se apenas ao script atual (quadro ou objeto) no qual ela é chamada.
Por exemplo, suponha que você importe todas as classes do pacote macr.util no Frame 1
(Quadro 1) de um documento do Flash. Nesse quadro, você pode fazer referência às classes
desse pacote por seus nomes de classe em vez de usar os nomes totalmente qualificados. Se
você quisesse usar o nome de classe em outro script de quadro, no entanto, você deveria
referenciar classes naquele pacote pelos nomes totalmente qualificados ou adicionar uma
instrução import ao outro quadro que importa as classes naquele pacote.
Ao usar instruções import, também é importante observar que classes são importadas
somente para o nível especificado. Por exemplo, se você importou todas as classes no pacote
mx.transitions, somente as classes no diretório /transitions/ serão importadas, e não todas as
classes dentro dos subdiretórios (tais como as classes no pacote mx.transitions.easing).
DICA
Se você importar uma classe, mas não a usar no script, a classe não será exportada
como parte do arquivo SWF. Isso significa que você pode importar pacotes grandes
sem se preocupar com o tamanho do arquivo SWF. O bytecode associado a uma classe
será incluído em um arquivo SWF somente se a classe for realmente usada.
Objetos
Considere um objeto do mundo real, como, por exemplo, um gato. Pode-se dizer que os gatos
têm propriedades (ou estados) como nome, idade e cor; eles também têm comportamentos,
como dormir, comer e ronronar. Na OOP, os objetos também têm propriedades e
comportamentos. Com as técnicas orientadas a objeto, é possível modelar um objeto do
mundo real (como um gato) ou um objeto mais abstrato (como um processo químico).
N OT A
Para obter mais informações sobre objetos, consulte “Tipo de dados Object” na página 83.
246 Classes
Para obter mais informações sobre instâncias e membros de classe, consulte “Sobre membros
de classe” na página 265 e “Usando membros de classe” na página 269.
Herança
Uma das principais vantagens da OOP é a capacidade de criar subclasses de (ou estender) uma
classe; a subclasse herda todas as propriedades e métodos da classe. A subclasse normalmente
define métodos e propriedades adicionais ou sobrescreve métodos ou propriedades definidas
na superclasse. As subclasses também substituem (fornecem suas próprias definições para) os
métodos definidos em uma superclasse.
Uma das principais vantagens de usar uma estrutura de superclasse/subclasse é que é mais fácil
reutilizar código semelhante entre diversas classes. Por exemplo, você poderia criar uma
superclasse chamada Animal, que contém as características e os comportamentos comuns de
todos os animais. Em seguida, você poderia criar várias subclasses que herdam as
características da superclasse Animal e adicionar características específicas a esse tipo de
animal.
Você poderia criar uma classe Cat que herda características de outra classe. Por exemplo, você
pode criar uma classe Mamifero, que define certas propriedades e comportamentos comuns a
todos os mamíferos. em seguida, criar uma classe Cat que estenda essa classe. Outra subclasse,
como a classe Siamese, poderia estender a classe Cat (ou criar uma subclasse dela) e assim por
diante.
Criar subclasses permite reutilizar o código. Em vez de recriar todos os códigos comuns às
duas classes, você pode simplesmente estender uma classe existente.
DICA
Para obter mais informações sobre herança e subclasses, consulte o Capítulo 8, “Herança”, na
página 319.
Interfaces
Na OOP, as interfaces podem ser descritas como modelos de definições de classes, e as classes
que implementam interfaces precisam implementar esse modelo de métodos. Usando a
analogia do gato, uma interface é semelhante à planta arquitetônica de um gato: a planta
informa de que partes você precisa, mas não necessariamente como essas partes são montadas,
ou como as partes funcionam.
Encapsulamento
Em um projeto orientado a objeto bem elaborado, os objetos são considerados como “caixas-
pretas” que contêm ou encapsulam funcionalidade. O programador deve ser capaz de interagir
com um objeto conhecendo somente suas propriedades, métodos e eventos (sua interface de
programação), sem conhecer os detalhes de sua implementação. Essa abordagem permite que
os programadores utilizem níveis mais elevados de abstração e fornece uma estrutura de
organização para a criação de sistemas complexos.
O encapsulamento é o motivo pelo qual o ActionScript 2.0 inclui, por exemplo, controle de
acesso a membros, permitindo que os detalhes da implementação permaneçam privados e
invisíveis para o código externo aos objetos. O código externo ao objeto é forçado a interagir
com a interface de programação do objeto em vez de com os detalhes da implementação (o
que pode ser oculto em métodos e propriedades privados. Essa abordagem oferece algumas
vantagens importantes; por exemplo, ela permite que o criador do objeto altere a sua
implementação sem a necessidade de alterar o código externo ao objeto, ou seja, desde que a
interface de programação não seja alterada.
Para obter mais informações sobre encapsulamento, consulte “Sobre o uso de
encapsulamento” na página 276.
248 Classes
Polimorfismo
A OOP permite expressar as diferenças entre classes individuais usando uma técnica chamada
polimorfismo, pela qual as classes podem substituir os métodos de suas superclasses e definir
implementações especializadas desses métodos. No Flash, as subclasses podem definir
implementações especializadas de métodos herdados da superclasse, mas não podem acessar a
implementação da superclasse como em outras linguagens de programação.
Por exemplo, você pode criar inicialmente uma classe chamada Mammal com os métodos
play() e sleep() e, em seguida, criar as subclasses Cat, Monkey e Dog para estender essa
classe. As subclasses substituem o método play() da classe Mammal para refletir os hábitos
desses tipos específicos de animais. Monkey implementa o método play() para pendurar-se
nos galhos de árvores; Cat implementa o método play() para avançar em um novelo de lã;
Dog implementa o método play() para apanhar uma bola. Como a funcionalidade sleep()
é semelhante entre os animais, você usaria a implementação de superclasse.
Para obter mais informações sobre polimorfismo, consulte o Capítulo 8, “Herança”, na
página 319 e “Usando o polimorfismo em um aplicativo” na página 327.
Esse código define uma classe User personalizada que permite criar
novos usuários e especificar as informações de login dos usuários.
*/
class User {
// variáveis de instância privadas
private var __username:String;
private var __password:String;
// instrução construtora
public function User(p_username:String, p_password:String) {
this.__username = p_username;
this.__password = p_password;
}
250 Classes
public function set username(value:String):Void {
this.__username = value;
}
252 Classes
2. Salvar o arquivo de classe no diretório de caminho de classe designado (o local em que o
Flash procura as classes) ou no mesmo diretório que o arquivo FLA do aplicativo. Para
obter mais informações sobre como definir o caminho de classe, consulte “Sobre a definição
e a modificação do caminho de classe” na página 255. Para ver uma comparação e obter
mais informações sobre a importação de arquivos de classes, consulte “Sobre a importação
de arquivos de classes” na página 254.
3. Criar uma instância da classe em outro script, em um documento FLA ou em um arquivo
de script externo, ou criando uma subclasse com base na classe original. Para obter mais
informações sobre a criação de instâncias de uma classe, consulte “Criando instâncias de
classes em um exemplo” na página 294.
As seções subseqüentes deste capítulo contêm exemplos de código que você poderá usar para
se familiarizar com a criação de classes no ActionScript 2.0. Se não estiver familiarizado com o
ActionScript 2.0, leia o Capítulo 4, “Dados e tipos de dados”, na página 75 e o Capítulo 5,
“Fundamentos da sintaxe e da linguagem”, na página 119
Para obter mais informações sobre como trabalhar com classes personalizadas, consulte os
seguintes tópicos:
■ “Sobre a importação de arquivos de classes” na página 254
■ “Usando um arquivo de classe no Flash” na página 259
■ “Usando métodos e propriedades de um arquivo de classe” na página 260
■ “Sobre membros de classe” na página 265
■ “Sobre os métodos getter e setter” na página 270
■ “Como o compilador resolve as referências de classes” na página 258
■ “Sobre classes dinâmicas” na página 273
■ “Sobre o uso de encapsulamento” na página 276
■ “Sobre o uso da palavra-chave this em classes” na página 277
Um arquivo de exemplo no disco rígido demonstra como criar um menu dinâmico com dados
XML e um arquivo de classe personalizado. O exemplo chama o construtor XmlMenu() do
ActionScript e passa dois parâmetros: o caminho para o arquivo de menu XML e uma
referência à timeline atual. O resto da funcionalidade reside em um arquivo de classe
personalizado, XmlMenu.as.
Você pode encontrar o arquivo de origem de exemplo, xmlmenu.fla, na pasta Samples
(Exemplos) no disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\XML_Menu.
■ No Macintosh, navegue até Macintosh HD/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/XML_Menu.
Você também pode incluir código ActionScript em um arquivo de documento do Flash (FLA)
usando uma instrução include. As seguintes regras se aplicam à instrução include:
■ Essencialmente, as instruções include copiam e colam o conteúdo no arquivo incluído do
ActionScript.
■ As instruções include dentro dos arquivos de classe do ActionScript são relativas ao
subdiretório que contém o arquivo.
254 Classes
■ Em um arquivo do Flash (FLA), as instruções include só podem inserir código válido em
arquivos FLA, e a mesma regra se aplica aos outros locais em que as instruções include
podem residir. Por exemplo, se uma definição de classe contiver uma instrução include,
somente definições de propriedades e de métodos poderão existir no arquivo incluído do
ActionScript:
// Foo.as
class Foo {
#include "FooDef.as"
}
// FooDef.as:
var fooProp;
function fooMethod() {}
trace("Foo"); // Essa instrução não é permitida na definição de classe.
Para obter mais informações sobre a instrução include, consulte %{#include directive}% em
ActionScript 2.0 Language Reference (Referência da linguagem ActionScript). Para obter mais
informações sobre caminhos de classes, consulte “Sobre a definição e a modificação do
caminho de classe” na página 255.
Quando você clica no botão Check Syntax (Verificar sintaxe) acima do painel Script ao
editar um arquivo do ActionScript, o compilador examina somente o caminho de classe
global. Os arquivos do ActionScript não são associados a arquivos FLA no modo de
edição e não possuem o seu próprio caminho de classe.
Não exclua o caminho de classe global absoluto. O Flash utiliza esse caminho de
classe para acessar as classes internas. Se você acidentalmente excluir esse
caminho de classe, restabeleça-o adicionando $(LocalData)/Classes como um
novo caminho de classe.
A parte do caminho de classe global referente ao caminho relativo é denotada por um ponto
(.) e aponta para o diretório de documentos atual. Saiba que os caminhos de classe relativos
podem apontar para diretórios diferentes, dependendo do local do documento que está sendo
compilado ou publicado.
Para adicionar um caminho de classe global ou editar um caminho de classe existente, siga
estas etapas.
256 Classes
Para modificar o caminho de classe global:
1. Selecione Edit (Editar) > Preferences (Preferências) (Windows) ou Flash > Preferences
(Macintosh) para abrir a caixa de diálogo Preferences.
2. Clique no ActionScript na coluna esquerda e, em seguida, clique no botão ActionScript 2.0
Settings (Configurações do ActionScript 2.0).
3. Clique no botão Browse to Path (Navegar até caminho) para navegar até o diretório que
deseja adicionar.
4. Navegue até o caminho desejado e clique em OK.
Não exclua o caminho de classe global absoluto. O Flash utiliza esse caminho de
classe para acessar as classes internas. Se você acidentalmente excluir esse
caminho de classe, restabeleça-o adicionando $(LocalData)/Classes como um
novo caminho de classe.
Para obter informações sobre a importação de pacotes, consulte “Trabalhando com pacotes”
na página 244.
Para obter mais informações sobre pacotes, consulte “Sobre pacotes” na página 242.
258 Classes
No Flash Professional, quando você clica no botão Check Syntax (Verificar sintaxe) ao editar
um arquivo ActionScript, o compilador examina somente o caminho de classe global; os
arquivos ActionScript não são associados a arquivos FLA no modo de edição nem possuem o
seu próprio caminho de classe.
Em alguns casos, não é necessário criar uma instância de uma classe para usar suas
propriedades e métodos. Para obter mais informações sobre membros (estáticos) de
classes, consulte “Sobre os membros de classe (estáticos)” na página 315 e
“Propriedades e métodos estáticos” na página 264.
Use o operador ponto (.) para acessar o valor de uma propriedade em uma instância. Digite o
nome da instância à esquerda do ponto e o nome da propriedade à direita. Por exemplo, na
instrução a seguir, firstUser é a instância e username é a propriedade:
firstUser.username
Você também pode usar em um documento do Flash as classes de nível superior ou internas
da linguagem ActionScript. Por exemplo, o código a seguir cria um novo objeto Array e,
depois, mostra sua propriedade length:
var myArray:Array = new Array("apples", "oranges", "bananas");
trace(myArray.length); // 3
Para obter mais informações sobre o uso de classes personalizadas no Flash, consulte o
“Exemplo: Usando arquivos de classes personalizados no Flash” na página 291. Para obter
informações sobre a função construtora, consulte “Criando a função construtora”
na página 283.
Depois, você poderia chamar esse método em seu documento. Para chamar um método de
instância ou acessar uma propriedade de instância, você faz referência a uma instância da
classe. No exemplo a seguir, picture01, uma instância da classe personalizada Picture
(disponível no exercício a seguir), chama o método showInfo():
var img1:Picture = new Picture("http://www.helpexamples.com/flash/images/
image1.jpg");
// Chame o método showInfo().
img1.showInfo();
O próximo exemplo demonstra como criar uma classe personalizada Picture para armazenar
várias informações sobre uma foto.
260 Classes
A classe Picture é usada como um recipiente para uma imagem e seu URL.
*/
class Picture {
private var __infoObj:Object;
262 Classes
A classe Sample a seguir já contém um método público chamado myMethod():
class Sample {
private var ID:Number;
public function myMethod():Void {
this.ID = 15;
trace(this.ID); // 15
trace("myMethod");
}
}
Se desejar adicionar uma propriedade pública, use a palavra “public” em vez de “private”,
como mostra o seguinte código de exemplo:
class Sample {
private var ID:Number;
public var email:String;
public function myMethod():Void {
trace("myMethod");
}
}
Como a propriedade email é pública, você pode alterá-la na classe Sample ou diretamente em
um FLA.
Para adicionar uma propriedade privada à classe anterior, você deve usar simplesmente a
palavra-chave private antes da palavra-chave var.
Se você tentar acessar a propriedade ID privada fora da classe Sample, você receberá um erro
de compilador e uma mensagem no painel Output (Saída). A mensagem indica que o
membro é privado e não pode ser acessado.
Se você digitar essa linha de código no painel de script do painel Actions (Ações), será exibido
um resultado no painel Output (Saída).
Por exemplo, no exemplo da classe Sample anterior, você poderia criar uma variável estática
para controlar quantas instâncias da classe foram criadas, como demonstrado no seguinte
código:
class Sample {
public static var count:Number = 0;
private var ID:Number;
public var email:String;
public function Sample() {
Sample.count++;
trace("count updated: " + Sample.count);
}
public function myMethod():Void {
trace("myMethod");
}
}
Toda vez que uma nova instância da classe Sample é criada, o método construtor apresenta o
número total de instâncias de classe Sample definidas até o momento.
Algumas das classes de nível superior do ActionScript têm membros de classe (ou membros
estáticos), como você viu anteriormente nesta seção ao chamar a propriedade Math.PI. Os
membros de classe (propriedades e métodos) são acessados ou chamados no nome da classe, e
não em uma instância dela. Portanto, você não cria uma instância da classe para usar essas
propriedades e métodos.
Por exemplo, a classe Math de nível superior consiste apenas em métodos e propriedades
estáticos. Para chamar qualquer um dos seus métodos, você não cria uma instância dessa
classe. Em vez disso, basta chamar os métodos na própria classe Math. O código a seguir
chama o método sqrt() da classe Math:
264 Classes
var squareRoot:Number = Math.sqrt(4);
trace(squareRoot); // 2
O código a seguir chama o método max() da classe Math, que determina o maior de dois
números:
var largerNumber:Number = Math.max(10, 20);
trace(largerNumber); // 20
Para obter mais informações sobre a criação de membros de classe, consulte “Sobre membros
de classe” na página 265 e “Usando membros de classe” na página 269.
Um arquivo de exemplo no disco rígido demonstra como criar um menu dinâmico com dados
XML e um arquivo de classe personalizado. O exemplo chama o construtor XmlMenu() do
ActionScript e passa dois parâmetros: o caminho para o arquivo de menu XML e uma
referência à timeline atual. O resto da funcionalidade reside em um arquivo de classe
personalizado, XmlMenu.as.
Você pode encontrar o arquivo de origem de exemplo, xmlmenu.fla, na pasta Samples
(Exemplos) no disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\XML_Menu.
■ No Macintosh, navegue até Macintosh HD/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/XML_Menu.
Você também pode declarar os métodos de uma classe como estáticos, como no seguinte
código:
public static function getSpecies():String {
return Person.species;
}
Para resolver esse problema, você pode transformar o método em um método de instância ou
transformar a variável em uma variável de classe.
266 Classes
Para obter mais informações sobre membros de classe (também chamados propriedades
estáticas), consulte “Propriedades e métodos estáticos” na página 264.
Um arquivo de exemplo no disco rígido demonstra como criar um menu dinâmico com dados
XML e um arquivo de classe personalizado. O exemplo chama o construtor XmlMenu() do
ActionScript e passa dois parâmetros: o caminho para o arquivo de menu XML e uma
referência à timeline atual. O resto da funcionalidade reside em um arquivo de classe
personalizado, XmlMenu.as.
Você pode encontrar o arquivo de origem de exemplo, xmlmenu.fla, na pasta Samples
(Exemplos) no disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\XML_Menu.
■ No Macintosh, navegue até Macintosh HD/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/XML_Menu.
class Singleton {
private static var instance:Singleton = null;
public function trackChanges():Void {
trace("tracking changes.");
}
public static function getInstance():Singleton {
if (Singleton.instance == null) {
trace("creating new Singleton.");
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
}
268 Classes
Lembre-se de não usar nem classes de menos nem demais para o aplicativo, porque isso pode
levar a arquivos de classe malfeitos, o que pode prejudicar o desempenho do aplicativo ou do
seu fluxo de trabalho. Você deve sempre tentar usar arquivos de classe em vez de colocar
código em outros lugares (por exemplo, timelines); no entanto, evite criar muitas classes que
tenham uma pequena quantidade de funcionalidade ou algumas classes que realizem muitas
funcionalidades. Essas duas situações podem indicar design inadequado.
270 Classes
Usando métodos getter e setter
A sintaxe dos métodos getter e setter é a seguinte:
■ O método getter não usa parâmetros e sempre retorna um valor.
■ O método setter sempre usa um parâmetro e nunca retorna um valor.
As classes normalmente definem métodos getter que fornecem acesso de leitura e métodos
setter que fornecem acesso de gravação a uma propriedade específica. Por exemplo, imagine
uma classe que contenha uma propriedade userName:
private var userName:String;
Entretanto, se desejar uma sintaxe mais concisa, use os métodos getter e setter implícitos.
Esses métodos permitem acessar as propriedades da classe de maneira direta e, ao mesmo
tempo, seguir as práticas recomendadas de OOP.
Para definir esses métodos, use os atributos de método get e set. Crie métodos que
obtenham ou definam o valor de uma propriedade e adicione a palavra-chave get ou set
antes do nome do método, como mostra o próximo exemplo:
N OT A
272 Classes
Lembre-se de que os métodos getter não utilizam parâmetros. Os métodos setter devem
ter exatamente um parâmetro obrigatório. Um método setter pode ter o mesmo nome de
um método getter no mesmo escopo. Os métodos getter e setter não podem ter o mesmo
nome de outras propriedades. Por exemplo, no código anterior em que você definiu
métodos getter e setter chamados userName, não poderia existir também uma propriedade
chamada userName na mesma classe.
4. Selecione File > New Flash document (Documento do Flash) para criar um arquivo FLA e
salve-o como login2_test.fla no mesmo diretório que Login2.as.
5. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo)
principal:
var user:Login2 = new Login2("RickyM");
Diferentemente dos métodos comuns, os métodos getter e setter são chamados sem
parênteses ou argumentos. Os métodos getter e setter são chamados da mesma maneira
que uma propriedade de mesmo nome.
6. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme)
para testar o arquivo.
O Flash exibe as seguintes informações no painel Output (Saída):
RickyM
EnriqueI
N OT A
Se, em outro script, você criar uma instância da classe Person e tentar acessar uma
propriedade da classe que não existe, o compilador gerará um erro.
3. Salve o arquivo no disco rígido como Person.as.
4. Selecione File > New Flash Document (Documento do Flash) para criar um arquivo FLA
e clique em OK.
5. Selecione File > Save As (Salvar como), atribua um nome ao arquivo person_test.fla e salve
o arquivo no mesmo diretório que a classe Person criada anteriormente.
6. Adicione o código a seguir para criar uma nova instância da classe Person (firstPerson)
e tente atribuir um valor a uma propriedade chamada hairColor (que não existe na classe
Person):
var firstPerson:Person = new Person();
firstPerson.hairColor = "blue"; // Erro. Não existe uma propriedade com o
nome 'hairColor'.
274 Classes
Entretanto, em alguns casos, você poderá adicionar e acessar, durante a execução,
propriedades ou métodos de uma classe que não foram definidos na classe original. O
modificador de classe dynamic permite que você faça exatamente isso.
Para obter informações sobre subclasses, consulte Capítulo 8, “Herança”, na página 319.
276 Classes
O código a seguir mostra como você poderia modificar a classe Person dos exemplos
anteriores, definir seus membros de instância como privados e definir métodos getter e setter
para esses membros:
class Person {
private var __userName:String;
private var __age:Number;
public function get userName():String {
return this.__userName;
}
public function set userName(value:String):Void {
this.__userName = value;
}
public function get age():Number {
return this.__age;
}
public function set age(value:Number):Void {
this.__age = value;
}
}
Como vimos em “Criando arquivos de classes personalizados” na página 249, uma classe
consiste em duas partes principais: a declaração e o corpo. A declaração da classe consiste pelo
menos na instrução class, seguida do identificador do nome da classe e de chaves ({}). Tudo o
que estiver dentro das chaves é o corpo da classe, como mostra o seguinte exemplo:
class className {
// corpo da classe
}
Quando desejar, você pode definir classes somente em arquivos ActionScript externos. Por
exemplo, não é possível definir uma classe em um script de quadro no arquivo FLA. Portanto,
você criará um novo arquivo para este exemplo.
Na sua forma mais básica, uma classe declaration consiste na palavra-chave class, seguida
pelo nome da classe (Person, neste caso) e chaves ({}). Tudo entre as chaves chama-se corpo da
classe e é onde as propriedades e os métodos da classe são definidos.
No final deste exemplo, a organização básica de seus arquivos de classes será a seguinte:
■ Comentários de documentação
■ Declaração da classe
■ Função construtora
■ Corpo da classe
Você não cria subclasses neste capítulo. Para obter mais informações sobre herança e
subclasses, consulte o Capítulo 8, “Herança”, na página 319.
Este exemplo contém os seguintes tópicos:
■ “Sobre as diretrizes gerais para criação de classes” na página 279
■ “Criando e empacotando arquivos de classes” na página 281
■ “Criando a função construtora” na página 283
■ “Adicionando métodos e propriedades” na página 285
278 Classes
■ “Controlando o acesso de membros em classes” na página 288
■ “Documentando as classes” na página 290
Um arquivo de exemplo no disco rígido demonstra como criar um menu dinâmico com dados
XML e um arquivo de classe personalizado. O exemplo chama o construtor XmlMenu() do
ActionScript e passa dois parâmetros: o caminho para o arquivo de menu XML e uma
referência à timeline atual. O resto da funcionalidade reside em um arquivo de classe
personalizado, XmlMenu.as.
Você pode encontrar o arquivo de origem de exemplo, xmlmenu.fla, na pasta Samples
(Exemplos) no disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\XML_Menu.
■ No Macintosh, navegue até Macintosh HD/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/XML_Menu.
■ Inicialize as variáveis locais ao declará-las, a menos que o valor inicial seja determinado por
um cálculo. Para obter informações sobre a inicialização de variáveis, consulte
“Adicionando métodos e propriedades” na página 285.
■ Declare as variáveis antes de usá-las (incluindo repetições). Por exemplo, o código a seguir
predeclara a variável de iterador de repetição (i) antes de usá-la para a repetição for:
var my_array:Array = new Array("one", "two", "three");
var i:Number;
for (i = 0 ; i < my_array.length; i++) {
trace(i + " = " + my_array[i]);
}
■ Evite usar declarações locais que ocultem declarações de nível superior. Por exemplo, não
declare uma variável duas vezes, como mostra o seguinte exemplo:
ou
// formulário incorreto
class User {
private var m_username:String, m_password:String;
}
280 Classes
Você irá nomear e criar uma definição de classe na seção a seguir. Consulte a seção “Criando e
empacotando arquivos de classes” na página 281 para criar, nomear e empacotar os arquivos
de classes. Para obter mais informações sobre nomeação de arquivos de classe, consulte
“Nomeando classes e objetos” na página 776.
O código anterior cria uma nova classe chamada ClassA no pacote com.macromedia.utils.
6. Salve o documento do ActionScript ClassA.as.
7. Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript)
e, em seguida, clique em OK.
8. Selecione File > Save As, atribua o nome ClassB.as ao novo arquivo e salve-o no mesmo
diretório que o arquivo ClassA.as criado em uma etapa anterior.
9. Digite o seguinte código na janela Script:
class com.macromedia.utils.ClassB {
}
O código anterior cria uma nova classe chamada ClassB no pacote com.macromedia.utils.
10. Salve as alterações nos arquivos de classes ClassA.as e ClassB.as.
Os arquivos de classes usados em um arquivo FLA são importados para um arquivo SWF
quando compilados. O código criado em um arquivo de classe deve ter determinada
metodologia e organização, as quais são abordadas nas seções subseqüentes.
Se estiver criando várias classes personalizadas, use pacotes para organizar seus arquivos de
classes. Um pacote é um diretório que contém um ou mais arquivos de classes e reside em um
diretório de caminho de classe designado. Os nomes das classes devem ser totalmente
qualificados no arquivo em que forem declarados; ou seja, eles devem refletir o diretório
(pacote) em que estão armazenados. Para obter mais informações sobre caminhos de classes,
consulte “Sobre a definição e a modificação do caminho de classe” na página 255.
Por exemplo, uma classe chamada com.macromedia.docs.YourClass é armazenada no
diretório com/macromedia/docs. A declaração da classe no arquivo YourClass.as deve ser
semelhante à seguinte:
class com.macromedia.docs.YourClass {
// sua classe
}
N O TA
Você criará a declaração de classe que reflete o diretório de pacotes na seção a seguir,
“Exemplo: Criando classes personalizadas” na página 278.
282 Classes
Por essa razão, é recomendável planejar a sua estrutura de pacotes antes de começar a criar as
classes. De outra forma, se você decidir mover os arquivos das classes depois de criá-los, será
necessário modificar as instruções de declaração dessas classes para refletir sua nova
localização.
Este exercício faz parte do “Exemplo: Criando classes personalizadas” na página 278.
Se você não desejar avançar no exemplo, faça o download dos arquivos de classe em
www.helpexamples.com/flash/learnas/classes/.
284 Classes
class com.macromedia.utils.ClassA {
function ClassA() {
trace("ClassA constructor");
}
}
O código anterior define um método construtor para a classe ClassA. Esse construtor
envia uma seqüência de caracteres simples para o painel Output (Saída) que informa
quando uma nova instância da classe foi criada.
3. Abra o arquivo de classe ClassB.as na ferramenta de criação do Flash.
4. Modifique o arquivo de classe de acordo com o seguinte código (as alterações a serem feitas
estão em negrito):
class com.macromedia.utils.ClassB {
function ClassB() {
trace("ClassB constructor");
}
}
O bloco de código anterior adiciona uma nova variável estática, _className, que contém
o nome da classe atual.
function ClassA() {
trace("ClassA constructor");
}
function doSomething():Void {
trace("ClassA - doSomething()");
}
}
O bloco de código em negrito cria um novo método na classe que envia uma seqüência de
caracteres para o painel Output (Saída).
286 Classes
3. Em ClassA.as, selecione Tools (Ferramentas) > Check Syntax (Verificar sintaxe) para
verificar a sintaxe do arquivo do ActionScript.
Se algum erro for informado no painel Output, compare o ActionScript do script com o
código completo criado na etapa anterior. Se não for possível corrigir os erros do código,
copie e cole o código completo na janela Script antes de continuar.
4. Verifique a sintaxe de ClassB.as da mesma maneira que foi feito para ClassA.as.
Se houver algum erro no painel Output, copie e cole o código completo na janela Script
antes de continuar:
class com.macromedia.utils.ClassB {
static var _className:String;
function ClassB() {
trace("ClassB constructor");
}
function doSomething():Void {
trace("ClassB - doSomething()");
}
}
Quando você inicializa as propriedades inline, a expressão à direita de uma atribuição deve ser
uma constante de tempo de compilação. Ou seja, a expressão não pode se referir a algo
definido durante a execução. As constantes de tempo de compilação incluem literais de
seqüência de caracteres, números, valores booleanos, null e undefined, bem como funções
construtoras para as seguintes classes de nível superior: Array, Boolean, Number, Object e
String.
function ClassA() {
trace("ClassA constructor");
A única diferença entre o arquivo de classe existente e o bloco de código anterior é que
agora há um valor definido para a variável estática _className, “ClassA”.
3. Modifique o arquivo de classe ClassB e adicione a propriedade inline, alterando o valor para
“ClassB”.
4. Salve os dois arquivos do ActionScript antes de continuar.
Essa regra aplica-se apenas a variáveis de instância (variáveis que são copiadas em cada
instância de uma classe), e não a variáveis de classe (variáveis que pertencem à classe).
N OT A
Quando você inicializa arrays inline, apenas um array é criado para todas as instâncias
da classe.
288 Classes
Os membros privados (propriedades e métodos) são acessíveis apenas para a classe que define
esses membros e para as subclasses dessa classe original. As instâncias da classe original, ou as
instâncias das subclasses dessa classe, não podem acessar as propriedades e os métodos
declarados de forma privada; ou seja, os membros privados só podem ser acessados nas
definições da classe, e não no nível da instância. No exemplo a seguir, você alterará o acesso a
membros em seus arquivos de classes.
NO TA
Este exercício faz parte do “Exemplo: Criando classes personalizadas” na página 278.
Se você não desejar avançar no exemplo, faça o download dos arquivos de classe em
www.helpexamples.com/flash/learnas/classes/.
Documentando as classes
O uso de comentários em suas classes e interfaces é importante ao documentá-las para outros
usuários. Por exemplo, talvez você deseje distribuir seus arquivos de classes na comunidade
Flash ou esteja trabalhando com uma equipe de designers ou desenvolvedores que usarão esses
arquivos em seu trabalho ou como parte de um projeto do qual você participe. A
documentação ajuda outros usuários a compreender a finalidade e as origens da classe.
Há dois tipos de comentários em uma classe ou arquivo de interface típico: comentários de
documentação e comentários de implementação. Use comentários de documentação para
descrever as especificações do código, mas não a implementação. Use comentários de
implementação para fazer comentários sobre o código ou sobre a implementação de seções
específicas do código. Os dois tipos de comentários usam delimitadores ligeiramente
diferentes. Os comentários de documentação são delimitados por /** e */, e os de
implementação são delimitados por /* e */.
N OT A
Não inclua comentários que não estejam diretamente relacionados à classe que está
sendo lida. Por exemplo, não inclua comentários que descrevam o pacote
correspondente.
N O TA
Este exercício faz parte do “Exemplo: Criando classes personalizadas” na página 278.
Se você não desejar avançar no exemplo, faça o download dos arquivos de classe em
www.helpexamples.com/flash/learnas/classes/.
290 Classes
2. Modifique o arquivo de classe ClassA e adicione o novo código ao início do arquivo (as
alterações a serem feitas estão em negrito):
/**
ClassA class
version 1.1
6/21/2005
copyright Macromedia, Inc.
*/
class com.macromedia.utils.ClassA {
private static var _className:String = "ClassA";
Você pode usar a instrução import para importar pacotes para um script, o que permite usar o
nome abreviado de uma classe em vez de seu nome de classe totalmente qualificado. Também
pode usar o caractere curinga (*) para importar todas as classes de um pacote. Se usar o
caractere curinga, você não precisará usar o nome totalmente qualificado da classe toda vez
que usar a classe.
292 Classes
Por exemplo, suponha que você tenha importado a classe acima para um script usando a
instrução import, como mostra o seguinte exemplo:
import com.macromedia.docs.learnAs2.util.UserClass;
Posteriormente, no mesmo script, você poderia fazer referência a essa classe por seu nome
abreviado, como neste exemplo:
var myUser:UserClass = new UserClass();
Você pode usar o caractere curinga (*) para importar todas as classes de determinado pacote.
Suponha que você tenha um pacote chamado com.macromedia.utils com dois arquivos de
classes do ActionScript, ClassA.as e ClassB.as. Em outro script, você poderia importar as duas
classes desse pacote usando o caractere curinga, como no seguinte código:
import com.macromedia.utils.*;
O exemplo a seguir mostra que é possível fazer referência às duas classes diretamente no
mesmo script:
var myA:ClassA = new ClassA();
var myB:ClassB = new ClassB();
A instrução import aplica-se apenas ao script atual (quadro ou objeto) no qual ela é chamada.
Se uma classe importada não for utilizada em um script, ela não será incluída no bytecode do
arquivo SWF resultante e não estará disponível para os arquivos SWF que poderão ser
carregados pelo arquivo FLA que contém a instrução import.
NO T A
O bloco de código anterior importa primeiro cada uma das classes do pacote
com.macromedia.utils usando o caractere curinga (*). Em seguida, você cria uma nova
instância da classe ClassA, que faz com que o método construtor envie uma mensagem
para o painel Output (Saída). Uma instância da classe ClassB também é criada e envia
mensagens de depuração para o painel Output.
3. Salve as alterações no documento do Flash antes de continuar.
294 Classes
3. Salve as alterações no arquivo FLA antes de continuar.
Agora você já deve saber como criar e usar classes em documentos do Flash. Lembre-se de que
também é possível criar instâncias de classes internas ou de nível superior do ActionScript
(consulte “Sobre como trabalhar com classes internas” na página 312.).
Para continuar usando esses arquivos de classes em um arquivo do Flash, consulte “Atribuindo
uma classe a símbolos no Flash” na página 295.
Esse ActionScript cria uma nova classe chamada Animal que possui um método
construtor que envia uma seqüência de caracteres para o painel Output (Saída).
4. Salve as alterações no arquivo do ActionScript.
5. Selecione File > New Flash Document (Documento do Flash) para criar um arquivo FLA
e clique em OK.
6. Selecione File > Save As, atribua o nome animal_test.fla ao arquivo e salve o arquivo na
mesma pasta que o arquivo Animal.as criado na etapa 2.
7. Selecione Insert (Inserir) > New Symbol (Novo símbolo) para iniciar a caixa de diálogo
Create New Symbol (Criar novo símbolo).
8. Insira o nome do símbolo de animal e selecione a opção Movie Clip (Clipe de filme).
9. Clique no botão Advanced (Avançado) no canto inferior direito da caixa de diálogo Create
New Symbol (Criar novo símbolo) para ativar mais opções.
296 Classes
4. Adicione o seguinte código ActionScript ao Frame 1 (Quadro 1) da camada actions na
Timeline principal:
my_pb.indeterminate = true;
298 Classes
Para excluir arquivos ASO:
Se você estiver editando um arquivo FLA e desejar excluir um arquivo ASO, selecione uma
das opções a seguir no ambiente de criação:
■ Selecione Control (Controle) > Delete ASO Files (Excluir arquivos ASO) para excluir os
arquivos ASO e continue editando.
■ Selecione Control > Delete ASO Files e Test Movie (Testar filme) para excluir os arquivos
ASO e testar o aplicativo.
Se você estiver editando um documento ActionScript na janela Script:
■ Selecione Control > Delete ASO Files para excluir os arquivos ASO e continue editando.
■ Selecione Control > Delete ASO Files e Test Project (Testar projeto) para excluir os
arquivos ASO e testar o aplicativo.
Há um limite para a quantidade de código que pode ser colocada em uma única classe: o
bytecode de uma definição de classe em um arquivo SWF exportado não poderá ser superior a
32.767 bytes. Se o bytecode exceder esse limite, será exibida uma mensagem de aviso.
Não é possível prever o tamanho da representação de bytecode de determinada classe, mas
classes com até 1.500 linhas geralmente não ultrapassam o limite.
Caso a classe ultrapasse o limite, mova parte do código para outra classe. Em geral, uma
prática recomendada de OOP é manter as classes relativamente curtas.
300 Classes
7. Selecione Control (Controlar) > Test Movie (Testar filme) para testar esse código no
ambiente de teste.
O conteúdo do documento XML especificado é exibido no painel Output (Saída).
Outro tipo de escopo que você encontrará ao trabalhar com essas classes são as variáveis e as
funções estáticas. A palavra-chave static determina que uma variável ou função seja criada
somente uma vez por classe, em vez de ser criada em todas as instâncias dessa classe. Você pode
acessar um membro estático da classe sem criar uma instância da classe usando a sintaxe
someClassName.username. Para obter mais informações sobre variáveis e funções estáticas,
consulte “Sobre propriedades (membros) e métodos públicos, privados e estáticos”
na página 262 e “Usando membros de classe” na página 269.
Outra vantagem das variáveis estáticas é que elas não perdem seus valores quando o seu escopo
é encerrado. O exemplo a seguir demonstra como usar a palavra-chave static para criar um
contador que controla quantas instâncias da classe o Flash criou. Como a variável
numInstances é estática, ela é criada apenas uma vez para a classe inteira, e não para cada
instância.
O código anterior define uma classe User que controla o número de vezes que o construtor
foi chamado. Uma variável estática privada (User.numInstances) é incrementada no
método construtor.
3. Salve o documento como User.as.
4. Selecione File > New, selecione Flash Document (Documento do Flash) para criar um
novo arquivo FLA e salve-o no mesmo diretório que o arquivo User.as.
5. Digite o seguinte código ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de
tempo):
trace(User.instances); // 0
var user1:User = new User();
trace(User.instances); // 1
A primeira linha de código chama o método getter instances() estático, que retorna o
valor da variável numInstances estática privada. O restante do código cria novas
instâncias da classe User e exibe o valor atual retornado pelo método getter instances().
6. Selecione Control (Controlar) > Test Movie (Testar filme) para testar os documentos.
Para obter informações sobre o uso da palavra-chave this em classes, consulte “Sobre o uso da
palavra-chave this em classes” na página 277.
302 Classes
Para entender a diferença entre as classes básicas do ActionScript e as classes específicas do
Flash, considere a distinção entre JavaScript básico e cliente. As classes JavaScript do cliente
permitem controlar o ambiente do cliente (o conteúdo do navegador e da página da Web), e
as classes específicas do Flash permitem controlar, durante a execução, a aparência e o
comportamento de um aplicativo Flash.
As demais classes internas do ActionScript são específicas do modelo de objeto do
Macromedia Flash e do Flash Player. Camera, MovieClip e LoadVars são exemplos dessas
classes. Outras classes são organizadas em pacotes, como flash.display. Todas essas classes são
às vezes chamadas classes internas (classes predefinidas que podem ser usadas para adicionar
funcionalidade aos aplicativos).
As seções a seguir apresentam classes internas do ActionScript e descrevem as tarefas básicas
que podem ser realizadas com essas classes. Para obter uma visão geral sobre o trabalho com
classes e objetos na programação orientada a objeto, consulte “Sobre como trabalhar com
classes internas” na página 312. Exemplos de código usando essas classes estão incluídos em
todo o manual Learning ActionScript 2.0 in Flash.
Para obter informações sobre elementos de linguagem (como constantes, operadores e
diretivas), consulte o Capítulo 5, “Fundamentos da sintaxe e da linguagem”, na página 119.
Para obter mais informações sobre classes internas e de nível superior, consulte os seguintes
tópicos:
■ “Classes de nível superior” na página 304
■ “Pacote flash.display” na página 308
■ “Pacote flash.external” na página 309
■ “Pacote flash.filters” na página 309
■ “Pacote flash.geom” na página 310
■ “Pacote flash.net” na página 311
■ “Pacote flash.text” na página 311
■ “Pacote mx.lang” na página 311
■ “Pacotes System e TextField” na página 312
304 Classes
Classe Description (Descrição)
AsBroadcaster Fornece recursos de notificação de eventos e gerenciamento de
ouvinte que podem ser adicionados a outros objetos. Consulte
%{AsBroadcaster}%.
Camera (Câmera) A classe Camera fornece acesso à câmera do usuário, se houver uma
instalada. Quando ela é usada com o Flash Communication Server, o
arquivo SWF pode capturar, transmitir e gravar imagens e vídeo da
câmera do usuário. Consulte %{Camera}%.
Color A classe Color permite definir o valor de cor RGB (vermelho, verde e
azul) e a transformação de cor de instâncias de clipes de filme, bem
como recuperar esses valores após eles serem definidos. A classe
Color tornou-se obsoleta no Flash Player 8 tendo sido substituída pela
classe ColorTransform. Para obter mais informações sobre
transformações de cores, consulte %{ColorTransform
(flash.geom.ColorTransform)}%.
ContextMenuItem A classe ContextMenuItem permite que você crie novos itens de menu
que aparecem no menu de contexto do Flash Player. Para adicionar ao
menu de contexto do Flash Player novos itens de menu criados com
essa classe, use a classe ContextMenu. Consulte
%{ContextMenuItem}%.
306 Classes
Classe Description (Descrição)
NetStream A classe NetStream controla a reprodução de arquivos FLV de um
sistema de arquivos local ou de um endereço HTTP. Consulte
%{NetStream}%.
XML Esta classe contém métodos e propriedades usados com objetos XML.
Consulte %{XML}%.
XMLUI O objeto XMLUI permite a comunicação com arquivos SWF que são
usados como uma interface do usuário personalizada para os recursos
de extensibilidade da ferramenta de criação do Flash (como Behaviors,
Commands, Effects e Tools). Consulte %{XMLUI}%.
Pacote flash.display
O pacote flash.display contém a classe BitmapData que pode ser usada para criar exibições
visuais.
308 Classes
Pacote flash.external
O pacote flash.external permite que você se comunique com o recipiente do Flash Player
usando código ActionScript. Por exemplo, se você incorporar um arquivo SWF em uma
página HTML, essa página será o recipiente. Você poderia se comunicar com a página HTML
usando a classe ExternalInterface e o JavaScript. Também chamada de API externa.
Pacote flash.filters
O pacote flash.filters contém classes para os efeitos de filtro de bitmap disponíveis no Flash
Player 8. Os filtros permitem aplicar efeitos visuais sofisticados, como embaçamento, chanfro,
brilho e sombreamento, às instâncias de Image e MovieClip. Para obter mais informações
sobre cada classe, consulte as referências cruzadas fornecidas na tabela a seguir.
Pacote flash.geom
O pacote flash.geom contém classes de geometria, como pontos, retângulos e matrizes de
transformação. Essas classes oferecem suporte à classe BitmapData e ao recurso de
armazenamento de bitmap em cache. Para obter mais informações sobre cada classe, consulte
as referências cruzadas fornecidas na tabela a seguir.
310 Classes
Classe Description (Descrição)
Rectangle A classe Rectangle é usada para criar e modificar objetos Rectangle.
(Retângulo) Consulte %{Rectangle (flash.geom.Rectangle)}%.
Transform Coleta dados sobre transformações de cores e manipulações
(Transformar) coordenadas que são aplicadas em uma instância de objeto. Consulte
%{Transform (flash.geom.Transform)}%.
Pacote flash.net
O pacote flash.net contém classes que permitem fazer upload e download de um ou mais
arquivos entre o computador do usuário e o servidor. Para obter mais informações sobre cada
classe, consulte as referências cruzadas fornecidas na tabela a seguir.
Pacote flash.text
O pacote flash.text contém a classe TextRenderer para trabalhar com o recurso sem serrilhado
avançado disponível no Flash Player 8.
Pacote mx.lang
O pacote mx.lang contém a classe Locale para trabalhar com texto multilíngüe.
O pacote TextField contém a classe StyleSheet que é usada para aplicar estilos CSS (Cascading
StyleSheets, Folhas de estilos em cascata) ao texto.
312 Classes
O Flash 8 possui muitas classes internas que você pode usar no código (consulte “Sobre classes
de nível superior e internas” na página 302), para ajudar a adicionar interatividade aos
aplicativos. Para usar as propriedades e os métodos definidos por uma classe interna, você
geralmente cria primeiro uma instância dessa classe (exceto no caso de classes com membros
estáticos). A relação entre uma instância e sua classe é semelhante à relação entre uma casa e
sua planta arquitetônica, conforme discutido em “Sobre classes de nível superior e internas”
na página 302.
Para obter mais informações sobre o uso de classes internas no Flash 8, consulte os seguintes
tópicos:
■ “Sobre a criação de uma nova instância de uma classe interna” na página 313
■ “Acessando propriedades de objetos internos” na página 313
■ “Sobre a chamada de métodos de objetos internos” na página 314
■ “Sobre os membros de classe (estáticos)” na página 315
■ “Pré-carregando arquivos de classe” na página 316
■ “Excluindo classes” na página 315
Em alguns casos, não é necessário criar uma instância de uma classe para usar suas
propriedades e métodos. Para obter mais informações, consulte “Sobre os membros de classe
(estáticos)” na página 315.
O código a seguir cria um novo objeto Array e, em seguida, mostra sua propriedade length:
Também é possível usar o operador de acesso de array ([]) para acessar as propriedades de um
objeto; por exemplo, você pode usá-lo para fins de depuração. O exemplo a seguir executa
uma repetição em um objeto para exibir cada uma de suas propriedades.
O código anterior define um novo objeto chamado de resultados e define valores para
firstName, lastName, age, avg, b e t. Uma repetição for..in apresenta cada
propriedade no objeto de resultados e apresenta o valor para o painel Output (Saída).
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Para obter mais informações sobre operadores, incluindo operadores de acesso dot e array,
consulte “Sobre operadores” na página 185. Para obter mais informações sobre métodos e
propriedades, consulte Capítulo 6, “Funções e métodos”, na página 213. Para obter exemplos
de como trabalhar com propriedades da classe interna MovieClip, consulte o Capítulo 11,
“Trabalhando com clipes de filme”, na página 369. Para obter exemplos de como trabalhar
com propriedades das classes TextField, String, TextRenderer e TextFormat, consulte o
Capítulo 12, “Trabalhando com texto e seqüências de caracteres”, na página 403.
Para obter exemplos de como trabalhar com métodos da classe interna MovieClip, consulte o
Capítulo 11, “Trabalhando com clipes de filme”, na página 369. Para obter exemplos de como
trabalhar com métodos das classes internas TextField, String, TextRenderer e TextFormat,
consulte o Capítulo 12, “Trabalhando com texto e seqüências de caracteres”, na página 403.
314 Classes
Sobre os membros de classe (estáticos)
Algumas classes internas do ActionScript apresentam membros de classe (membros estáticos). Os
membros de classe (propriedades e métodos) são acessados ou chamados não em uma
instância da classe, mas no próprio nome da classe. Portanto, não é necessário criar uma
instância da classe para usar essas propriedades e métodos.
Por exemplo, todas as propriedades da classe Math são estáticas. O código a seguir chama o
método max() da classe Math para determinar o maior de dois números:
var largerNumber:Number = Math.max(10, 20);
trace(largerNumber); // 20
Para obter mais informações sobre métodos estáticos da classe Math, e exemplos de como usá-
los, consulte %{Math}% em ActionScript 2.0 Language Reference (Referência da linguagem
ActionScript).
Excluindo classes
Para reduzir o tamanho de um arquivo SWF, você poderá excluir classes da compilação, mas
ainda será capaz de acessá-las e usá-las para verificação de tipo. Por exemplo, você poderá fazer
isso se estiver desenvolvendo um aplicativo que utilize vários arquivos SWF ou bibliotecas
compartilhadas, especialmente os que acessam várias das mesmas classes. A exclusão das classes
ajudará a evitar que elas sejam duplicadas nesses arquivos.
Para obter mais informações sobre como excluir classes, consulte os seguintes tópicos:
■ “Pré-carregando arquivos de classe” na página 316
316 Classes
Você não pode usar classes até que a reprodução atinja o quadro escolhido para o qual as
classes devem ser carregadas. Por exemplo, como os componentes da versão 2 exigem classes
para garantir a funcionalidade, você deve carregar componentes depois de Export frame for
classes (Exportar quadro para classes) no ActionScript 2.0. Se você exportar para o Frame 3
(Quadro 3), não poderá usar nenhuma classe até que a reprodução atinja o Frame 3 e carregue
os dados.
Se você quiser pré-carregar um arquivo que use classes, como as classes de componente da
versão 2, deve pré-carregar os componentes no arquivo SWF. Para isso, você deve definir os
componentes para exportarem para um quadro diferente no arquivo SWF. Por padrão, os
componentes de interface de usuário exportam no Frame 1 do arquivo SWF; portanto,
desmarque a opção Export in First Frame (Exportar no primeiro quadro) da caixa de diálogo
Linkage (Vinculação) do componente.
Se os componentes não forem carregados no primeiro quadro, você pode criar uma barra de
progresso personalizada para o primeiro quadro do arquivo SWF. Não faça referência a
nenhum componente no ActionScript nem inclua componentes no Stage até carregar as
classes para o quadro especificado na caixa de texto Export Frame for Classes (Exportar
quadro para classes).
A T E NÇ Ã O
Você deve exportar componentes após as classes ActionScript que eles usam.
Herança 8
No Capítulo 7, “Classes,”, você aprendeu a criar arquivos de classes e como as classes podem
ajudá-lo a organizar o código em arquivos externos. Você também viu como organizar
arquivos de classes em pacotes relacionados. O objetivo deste capítulo é mostrar como criar
classes mais avançadas que estendem a funcionalidade de uma classe existente. Este assunto é
útil, pois talvez você precise estender suas classes personalizadas ou as classes existentes para
adicionar novos métodos e propriedades.
Para obter mais informações sobre herança, consulte “Sobre herança” na página 319. Para
obter mais informações sobre métodos e propriedades, consulte Capítulo 6, “Funções e
métodos”, na página 213.
Para obter mais informações sobre herança, consulte os seguintes tópicos:
Sobre herança. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Sobre a criação de subclasses no Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Usando o polimorfismo em um aplicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Sobre herança
No Capítulo 7, “Classes,”, você viu como criar um arquivo de classe para criar tipos de dados
personalizados. Aprendendo a criar arquivos de classes personalizados, você saberá como
mover o código da Timeline (Linha de tempo) para arquivos externos. Quando o código é
movido para arquivos externos, é mais fácil editá-lo. Agora que está familiarizado com os
conceitos básicos de criação de classes personalizadas, você aprenderá uma técnica de OOP
(Object-Oriented Programming, Programação orientada a objeto) chamada criação de
subclasses ou extensão de classes, que permite criar novas classes com base em outra existente.
319
Uma das vantagens da OOP é que ela permite criar subclasses de uma classe. A subclasse herda
todas as propriedades e métodos de uma superclasse. Por exemplo, ao estender a classe
MovieClip (ou criar uma subclasse dela), você criará uma classe personalizada que estenderá
essa classe. A subclasse herda todas as propriedades e métodos da classe MovieClip. Também é
possível criar um conjunto de classes como uma extensão de uma superclasse personalizada.
Por exemplo, a classe Lettuce pode ser uma extensão da superclasse Vegetable.
A subclasse geralmente define métodos e propriedades adicionais que podem ser usados em
seu aplicativo; portanto, ela estende a superclasse. As subclasses também substituem (fornecem
suas próprias definições para) os métodos herdados de uma superclasse. Se uma subclasse
substituir um método herdado da superclasse correspondente, você não poderá mais acessar a
definição da superclasse dentro da subclasse. A única exceção à regra acima é que, caso esteja
na função construtura da subclasse, você poderá acessar o construtor da superclasse usando a
instrução super. Para obter mais informações sobre substituição, consulte “Substituindo
métodos e propriedades” na página 324.
Por exemplo, você pode criar uma classe chamada Mammal, que define certas propriedades e
comportamentos comuns a todos os mamíferos e, em seguida, criar uma classe Cat que
estenda essa classe. O uso de subclasses permite reutilizar o código de modo que, em vez de
recriar todo o código comum às duas classes, você poderia simplesmente estender uma classe
existente. Outra subclasse, a classe Siamese, poderia estender a classe Cat e assim por diante.
Em um aplicativo complexo, determinar como estruturar a hierarquia das classes é uma
grande parte do projeto.
A herança e a criação de subclasses são muito úteis em aplicativos maiores, pois permitem criar
várias classes relacionadas que podem compartilhar funcionalidade. Por exemplo, você poderia
criar uma classe Employee que define as propriedades e os métodos básicos de um funcionário
típico de uma empresa. Em seguida, poderia criar uma nova classe chamada Contractor que
estende a classe Employee e herda todos os seus métodos e propriedades. A classe Contractor
poderia adicionar os seus próprios métodos e propriedades ou substituir os métodos e as
propriedades definidos na classe Employee. Depois, você poderia criar uma nova classe
chamada Manager, que também estende a classe Employee e define métodos e propriedades
adicionais, como hire(), fire(), raise() e promote(). Você também poderia estender
uma subclasse, como Manager, e criar uma nova classe chamada Director, que, por sua vez,
adiciona novos métodos ou substitui os métodos existentes.
Toda vez que uma classe é estendida, a nova classe herda todos os métodos e propriedades
atuais da subclasse. Se as classes não estivessem relacionadas, você precisaria recriar cada
método e propriedade em cada arquivo de classe separado, mesmo que as classes relacionadas
tivessem a mesma funcionalidade. Você gastaria muito mais tempo não só codificando, como
também depurando o aplicativo e mantendo um projeto caso uma lógica semelhante fosse
alterada em vários arquivos.
320 Herança
No ActionScript, você usa a palavra-chave extends para estabelecer a herança entre uma
classe e sua superclasse ou para estender uma interface. Para obter mais informações sobre o
uso da palavra-chave extends, consulte “Sobre a criação de subclasses no Flash”
na página 321 e “Sobre a criação de uma subclasse” na página 322. Para obter mais
informações sobre a palavra-chave extends, consulte %{extends statement}% em ActionScript
2.0 Language Reference (Referência da linguagem ActionScript 2.0).
Se você não fizer uma chamada para super() na função construtora de uma subclasse, o
compilador gerará automaticamente uma chamada para o construtor da superclasse imediata,
sem parâmetros como a primeira instrução da função. Se a superclasse não tiver um
construtor, o compilador criará uma função vazia e depois gerará a chamada para ela a partir
da subclasse. Entretanto, se a superclasse utilizar parâmetros em sua definição, será necessário
criar um construtor na subclasse e chamar a superclasse com os parâmetros necessários.
A herança múltipla, ou herança de mais de uma classe, não é permitida no ActionScript 2.0.
Entretanto, as classes poderão herdar efetivamente as características de diversas classes se você
utilizar instruções extends individuais, como mostra o seguinte exemplo:
// não permitido
class C extends A, B {} // **Error: Uma classe não pode estender mais do que
uma classe.
// permitido
class B extends A {}
class C extends B {}
Também é possível usar interfaces para implementar uma forma limitada de herança múltipla.
Para obter mais informações sobre interfaces, consulte Capítulo 9, “Interfaces”, na
página 331. Para ver um exemplo que cria uma subclasse, consulte “Exemplo: Estendendo a
classe Widget” na página 322. Para obter mais informações sobre super, consulte %{super
statement}% em ActionScript 2.0 Language Reference.
322 Herança
2. Adicione o seguinte código ao novo documento:
class Widget {
public static var widgetCount:Number = 0;
public function Widget() {
Widget.widgetCount++;
}
}
O código anterior cria duas instâncias da classe SubWidget: sw1 e sw2. Cada chamada do
construtor de SubWidget rastreia o valor atual da propriedade estática
Widget.widgetCount. Como SubWidget é uma subclasse da classe Widget, você poderá
acessar a propriedade widgetCount por meio dessa subclasse, e o compilador recriará a
referência (no bytecode, não no arquivo ActionScript) como Widget.widgetCount. Se
você tentar acessar a propriedade estática widgetCount a partir de instâncias da classe
Widget ou SubWidget, como sw1 ou sw2, o compilador gerará um erro.
9. Salve as alterações no documento.
10. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
O painel Output (Saída) exibirá o seguinte:
Creating subwidget #1
Creating subwidget #2
Essa saída é exibida porque, embora o construtor da classe Widget nunca seja chamado
explicitamente, o construtor da classe SubWidget o chama para você. Como resultado, o
construtor da classe Widget incrementa a variável estática widgetCount dessa classe.
O compilador ActionScript 2.0 pode resolver as referências a membros estáticos nas
definições de classes.
Se você não especificar o nome da classe da propriedade Widget.widgetCount, mas fizer
referência somente a widgetCount, o compilador ActionScript 2.0 resolverá a referência
como Widget.widgetCount e exportará corretamente essa propriedade. Da mesma
forma, se você fizer referência à propriedade como SubWidget.widgetCount, o
compilador recriará a referência (no bytecode, e não no arquivo do ActionScript) como
Widget.widgetCount porque SubWidget é uma subclasse da classe Widget.
A TE N Ç Ã O
Para garantir a legibilidade máxima do seu código, a Macromedia recomenda que você use
sempre referências explícitas a variáveis de membro estático no código, como no exemplo
anterior. O uso de referências explícitas permite identificar facilmente onde a definição de um
membro estático reside.
324 Herança
class Widget {
public static var widgetCount:Number = 0;
public function Widget() {
Widget.widgetCount++;
}
public function doSomething():Void {
trace("Widget::doSomething()");
}
}
Como demonstrado, você pode adicionar a palavra-chave super para chamar o método
doSomething() da superclasse, em vez do método doSomething() da classe atual. Para
obter mais informações sobre super, consulte a entrada correspondente em ActionScript
2.0 Language Reference.
14. Salve o arquivo de classe SubWidget com o construtor modificado e selecione Control >
Test Movie para publicar novamente o documento do Flash.
O painel Output exibe o conteúdo do método doSomething() da classe Widget.
326 Herança
Usando o polimorfismo em um aplicativo
A programação orientada a objeto permite expressar as diferenças entre classes individuais com
uma técnica chamada polimorfismo, pela qual as classes podem substituir os métodos de suas
superclasses e definir implementações especializadas desses métodos.
Por exemplo, você pode criar inicialmente uma classe chamada Mammal com os métodos
play() e sleep() e, em seguida, criar as subclasses Cat, Monkey e Dog para estender essa
classe. As subclasses substituem o método play() da classe Mammal para refletir os hábitos
desses tipos específicos de animais. Monkey implementa o método play() para pendurar-se
nos galhos de árvores; Cat implementa o método play() para avançar em um novelo de lã;
Dog implementa o método play() para apanhar uma bola. Como a funcionalidade sleep()
é semelhante entre os animais, você usaria a implementação de superclasse. O procedimento a
seguir demonstra esse exemplo no Flash.
// construtor
public function Mammal(gender:String) {
this._gender = gender;
}
A classe anterior define duas variáveis privadas, __gender e __name, que são usadas para
armazenar o tipo de mamífero e o sexo do animal. Em seguida, o construtor Mammal é
definido. O construtor precisa de um único parâmetro, gender, que é usado para definir a
variável privada _gender especificada anteriormente. Três métodos públicos adicionais
também são especificados: toString(), play() e sleep(), sendo que cada um retorna
objetos String. Os três métodos finais são getters e setters das propriedades _gender e
_name do mamífero.
3. Salve o documento do ActionScript.
Essa classe funciona como a superclasse das classes Cat, Dog e Monkey, que você criará em
breve. Você pode usar o método toString() da classe Mammal para exibir uma
representação de seqüência de caracteres de qualquer instância dessa classe (ou de qualquer
instância que estendesse essa classe).
4. Crie um novo arquivo do ActionScript e salve-o como Cat.as no mesmo diretório do
arquivo de classe Mammal.as criada na etapa 1.
5. Em Cat.as, digite o seguinte código ActionScript na janela Script:
class Cat extends Mammal {
// construtor
public function Cat(gender:String) {
super(gender);
speciesName = "Cat";
}
Observe que você está substituindo o método play() da superclasse Mammal. A classe
Cat define somente dois métodos, um método construtor e outro play(). Como a classe
Cat estende a classe Mammal, os métodos e as propriedades dessa classe são herdados pela
classe Cat. Para obter mais informações sobre substituição, consulte “Substituindo
métodos e propriedades” na página 324.
6. Salve as alterações no documento do ActionScript.
7. Crie um novo documento do ActionScript e salve-o como Dog.as no mesmo diretório que
os dois arquivos de classes anteriores.
8. Em Dog.as, digite o seguinte código ActionScript na janela Script:
class Dog extends Mammal {
328 Herança
// construtor
public function Dog(gender:String) {
super(gender);
speciesName = "Dog";
}
Observe que a classe Dog tem uma estrutura muito semelhante à da classe Cat, com
exceção de alguns valores que foram alterados. Mais uma vez, a classe Dog estende a classe
Mammal e herda todos os seus métodos e propriedades. O construtor de Dog utiliza uma
única propriedade, gender, que ele passa à classe pai da classe Dog, Mammal. A variável
speciesName também é substituída e definida como a seqüência de caracteres Dog. O
método play() também é substituído a partir da classe pai.
9. Salve as alterações no documento do ActionScript.
10. Crie outro documento do ActionScript no mesmo diretório que os seus outros arquivos e
salve-o como Monkey.as.
11. Em Monkey.as, digite o seguinte código ActionScript na janela Script:
class Monkey extends Mammal {
// construtor
public function Monkey(gender:String) {
super(gender);
speciesName = "Monkey";
}
Como as duas classes anteriores, Cat e Dog, a classe Monkey estende a classe Mammal. O
construtor da classe Monkey chama o construtor da classe Mammal, passando a
propriedade gender para ele e definindo speciesName como a seqüência de caracteres
Monkey. A classe Monkey também substitui o comportamento do método play().
12. Salve as alterações no documento do ActionScript.
13. Agora que você criou três subclasses da classe Mammal, crie um novo documento do Flash
chamado mammalTest.fla.
14. Em mammalTest.fla, digite o seguinte código ActionScript no Frame (Quadro) 1 da
Timeline (Linha de tempo) principal:
var mammals_arr:Array = new Array();
createMammals()
createReport()
function createMammals():Void {
mammals_arr.push(new Dog("Female"));
mammals_arr.push(new Cat("Male"));
mammals_arr.push(new Monkey("Female"));
mammals_arr.push(new Mammal("Male"));
}
function createReport():Void {
var i:Number;
var len:Number = mammals_arr.length;
// Exiba as informações de Mammal em quatro colunas de texto HTML
usando interrupções de tabulação.
info_txt.htmlText = "<textformat tabstops='[110, 200, 300]'>";
info_txt.htmlText += "<b>Mammal\tGender\tSleep\tPlay</b>";
for (i = 0; i < len; i++) {
info_txt.htmlText += "<p>" + mammals_arr[i].speciesName
+ "\t" + mammals_arr[i].gender
+ "\t" + mammals_arr[i].sleep()
+ "\t" + mammals_arr[i].play() + "</p>";
// A instrução trace chama o método Mammal.toString().
trace(mammals_arr[i]);
}
info_txt.htmlText += "</textformat>";
}
330 Herança
CAPÍTULO 9
Interfaces 9
Na OOP (Object-Oriented Programming, Programação orientada a objeto), uma interface é
um documento que permite declarar (porém não definir) os métodos que devem aparecer em
uma classe. Quando você trabalha em equipes de desenvolvedores ou cria aplicativos maiores
no Flash, as interfaces podem ser muito úteis durante o desenvolvimento. Elas permitem que
os desenvolvedores identifiquem facilmente os métodos base das classes do ActionScript. Esses
métodos devem ser implementados quando os desenvolvedores usam cada interface.
Este capítulo examina algumas interfaces de exemplo e, ao concluí-lo, você será capaz de criar
seus próprios arquivos de interface. Se não estiver familiarizado com a criação de classes, leia o
Capítulo 7, “Classes,” antes de tentar fazer os tutoriais e ler os exemplos apresentados neste
capítulo.
Para obter mais informações sobre o trabalho com interfaces, consulte os seguintes tópicos:
Sobre interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Criando interfaces como tipos de dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Noções básicas sobre herança e interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339
Exemplo: Usando interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Exemplo: Criando uma interface complexa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342
Sobre interfaces
Na programação orientada a objeto, as interfaces assemelham-se a classes cujos métodos não
são implementados (definidos), ou seja, elas não “fazem” nada. Portanto, uma interface
consiste em métodos “vazios”. Outra classe poderá implementar os métodos declarados pela
interface. No ActionScript, a distinção entre interface e objeto aplica-se somente à verificação
de erros durante a compilação e à imposição de regras de linguagem.
331
Uma interface não é uma classe; porém, essa afirmativa não é completamente verdadeira no
ActionScript durante a execução pois uma interface é abstrata. As interfaces do ActionScript
realmente existem na execução para permitir a conversão de tipos (a alteração de um tipo
existente de dados em outro tipo). O modelo de objeto do ActionScript 2.0 não oferece
suporte à herança múltipla. Portanto, uma classe pode herdar as características de uma única
classe pai. Essa classe pai pode ser uma classe básica ou do Flash Player ou, ainda, uma classe
definida pelo usuário (personalizada). É possível usar interfaces para implementar uma forma
limitada de herança múltipla, pela qual uma classe herda mais de uma classe.
Por exemplo, em C++, a classe Cat pode estender a classe Mammal, bem como uma classe
Playful, que contém os métodos chaseTail() e eatCatNip(). Como o Java, o ActionScript
2.0 não permite que uma classe estenda várias classes diretamente, mas permite que ela
estenda uma única classe e implemente várias interfaces. Portanto, você pode criar uma
interface Playful que declara os métodos chaseTail() e eatCatNip(). Uma classe Gato, ou
qualquer outra classe, pode implementar essa interface e fornecer definições para esses
métodos.
Uma interface também pode ser considerada como um “contrato de programação” que pode
ser usado para impor os relacionamentos entre classes não relacionadas de outra maneira. Por
exemplo, suponha que você esteja trabalhando com uma equipe de programadores, cada um
responsável por uma classe diferente do mesmo aplicativo. Ao projetar o aplicativo, você
estabelece um conjunto de métodos que as diferentes classes usarão para se comunicar. Você
cria uma interface que declara esses métodos, seus parâmetros e tipos de retorno. Qualquer
classe que implemente essa interface deve fornecer definições para esses métodos; caso
contrário, ocorrerá um erro do compilador. A interface é como um protocolo de comunicação
ao qual todas as classes devem aderir.
Uma maneira de fazer isso é criar uma classe que defina todos esses métodos e, em seguida,
fazer com que cada classe seja estendida a partir dessa superclasse ou herde as características
dela. Como o aplicativo consiste em classes que não estão relacionadas, não faz sentido impor
uma hierarquia de classe comum a elas. Uma solução melhor é criar uma interface que declare
os métodos que essas classes usam para se comunicar e, em seguida, fazer cada classe
implementar (fornecer suas próprias definições para) esses métodos.
Normalmente, você pode programar bem sem usar interfaces. Entretanto, quando usadas
apropriadamente, as interfaces podem tornar o projeto dos aplicativos mais elegante,
dimensionável e fácil de manter.
332 Interfaces
As interfaces do ActionScript existem durante a execução para permitir a conversão de tipos;
consulte Capítulo 4, “Sobre a conversão de objetos”, na página 117. Embora uma interface
não seja um objeto ou uma classe, o fluxo de trabalho é semelhante ao existente quando se
trabalha com classes. Para obter mais informações sobre o fluxo de trabalho de classes,
consulte “Criando arquivos de classes personalizados” na página 249. Para ver um tutorial
sobre como criar um aplicativo com interfaces, consulte “Exemplo: Usando interfaces”
na página 340.
Para obter mais informações sobre o uso de interfaces, consulte as seguintes seções:
■ “Sobre a palavra-chave interface” na página 333
■ “Sobre a atribuição de nomes a interfaces” na página 334
■ “Definindo e implementado interfaces” na página 334
Alguns desenvolvedores iniciam os nomes das interfaces com um “I” maiúsculo para
diferenciá-las das classes. A adoção dessa prática é recomendada, pois permite
distinguir rapidamente entre interfaces e classes comuns.
Para obter mais informações sobre convenções de atribuição de nome, consulte Capítulo 19,
“Melhores práticas e convenções de codificação para ActionScript 2.0”, na página 767.
Uma interface só pode conter declarações de métodos (funções), incluindo parâmetros, tipos
de parâmetro e tipos de retorno de função.
Para obter mais informações sobre convenções de estruturação de classes e interfaces, consulte
Capítulo 19, “Melhores práticas e convenções de codificação para ActionScript 2.0”, na
página 767. Para ver um tutorial sobre a criação de um aplicativo que usa uma interface,
consulte “Exemplo: Usando interfaces” na página 340.
334 Interfaces
Por exemplo, o código a seguir declara uma interface chamada IMyInterface que contém
dois métodos, method1() e method2(). O primeiro método, method1(), não possui
parâmetros e especifica o tipo de retorno Void (que indica que ele não retorna um valor). O
segundo método, method2(), tem um único parâmetro de tipo String e especifica um tipo de
retorno Boolean.
Para ver um tutorial que demonstra como criar uma interface complexa, consulte “Exemplo:
Usando interfaces” na página 340.
As regras para atribuir nome a interfaces e armazená-las nos pacotes são as mesmas usadas para
as classes; consulte “Sobre a atribuição de nomes a arquivos de classes” na página 280.
336 Interfaces
Criando interfaces como tipos de dados
Como uma classe, uma interface define um novo tipo de dados. Qualquer classe que
implementa uma interface pode ser considerada como sendo do tipo definido pela interface.
Esse recurso é útil para determinar se um objeto específico implementa uma determinada
interface. Por exemplo, considere a interface IMovable, criada no exemplo a seguir.
Esse código ActionScript cria uma instância da classe Box, que você declara como uma
variável do tipo Box.
9. Salve as alterações no documento do Flash e selecione Control (Controlar) > Test Movie
(Testar filme) para testar o arquivo SWF.
No Flash Player 7 e versões posteriores, você pode converter uma expressão em um tipo de
interface ou em outro tipo de dados durante a execução. Diferentemente das interfaces do
Java, as interfaces do ActionScript existem durante a execução, o permite a conversão de
tipos. Se a expressão for um objeto que implemente a interface ou tenha uma superclasse
que implemente a interface, o objeto será retornado. Caso contrário, será retornado null.
Esse recurso é útil para verificar se determinado objeto implementa uma interface
específica. Para obter mais informações sobre conversão de tipos, consulte Capítulo 4,
“Sobre a conversão de objetos”, na página 117.
10. Adicione o código a seguir ao final do código ActionScript em boxTest.fla:
if (IMovable(newBox) != null) {
newBox.moveUp();
else {
trace("box instance is not movable");
}
338 Interfaces
Noções básicas sobre herança e
interfaces
Você pode usar a palavra-chave extends para criar subclasses de uma interface. Isso poderá ser
muito útil em projetos maiores quando se deseja estender uma interface existente (ou criar
uma subclasse dela) e adicionar outros métodos. Esses métodos devem ser definidos por todas
as classes que implementam essa interface.
Uma consideração a ser feita ao estender interfaces é que serão exibidas mensagens de erro no
Flash se vários arquivos de interface declararem funções com os mesmos nomes, mas tiverem
parâmetros ou tipos de retorno diferentes.
O exemplo a seguir demonstra como uma criar uma subclasse de um arquivo de interface com
a palavra-chave extends.
9. Salve o arquivo de classe e clique no botão Check Syntax (Verificar sintaxe) acima da janela
Script.
O Flash não gerará mensagens de erro desde que todos os quatro métodos sejam definidos
e correspondam às definições de seus respectivos arquivos de interface.
NO T A
Para que a classe ClassA implemente várias interfaces no exemplo anterior, separe
simplesmente as interfaces com vírgulas. Ou, se uma classe estendesse uma superclasse e
implementasse várias interfaces, você usaria um código semelhante ao seguinte:
class ClassA extends ClassB implements Ib, Ic, Id {...}.
340 Interfaces
7. Clique no botão Check Syntax (Verificar sintaxe) referente à classe do ActionScript.
É exibida uma mensagem de erro semelhante a esta:
**Error** path\FlashPaper.as: Line 1: The class must implement method
'checkForUpdates' from interface 'IDocumentation'.
class FlashPaper implements IDocumentation {
Total ActionScript Errors: 1 Reported Errors: 1
Esse erro aparece porque a classe FlashPaper atual não define nenhum dos métodos
públicos que você definiu na interface IDocumentation.
8. Abra o arquivo de classe FlashPaper.as novamente e modifique o código ActionScript de
acordo com o seguinte código:
class FlashPaper implements IDocumentation {
private static var __version:String = "1,2,3,4";
public function downloadUpdates():Void {
};
public function checkForUpdates():Boolean {
return true;
};
public function searchHelp(keyword:String):Array {
return []
};
}
O erro anterior aparece porque o arquivo de classe FlashPaper.as não define mais todas as
classes descritas no arquivo de interface. Para corrigir esse erro, adicione o método
addComment() à classe FlashPaper ou remova a definição do método do arquivo de
interface IDocumentation.
13. Adicione o seguinte método à classe FlashPaper:
public function addComment(username:String, comment:String):Void {
/* Envie parâmetros para a página do servidor, que insere um
comentário no banco de dados. */
}
14. Salve as alterações em FlashPaper.as e clique no botão Check Syntax; depois disso, você não
deverá receber mais erros.
Na seção anterior, você criou uma classe com base no arquivo de interface IDocumentation.
Nesta seção, você criará uma nova classe que também implementará a interface
IDocumentation, embora ela adicione alguns outros métodos e propriedades.
Este tutorial demonstra a utilidade de usar interfaces quando você deseja criar outra classe que
estenda a interface IDocumentation, pois será possível identificar facilmente os métodos
necessários na nova classe.
342 Interfaces
3. Em Interface.as, digite o seguinte código ActionScript na janela Script:
// nome do arquivo: InterfaceA.as
interface InterfaceA {
public function k():Number;
public function n(z:Number):Number;
}
8. Salve as alterações no documento do Flash e selecione Control (Controlar) > Test Movie
(Testar filme) para testar o documento.
O painel Output (Saída) exibe dois números, 25 e 12, que são os resultados dos métodos
k() e n() da classe ClassB.
9. Crie um novo arquivo do ActionScript e salve-o como ClassC.as no diretório
complexInterface.
Esse arquivo de classe implementa a interface InterfaceA criada na etapa 1.
Se você clicar no botão Check Syntax (Verificar sintaxe) referente ao arquivo de classe
ClassC, o Flash exibirá uma mensagem de erro no painel Output informando que a classe
atual deve implementar o método n() definido na interface InterfaceA. Ao criar classes
que implementam uma interface, é importante definir métodos para cada entrada da
interface.
11. Crie um novo documento do ActionScript e salve-o como InterfaceB.as no diretório
complexInterface.
12. Em InterfaceB.as, digite o seguinte código ActionScript na janela Script:
// nome do arquivo: InterfaceB.as
interface InterfaceB {
public function o():Void;
}
344 Interfaces
15. Salve as alterações no arquivo ClassD.as; em seguida, crie um novo documento do Flash e
salve-o como classdTest.fla.
Esse documento do Flash testa a classe ClassD criada anteriormente.
16. Em classdTest.fla, adicione o seguinte código ActionScript ao Frame 1 da Timeline:
// nome do arquivo: classdTest.fla
import ClassD;
var myD:ClassD = new ClassD();
trace(myD.k()); // 15
trace(myD.n(7)); // 49
myD.o(); // o
17. Salve as alterações no arquivo classdTest.fla e selecione Control > Test Movie para testar o
arquivo.
Os valores 15, 49 e a letra o devem ser exibidos no painel Output. Esses valores são os
resultados dos métodos ClassD.k(), ClassD.n() e ClassD.o() respectivamente.
18. Crie um novo documento do ActionScript e salve-o como InterfaceC.as.
Essa interface estende a interface InterfaceA criada anteriormente e adiciona uma nova
definição de método.
19. Em InterfaceC.as, digite o seguinte código ActionScript na janela Script:
// nome do arquivo: InterfaceC.as
interface InterfaceC extends InterfaceA {
public function p():Void;
}
24.Salve o documento do Flash e selecione Control > Test Movie para testar o arquivo SWF.
Os valores 15, 12, o e p são exibidos no painel Output. Esses valores são retornados pelos
métodos ClassE.k(), ClassE.n(), ClassE.o() e ClassE.p(). Como a classe ClassE
implementou as interfaces InterfaceB e InterfaceC, cada método dos dois arquivos de
interface deve ser definido. Embora as interfaces InterfaceB e InterfaceC definam somente
os métodos o() e p(), a InterfaceC estende a InterfaceA. Isso significa que todos os
métodos definidos por ela, k() e n(), também devem ser implementados.
346 Interfaces
CAPÍTULO 10
Manipulando eventos 10
Eventos são ações que ocorrem enquanto um arquivo SWF é reproduzido. Um evento, como
um clique com o mouse ou um pressionamento de tecla, é chamado de evento do usuário, já
que é o resultado de uma interação direta com o usuário. Um evento gerado automaticamente
pelo Flash Player, como a aparência inicial de um clipe de filme no Stage (Palco), chama-se
evento do sistema, porque não é gerado diretamente pelo usuário.
Para que seu aplicativo reaja a eventos, você deve usar manipuladores de eventos, um código
ActionScript associado a um objeto e a um evento específicos. Por exemplo, quando um
usuário clicar em um botão no Stage (Palco), você poderá avançar a reprodução até o próximo
quadro. Ou, depois que um arquivo XML for carregado pela rede, o seu conteúdo poderá ser
exibido em um campo de texto.
Você pode manipular eventos no ActionScript de várias maneiras:
■ “Usando métodos manipuladores de eventos” na página 348
■ “Usando ouvintes de eventos” na página 351
■ “Usando manipuladores de eventos de botão e de clipe de filme” na página 355,
especificamente, %{on handler}% e %{onClipEvent handler}%.
■ “Transmitindo eventos de instâncias de componentes” na página 360
O uso de manipuladores de eventos com %{loadMovie (MovieClip.loadMovie method)}%
pode ser imprevisível. Se você anexar um manipulador de eventos a um botão usando on(),
ou se criar um manipulador dinâmico usando um método como %{onPress
(MovieClip.onPress handler)}% e, em seguida, chamar loadMovie(), o manipulador de
eventos não estará disponível depois que o novo conteúdo for carregado. Entretanto, se você
usar %{onClipEvent handler}% ou %{on handler}% para anexar um manipulador de eventos
a um clipe de filme e, em seguida, chamar loadMovie() nesse clipe, o manipulador de
eventos ainda estará disponível depois que o novo código for carregado.
347
Para obter mais informações sobre a manipulação de eventos, consulte as seguintes seções:
Usando métodos manipuladores de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348
Usando ouvintes de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Usando ouvintes de eventos com componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . .353
Usando manipuladores de eventos de botão e de clipe de filme. . . . . . . . . . . . . . .355
Transmitindo eventos de instâncias de componentes . . . . . . . . . . . . . . . . . . . . . . . 360
Criando clipes de filme com estados de botão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Escopo do manipulador de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362
Escopo da palavra-chave this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365
Usando a classe Delegate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .366
Por exemplo, imagine que exista um botão chamado next_btn no Stage (Palco). O código a
seguir atribui uma função ao manipulador de eventos onPress do botão; essa função avança a
reprodução até o próximo quadro na linha de tempo atual:
next_btn.onPress = function () {
nextFrame();
}
No exemplo a seguir, observe que você atribui a referência da função, e não seu valor de
retorno, ao manipulador de eventos onPress:
// Incorreto!
next_btn.onPress = goNextFrame();
// Correto.
next_btn.onPress = goNextFrame;
Para obter mais informações, consulte “Criando clipes de filme durante a execução”
na página 378.
Substituindo métodos manipuladores de eventos A criação de uma classe que estenda
uma classe do ActionScript permite substituir os métodos manipuladores de eventos pelas
funções criadas. Você pode definir um manipulador de eventos em uma nova subclasse que
poderá ser reutilizada para diversos objetos, vinculando qualquer símbolo da biblioteca da
classe estendida à nova subclasse. O código a seguir substitui o manipulador de eventos
onPress da classe MovieClip por uma função que diminui a transparência do clipe de filme:
// Classe FadeAlpha – define a transparência quando você clica no clipe de
filme.
class FadeAlpha extends MovieClip {
function onPress() {
this._alpha -= 10;
}
}
Para obter instruções específicas sobre a extensão de uma classe do ActionScript e a vinculação
a um símbolo da biblioteca, consulte os exemplos fornecidos em “Atribuindo uma classe a
símbolos no Flash” na página 295. Para obter informações sobre a criação e o trabalho com
classes personalizadas, consulte Capítulo 7, “Classes.”
7. Teste o aplicativo em Control (Controlar) > Test Movie (Testar filme), clique no primeiro
campo de texto e pressione a tecla Tab para alternar o foco entre os campos.
my_ldr.addEventListener("progress", loaderListener);
my_ldr.addEventListener("complete", loaderListener);
my_ldr.load("http://www.helpexamples.com/flash/images/image1.jpg");
Esse código ActionScript define um objeto ouvinte chamado loaderListener, que ouve
dois eventos: progress e complete. Quando cada um desses eventos for disparado, o
código correspondente será executado e o texto de depuração será exibido no painel
Output (Saída), se você testar o arquivo SWF na ferramenta de criação.
Em seguida, instrua a instância my_ldr a ouvir cada um dos dois eventos especificados
(progress e complete) e especifique a função ou o objeto ouvinte a ser executado quando
o evento é disparado. Finalmente, o método Loader.load() é chamado e ativa o
download da imagem.
4. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF.
O download da imagem é feito na instância Loader no Stage, e várias mensagens são
exibidas no painel Output. Dependendo do tamanho da imagem para download, e se a
imagem tiver sido armazenada em cache no sistema local do usuário, o evento progress
poderá ser disparado várias vezes, enquanto o evento complete só será disparado depois
que o download da imagem tiver sido concluído.
Ao trabalhar com componentes e disparar eventos, você usará uma sintaxe ligeiramente
diferente daquelas mostradas nos exemplos anteriores para os ouvintes de eventos. A
principal diferença é que você deverá usar o método addEventListener() em vez de
chamar addListener(). Depois, especifique o evento que deseja ouvir bem como a
função ou o objeto ouvinte de eventos.
my_ldr.addEventListener("progress", progressListener);
my_ldr.addEventListener("complete", completeListener);
my_ldr.load("http://www.helpexamples.com/flash/images/image1.png");
function progressListener(evt_obj:Object):Void {
trace(evt_obj.type); // progress
trace("\t" + evt_obj.target.bytesLoaded + " of " +
evt_obj.target.bytesTotal + " bytes loaded");
}
function completeListener(evt_obj:Object):Void {
trace(evt_obj.type); // complete
}
N OT A
Para obter mais informações sobre manipuladores de eventos de botão e de clipe de filme,
consulte os seguintes tópicos:
■ “Usando on e onClipEvent com métodos manipuladores de eventos” na página 356
■ “Especificando eventos para os métodos on ou onClipEvent” na página 358
■ “Anexando ou atribuindo vários manipuladores a um objeto” na página 359
8. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Quando você clica no símbolo do clipe de filme no Stage, a saída a seguir é enviada para o
painel Output:
on (press) {...}
box_mc.onPress = function() {...};
N OT A
É possível especificar dois ou mais eventos para cada manipulador on(), separados por
vírgulas. O ActionScript em um manipulador é executado quando um dos eventos
especificados pelo manipulador ocorre. Por exemplo, este manipulador on() anexado a um
botão é executado sempre que o mouse passa sobre o botão:
on (rollOver, rollOut) {
trace("You rolled over, or rolled out");
}
Como alternativa, se quiser rastrear quando a tecla Enter é pressionada por um usuário, use o
formato de código a seguir. Selecione uma instância de botão ou de clipe de filme e adicione o
seguinte código ao painel Actions:
on (keyPress "<Enter>") {
trace("Enter Pressed");
}
Para anexar vários manipuladores a um objeto usando o código colocado na Timeline (Linha
de tempo), consulte o exemplo a seguir. O código anexa os manipuladores onPress e
onRelease a uma instância de clipe de filme.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
A imagem é carregada na instância img_mc e os manipuladores de eventos onPress() e
onRelease() permitem arrastá-la pelo Stage (Palco).
10. Selecione Frame 10, todas as três camadas e Insert (Inserir) > Timeline > Keyframe
(Quadro-chave).
11. Adicione a ação stop() ao Frame 10 da camada actions e o rótulo de quadro _over ao
Frame 10 da camada labels.
12. Selecione o retângulo no Frame 10 e use o inspetor Property para selecionar outra cor de
preenchimento.
Quando anexada a um objeto de botão, a função play() aplica-se à Timeline que contém o
botão, isto é, à Timeline mãe do botão. Entretanto, quando o manipulador on(press) estiver
anexado a um objeto de clipe de filme, a chamada da função play() se aplicará ao clipe de
filme que utiliza o manipulador. Se o código a seguir for anexado a um clipe de filme, a
Timeline mãe será reproduzida:
// Anexado ao clipe de filme.
on (press) {
_parent.play(); // Reproduz a timeline mãe.
}
Para reproduzir o clipe de filme que define o manipulador de eventos onPress, faça referência
explicitamente ao clipe usando a palavra-chave this, desta forma:
// Função definida na timeline raiz
my_mc.onPress = function () {
this.play(); // reproduz a timeline de my_mc clip.
};
function clickHandler(eventObj:Object):Void {
trace("[" + eventObj.type + "] event on " + eventObj.target + "
instance.");
trace("\t this -> " + this);
}
O código anterior é dividido em seis seções (separadas por uma linha em branco). A
primeira seção importa a classe Button (para o componente Button) e a classe Delegate. A
segunda seção do código define uma função chamada quando o usuário clica em alguns
dos botões. A terceira seção do código cria um objeto usado como um ouvinte de evento e
o objeto ouve um único evento, click.
As três seções restantes do código criam uma nova instância do componente Button no
Stage, reposicionam a instância e adicionam um ouvite de evento para o evento click. O
primeiro botão adiciona um ouvinte para o evento click e passa uma referência
diretamente a uma função manipuladora click. O segundo botão adiciona um ouvinte
para o evento click e passa uma referência para um objeto ouvinte, que contém um
manipulador para esse evento. Por fim, a terceira função adiciona um ouvinte para o
evento click, usa a classe Delegate para disparar esse evento no escopo this (em que
this equivale a _level0) e passa uma referência para a função manipuladora click.
Quando você clica na instância one_button, o escopo this faz referência à própria
instância do botão.
b. Clique no segundo botão no Stage para rastrear o texto a seguir no painel Output:
[click] event on _level0.two_button instance.
this -> [object Object]
Quando você clica na instância two_button, o escopo this faz referência ao objeto
buttonListener.
c. Clique no terceiro botão no Stage para rastrear o texto a seguir no painel Output:
[click] event on _level0.three_button instance.
this -> _level0
Quando você clica na instância three_button, o escopo this faz referência ao escopo
especificado na chamada do método Delegate.create() ou, neste caso, a _level0.
369
Para obter mais informações sobre clipes de filme, consulte os seguintes tópicos:
Sobre o controle de clipes de filme com o ActionScript . . . . . . . . . . . . . . . . . . . . . .370
Chamando vários métodos em um único clipe de filme. . . . . . . . . . . . . . . . . . . . . . . 372
Carregando e descarregando arquivos SWF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Alterando a posição e a aparência de um clipe de filme . . . . . . . . . . . . . . . . . . . . . . 376
Arrastando clipes de filme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Criando clipes de filme durante a execução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Adicionando parâmetros aos clipes de filme criados dinamicamente . . . . . . . . . .383
Gerenciando profundidades do clipe de filme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .385
Sobre o armazenamento em cache e a rolagem de clipes de filme com o
ActionScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .389
Usando clipes de filme como máscaras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .397
Manipulando eventos de clipes de filme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Atribuindo uma classe a um símbolo de clipe de filme . . . . . . . . . . . . . . . . . . . . . . . 399
Inicializando as propriedades de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Os métodos MovieClip a seguir podem controlar clipes de filme ou níveis carregados, e não
têm funções equivalentes: MovieClip.attachMovie(),
MovieClip.createEmptyMovieClip(), MovieClip.createTextField(),
MovieClip.getBounds(), MovieClip.getBytesLoaded(), MovieClip.getBytesTotal(),
MovieClip.getDepth(), MovieClip.getInstanceAtDepth(),
MovieClip.getNextHighestDepth(), MovieClip.globalToLocal(),
MovieClip.localToGlobal(), MovieClip.hitTest(), MovieClip.setMask(),
MovieClip.swapDepths().
Para obter mais informações sobre essas funções e métodos, consulte as entradas
correspondentes em ActionScript 2.0 Language Reference (Referência da linguagem
ActionScript 2.0).
Para obter um exemplo de animação com script no Flash, navegue até a pasta Samples no
disco rígido onde é possível encontrar um arquivo de origem de exemplo, animation.fla.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Animation.
■ No Macintosh, navegue até HD do Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Animation.
No exemplo a seguir, o arquivo SWF carregado, contents.swf, também declara uma variável
chamada userName em sua Timeline raiz:
// Em contents.swf:
_root.userName = "Mary";
Quando você carrega uma imagem em um clipe de filme, o canto superior esquerdo da
imagem é colocado no ponto de registro do clipe de filme. Como geralmente esse ponto de
registro é o centro do clipe de filme, a imagem carregada pode não aparecer centralizada. Além
disso, quando você carrega uma imagem em uma Timeline raiz, o canto superior esquerdo da
imagem é colocado no Stage. A imagem carregada herda a rotação e o dimensionamento do
clipe de filme, mas o conteúdo original do clipe do filme é removido.
Algumas propriedades, chamadas somente leitura, possuem valores que podem ser lidos, porém
não definidos. (Essas propriedades são especificadas como somente leitura nas entradas
correspondentes em ActionScript 2.0 Language Reference). As seguintes propriedades são
somente leitura: _currentframe, _droptarget, _framesloaded, _parent, _target,
_totalframes, _url, _xmouse e _ymouse.
Você pode criar instruções para definir qualquer propriedade que não seja somente leitura. A
instrução a seguir define a propriedade _alpha da instância de clipe de filme wheel_mc, que é
filha da instância car_mc:
car_mc.wheel_mc._alpha = 50;
Além disso, você pode criar instruções que obtenham o valor de uma propriedade do clipe de
filme. Por exemplo, a instrução a seguir obtém o valor da propriedade _xmouse na Timeline
(Linha de tempo) do nível atual e define a propriedade _x da instância my_mc como esse
valor:
this.onEnterFrame = function() {
my_mc._x = _root._xmouse;
};
O parâmetro initObject especifica o nome do objeto cujos parâmetros você deseja usar para
preencher o clipe de filme criado dinamicamente.
6. Selecione Edit (Editar)> Edit Document (Editar documento) para voltar à Timeline
principal.
7. Selecione o símbolo de clipe de filme na biblioteca e Linkage (Vinculação) no menu pop-
up Library (Biblioteca).
A caixa de diálogo Linkage Properties é exibida.
8. Selecione as opções Export for ActionScript (Exportar para ActionScript) e Export in first
frame (Exportar no primeiro quadro).
9. Digite dynamic_id na caixa de texto Identifier (Identificador) e clique em OK.
10. Selecione o primeiro quadro da Timeline principal e adicione o seguinte código ao painel
Script do painel Actions:
/* Anexa um novo clipe de filme e move-o para a coordenada x e y 50 */
this.attachMovie("dynamic_id", "newClip_mc", 99, {name_str:"Erick",
_x:50, _y:50});
11. Teste o documento do Flash em Control (Controlar) > Test Movie (Testar filme).
O nome especificado em attachMovie() é exibido no novo campo de texto do clipe de
filme.
É possível encontrar um aplicativo de galeria de fotografias de exemplo no disco rígido. Esse
arquivo contêm um exemplo do uso do ActionScript para controlar clipes de filme
dinamicamente e carregar arquivos de imagem em um arquivo SWF, o que inclui criar clipes
de filme durante a execução. O arquivo de origem de exemplo, gallery_tween.fla, está
localizado na pasta Samples no disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Galleries.
Esse exemplo cria um novo clipe de filme com a profundidade 10 no espaço de ordem z de
container_mc.
O código a seguir anexa dois novos clipes de filme ao container_mc. O primeiro clipe,
chamado clip1_mc, é renderizado atrás do clip2_mc porque um valor de profundidade
inferior foi atribuído a ele.
container_mc.attachMovie("symbolID", "clip1_mc", 10);
container_mc.attachMovie("symbolID", "clip2_mc", 15);
Nesse caso, a variável nextDepth contém o valor 11 porque essa é a próxima profundidade
mais alta disponível para o clipe de filme edit_mc.
Não use MovieClip.getNextHighestDepth() com componentes; em vez disso, use o
gerenciador de profundidade. Para obter mais informações, consulte “DepthManager class”
em Component Language Reference (Referência da linguagem de componentes). Para obter
mais informações sobre MovieClip.getNextHighestDepth(), consulte
%{getNextHighestDepth (MovieClip.getNextHighestDepth method)}%.
11. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
Quando você clica nas instâncias no Stage, elas trocam de profundidade. Você verá as duas
instâncias alterarem a sobreposição de um clipe por outro.
Para obter mais informações, consulte %{swapDepths (MovieClip.swapDepths method)}%
em ActionScript 2.0 Language Reference.
Você pode usar o ActionScript para ativar os recursos de armazenamento em cache e rolagem,
bem como para controlar os planos de fundo. Para ativar o recurso de armazenamento em
cache para uma instância de clipe de filme, use o inspetor Properties (Propriedades). Para
armazenar clipes de filme ou botões em cache sem usar o ActionScript, você pode selecionar a
opção Use runtime bitmap caching (Usar cache de bitmap em tempo de execução) no
inspetor Properties.
Propriedade Descrição
cacheAsBitmap Faz com que a instância do clipe de filme armazene em cache sua
própria representação de bitmap. O Flash cria um objeto de superfície
para a instância, que é um bitmap armazenado em cache, em vez de
dados vetoriais. Se você alterar os limites do clipe de filme, a superfície
será recriada em vez de redimensionada. Para obter mais informações
e um exemplo, consulte “Armazenando um clipe de filme em cache”
na página 393.
opaqueBackground Permite especificar uma cor de fundo para a instância do clipe de filme
opaca. Se você definir essa propriedade como um valor numérico, a
instância do clipe de filme terá uma superfície opaca (não
transparente). Um bitmap opaco não tem um canal alfa (transparência)
e é renderizado mais rápido. Para obter mais informações e um
exemplo, consulte “Definindo o plano de fundo de um clipe de filme”
na página 396.
Essas três propriedades são independentes umas das outras, mas as propriedades
opaqueBackground e scrollRect funcionam melhor quando um objeto é armazenado em
cache como um bitmap. Você só observa vantagens de desempenho para as propriedades
opaqueBackground e scrollRect quando define cacheAsBitmap como true.
Para criar uma superfície também rolável, defina as propriedades cacheAsBitmap and
scrollRect para a instância do clipe de filme. É possível aninhar as superfícies umas dentro
das outras. A superfície copia o bitmap para a própria superfície mãe.
10. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
11. Clique em qualquer local no Stage para ativar o armazenamento de bitmap em cache.
Você perceberá que a animação deixará de ser animada à taxa de 1 quadro por segundo e
passará a uma animação suave em que as instâncias serão animadas nos dois sentidos de
forma alternada no Stage. Quando você clica no Stage, a definição de cacheAsBitmap é
alternada entre true e false.
Se você alternar entre a ativação e a desativação do armazenamento em cache, como
demonstrado no exemplo anterior, os dados armazenados em cache serão liberados. Também é
possível aplicar esse código para uma instância de botão. Consulte %{cacheAsBitmap
(Button.cacheAsBitmap property)}% em ActionScript 2.0 Language Reference. (Referência
da linguagem ActionScript 2.0)
Para obter exemplos de rolagem de clipes de filme, consulte %{scrollRect
(MovieClip.scrollRect property)}% em ActionScript 2.0 Language Reference. Para obter
informações sobre máscaras de canais alfa, que exigem a definição da propriedade
cacheAsBitmap como true, consulte “Sobre máscaras de canal alfa” na página 398.
É possível encontrar um arquivo de origem de exemplo que mostre como aplicar o
armazenamento de bitmap em cache a uma instância. Localize o arquivo denominado
cacheBitmap.fla na pasta Samples no disco rígido.
■ No Windows, navegue até a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\CacheBitmap.
■ No Macintosh, navegue até HD do Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/CacheBitmap.
this.createEmptyMovieClip("img_mc", 10);
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip):Void {
target_mc.setMask(mask_mc);
}
var my_mcl:MovieClipLoader = new MovieClipLoader();
3. Salve as alterações.
4. Crie um novo documento do Flash e salve-o como MoveRightDistance.fla no mesmo
diretório como o arquivo de classes.
5. Crie um símbolo de clipe de filme com uma forma vetorial, como oval, e exclua o conteúdo
do Stage (Palco).
Basta um símbolo de clipe de filme da biblioteca para este exemplo.
6. No painel Library (Biblioteca), clique com o botão direito do mouse (Windows), ou
mantenha pressionada a tecla Control e clique (Macintosh), no símbolo e selecione Linkage
(Vinculação) no menu de contexto.
Esse código cria duas novas instâncias do símbolo na Timeline raiz do arquivo SWF. A
primeira instância, ball50_mc, é movida 50 pixels sempre que é clicada; a segunda,
ball125_mc, é movida 125 pixels sempre que é clicada.
10. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF.
403
Fontes de dispositivo As fontes de dispositivo são fontes especiais no Flash que não são
incorporadas a um arquivo SWF. Em vez disso, o Flash Player usa a fonte disponível no
computador local mais semelhante à fonte de dispositivo. Como os contornos de fontes não
são incorporados, o tamanho de um arquivo SWF é menor do que quando são usados
contornos de fontes incorporadas. Entretanto, como as fontes de dispositivo não são
incorporadas, o texto criado com elas parece diferente do esperado em sistemas de
computadores que não possuem uma fonte instalada correspondente à fonte do dispositivo. O
Flash contém três fontes de dispositivo: _sans (semelhante à Helvetica ou Arial), _serif
(semelhante à Times Roman) e _typewriter (semelhante à Courier).
Fontes Conjuntos de caracteres com tipo de fonte, estilo e tamanho semelhantes.
String Uma seqüência de caracteres.
Texto Uma ou mais seqüências de caracteres que podem ser exibidas em um campo de
texto ou dentro de um componente de interface de usuário.
Campos de texto Um elemento visual no Stage (Palco) que permite exibir texto para um
usuário. Semelhante a um campo de texto de entrada ou controle de formulário da área de
texto em HTML, o Flash permite definir campos de texto como editáveis (somente leitura),
formatar como HTML, ativar suporte com várias linhas, mascarar senhas ou aplicar uma folha
de estilos CSS ao texto em formato HTML.
Formatação de texto É possível aplicar formatação a um campo de texto ou a
determinados caracteres dentro de um campo de texto. Alguns exemplos de opções de
formatação de texto que podem ser aplicadas ao texto são: alinhamento, recuos, negrito, cor,
tamanho de fonte, larguras de margens, itálicos e espaçamento entre letras.
Para obter mais informações sobre texto, consulte os seguintes tópicos:
Sobre campos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Usando a classe TextField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Sobre o carregamento de texto e variáveis em campos de texto . . . . . . . . . . . . . . 415
Usando fontes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Sobre a renderização de fontes e texto sem serrilhado. . . . . . . . . . . . . . . . . . . . . . 430
Sobre o layout e a formatação de texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Formatando texto com estilos CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .447
Criando um objeto de folha de estilos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Usando texto em formato HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Exemplo: Criando texto de rolagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .475
Todos os campos de texto oferecem suporte para Unicode. Para obter informações
sobre Unicode, consulte “Sobre seqüências de caracteres e a classe String”
na página 477.
5. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Você também pode criar um campo de texto com o ActionScript e atribuir texto a ele. Digite
o seguinte ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
this.createTextField("headline_txt", this.getNextHighestDepth(), 100, 100,
300, 20);
headline_txt.text = "New articles available on Developer Center";
Esse código cria um novo campo de texto com o nome de instância headline_txt. O campo
de texto é criado na próxima profundidade mais alta, nas coordenadas x e y de 100, 100, com
largura de 200 pixels e altura de 20 pixels. Ao testar o arquivo SWF (Control > Test Movie),
você verá o texto “New articles available on Developer Center” (Novos artigos
disponíveis no Centro de Desenvolvedores) no Stage.
Ao usar texto em formato HTML com um campo de texto (e não com componentes) no
Stage, é preciso atribuir o texto à propriedade htmlText do campo de texto, em vez da
propriedade de texto.
Você pode localizar arquivos de origem de exemplo que demonstrem como trabalhar com
arquivos de texto usando o ActionScript. Os arquivos de origem são chamados textfieldsA.fla
e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rígido.
■ No Windows, navegue até a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\TextFields.
■ No Macintosh, navegue até HD do Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/TextFields.
Entretanto, você não poderá usar o nome de variável myTextVar para definir a propriedade
text do campo de texto. Você deve usar o nome de instância, como mostra o seguinte código:
Esse código cria um campo de texto de 300 x 100 pixels, chamado test_txt, com o local
(0, 0) e a profundidade (ordem z) 10.
3. Para acessar os métodos e as propriedades do campo de texto recém-criado, use o nome de
instância especificado no primeiro parâmetro do método createTextField().
Por exemplo, o código a seguir cria um novo campo de texto, test_txt, e modifica suas
propriedades para torná-lo um campo de texto com quebra automática e várias linhas, que
se expande para acomodar o texto inserido. Depois, ele atribui um texto usando a
propriedade text do campo.
test_txt.multiline = true;
test_txt.wordWrap = true;
4. Selecione Control (Controlar) > Test Movie (Testar filme) para ver o campo de texto.
O texto é criado durante a execução e aparece no Stage (Palco).
Você pode usar o método TextField.removeTextField() para remover um campo de texto
criado com createTextField(). O método removeTextField() não funciona em um
campo de texto colocado pela linha de tempo durante a criação.
Para obter mais informações, consulte %{createTextField (MovieClip.createTextField
method)}% e %{removeTextField (TextField.removeTextField method)}% em ActionScript
2.0 Language Reference.
N OT A
Você pode localizar arquivos de origem de exemplo que demonstrem como trabalhar com
arquivos de texto usando o ActionScript. Os arquivos de origem são chamados textfieldsA.fla
e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rígido.
■ No Windows, navegue até a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\TextFields.
■ No Macintosh, navegue até HD do Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/TextFields.
Para obter uma lista completa das propriedades da classe TextField, consulte o ActionScript 2.0
Language Reference.
3. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme)
para ver o campo de texto centralizado no Stage.
Você pode localizar arquivos de origem de exemplo que demonstrem como trabalhar com
arquivos de texto usando o ActionScript. Os arquivos de origem são chamados textfieldsA.fla
e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rígido.
■ No Windows, navegue até a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\TextFields.
■ No Macintosh, navegue até HD do Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/TextFields.
3. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme)
para ver os resultados no ambiente de criação.
O exemplo anterior redimensionou um campo de texto criado dinamicamente para 300 pixels
por 200 pixels durante a execução; porém, quando você carrega conteúdo de um site externo e
não sabe exatamente qual o volume de conteúdo que será retornado, essa técnica poderá não
ser adequada às suas necessidades. O Flash inclui a propriedade TextField.autoSize(), que
permite redimensionar automaticamente um campo de texto para acomodar o seu conteúdo.
O exemplo a seguir demonstra como usar a propriedade TextField.autoSize() para
redimensionar o campo de texto após seu preenchimento com texto.
3. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme)
para exibir o documento do Flash no ambiente de criação.
O Flash redimensionará o campo de texto verticalmente para que todo o conteúdo possa
ser exibido sem ser cortado pelos limites do campo. Se você definir a propriedade
my_txt.wordWrap como false, o campo será redimensionado horizontalmente para
acomodar o texto.
Para impor uma altura máxima no campo de texto dimensionado automaticamente, a fim
de que a sua altura não exceda os limites do Stage (Palco), use o código a seguir.
if (my_txt._height > 160) {
my_txt.autoSize = "none";
my_txt._height = 160;
}
Adicione alguma funcionalidade de rolagem, como uma barra de rolagem, a fim de permitir
que os usuários visualizem o restante do texto. Uma alternativa é mover o ponteiro do mouse
sobre o texto; geralmente, esse método é adequado ao testar esse código.
Você pode localizar arquivos de origem de exemplo que demonstrem como trabalhar com
arquivos de texto usando o ActionScript. Os arquivos de origem são chamados textfieldsA.fla
e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rígido.
■ No Windows, navegue até a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\TextFields.
■ No Macintosh, navegue até HD do Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/TextFields.
3. Salve o documento do Flash e selecione File (Arquivo) > Publish (Publicar) para gerar os
arquivos HTML e SWF.
N OT A
Para usar LoadVars para preencher um campo de texto com texto externo:
1. Crie um novo documento do Flash e salve-o como loadvarsText.fla.
2. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
this.createTextField("my_txt", 10, 10, 10, 320, 100);
my_txt.autoSize = "left";
my_txt.border = true;
my_txt.multiline = true;
my_txt.wordWrap = true;
O primeiro bloco de código do trecho anterior cria um novo campo de texto no Stage
(Palco) e ativa os recursos de quebra automática de texto e várias linhas. O segundo bloco
de código define um novo objeto LoadVars que é usado para carregar um arquivo de texto
(lorem.txt) de um servidor Web remoto e exibe o seu conteúdo no campo de texto my_txt
criado anteriormente.
3. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme)
para testar o arquivo SWF.
Após um pequeno intervalo, o Flash exibirá o conteúdo do arquivo remoto no campo de
texto no Stage.
Para obter informações sobre segurança, consulte o Capítulo 17, “Noções básicas de
segurança.”
3. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme)
no menu principal.
Como você está usando o método LoadVars.onLoad() em vez de LoadVars.onData(),
o Flash analisa as variáveis e cria variáveis na instância do objeto LoadVars. O arquivo de
texto externo contém duas variáveis, monthNames e dayNames, sendo que ambas contêm
seqüências de caracteres.
Para obter informações sobre segurança, consulte o Capítulo 17, “Noções básicas de
segurança.”
Para obter informações sobre segurança, consulte o Capítulo 17, “Noções básicas de
segurança.”
Usando fontes
As fontes são conjuntos de caracteres com tipo de fonte, estilo e tamanho semelhantes. Não
importa o que você crie com o Flash Basic 8 ou o Flash Professional 8: seus aplicativos
provavelmente usarão texto com pelo menos uma ou duas fontes. Se você criar animações e
não tiver certeza de que os usuários finais terão uma fonte específica instalada em seus
sistemas, é importante ter noções básicas sobre a incorporação de fontes.
As seções a seguir mostram como incorporar caracteres, fontes inteiras, fontes compartilhadas,
além de outras técnicas para se trabalhar com fontes no Flash 8.
Para obter mais informações sobre fontes, consulte as seguintes seções:
■ “Incorporando caracteres” na página 421
■ “Incorporando fontes” na página 423
■ “Criando conjuntos de caracteres personalizados” na página 425
■ “Usando métodos TextField com fontes incorporadas” na página 427
■ “Sobre o compartilhamento de fontes” na página 429
O exemplo a seguir mostra como adicionar e remover caracteres e conjuntos de caracteres
incorporados a um documento do Flash.
Incorporando caracteres
Se você estiver trabalhando com fontes incorporadas e souber exatamente de quais caracteres
necessita, poderá reduzir o tamanho do arquivo, incorporando apenas os caracteres
necessários, em vez de incluir contornos de fontes adicionais não utilizadas. Para incorporar
determinados caracteres em um campo de texto sem incorporar um conjunto de caracteres
inteiro, use a caixa de diálogo Character Embedding (Incorporação de caracteres) para
especificar quais caracteres específicos você deseja incorporar.
Você só precisará incorporar uma fonte se estiver usando campos de texto dinâmico ou
de entrada. Para campos de texto estáticos, não será necessário incorporar a fonte.
Se você não incorporar uma fonte no documento do Flash, e o Flash Player escolher
automaticamente uma fonte substituta no computador do usuário, a propriedade
TextField.font retornará a fonte original usada no FLA, e não o nome da fonte
substituída.
NO TA
Se você usa fontes incorporadas com uma variedade de estilos nos campos de
texto, deve incorporar o estilo que deseja usar. Por exemplo, se estiver usando uma
fonte incorporada chamada Times e desejar colocar uma palavra em itálico,
certifique-se de incorporar os contornos de caracteres normais e itálicos. Caso
contrário, o texto não aparecerá no campo de texto.
Esse intervalo de caracteres inclui os valores Unicode de 0x0030 (zero) até 0x0039 (9), bem
como 0x002E (.).
Antes da criação de um conjunto de caracteres personalizado, é preciso conhecer os caracteres
e seus respectivos valores Unicode. O melhor local para encontrar os valores Unicode é o site
de Padrões Unicode na Web, www.unicode.org, que contém o gráfico Unicode Character
Code (Código de caracteres Unicode) para dezenas de idiomas.
A T E NÇ Ã O
Lembre-se de salvar uma cópia backup desse documento, para o caso de precisar
voltar a usar o arquivo original que é instalado com o Flash.
2. Role o documento XML até o final e adicione o seguinte código XML imediatamente antes
do nó de fechamento </fontEmbeddingTable>:
<glyphRange name="Uppercase and Numerals [A..Z,0..9] " id="100" >
<range min="0x0020" max ="0x0020" />
<range min="0x002E" max ="0x002E" />
<range min="0x0030" max ="0x0039" />
<range min="0x0041" max ="0x005A" />
</glyphRange>
// 2
var style_fmt:TextFormat = new TextFormat();
style_fmt.font = "Times (embedded)";
style_fmt.size = 30;
lorem_txt.setTextFormat(style_fmt);
Quando você abre arquivos FLA no Flash 8, seu texto não é atualizado
automaticamente para a opção Anti-Alias for Readability (Sem serrilhado para
legibilidade); é preciso selecionar campos de texto individuais e alterar manualmente as
configurações de eliminação de serrilhado para tirar proveito da tecnologia de
renderização do FlashType.
Um arquivo de exemplo no seu disco rígido mostra como aplicar e manipular texto sem
serrilhado em um aplicativo. Use a tecnologia de renderização do FlashType para criar um
pequeno texto que seja extremamente legível. Esse exemplo também demonstra como os
campos de texto podem ser rolados de forma rápida e suave com a utilização da propriedade
cacheAsBitmap.
Para usar o ActionScript com o intuito de definir texto sem serrilhado, veja o exemplo a seguir.
normal_mc.onRelease = function() {
my_txt.antiAliasType = "normal";
};
advanced_mc.onRelease = function() {
my_txt.antiAliasType = "advanced";
};
O Flash Player inclui configurações avançadas de eliminação de serrilhado para dez fontes
básicas. Para essas fontes, são fornecidas configurações avançadas de eliminação de serrilhado
apenas para os tamanhos de fonte de 6 a 20. Nessas fontes, os tamanhos abaixo de 6 utilizam
as configurações do tamanho 6, e os tamanhos acima de 20 utilizam as configurações do 20.
As demais fontes são mapeadas para os dados das fontes fornecidas. O método
setAdvancedAntialiasingTable() permite definir dados de eliminação de serrilhado
personalizada para outras fontes e tamanhos de fontes ou substituir as configurações padrão
para as fontes fornecidas. Para obter mais informações sobre a criação de uma tabela de
eliminação de serrilhado, veja o seguinte exemplo:
Para criar uma tabela de eliminação de serrilhado avançada para uma fonte
incorporada:
1. Crie um novo documento do Flash e salve-o como advancedaatable.fla.
2. Selecione New Font (Nova fonte) no menu pop-up do painel Library (Biblioteca).
3. Selecione Arial no menu pop-up Font (Fonte) e depois defina o tamanho da fonte com 32
pontos.
4. Selecione as opções Bold (Negrito) e Italics (Itálico).
5. Digite o nome da fonte Arial (embedded) na caixa de texto Name (Nome) e clique em OK.
6. Clique com o botão direito do mouse (Windows) ou, pressionando Control, clique
(Macintosh) no símbolo de fonte na biblioteca e selecione Linkage (Vinculação).
7. Na caixa de diálogo Linkage Properties (Propriedades de vinculação):
a. Digite Arial-embedded na caixa de texto Identifier (Identificador).
b. Selecione Export for ActionScript (Exportar para ActionScript) e Export in First
Frame (Exportar no primeiro quadro).
c. Clique em OK.
8. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal e adicione o
seguinte ActionScript ao painel Actions (Ações):
import flash.text.TextRenderer;
var arialTable:Array = new Array();
Esse código do ActionScript pode ser dividido em cinco seções básicas. A primeira seção
de código define uma nova instância TextFormat que será aplicada a um campo de texto
criado de forma dinâmica. As duas seções a seguir criam dois novos campos de texto no
Stage (Palco). O primeiro campo de texto, lorem_txt, aplica o objeto de formatação de
texto personalizado criado anteriormente, ativa fontes incorporadas e define a propriedade
antiAliasType como true. O segundo campo de texto, debug_txt,exibe os valores
atuais de definição e espessura do campo de texto lorem_txt. A quarta seção de código
cria um objeto LoadVars, responsável pelo carregamento do arquivo de texto externo e
preenchimento do campo de texto lorem_txt. A quinta e última seção de código define
um ouvinte de mouse, chamado sempre que o ponteiro do mouse se movimenta pelo
Stage. Os valores atuais de definição e espessura são calculados com base na posição
atual do ponteiro do mouse no Stage. As propriedades definição e espessura são
definidas para o campo de texto lorem_txt, e os valores atuais são exibidos no campo de
texto debug_txt.
8. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
Mova o ponteiro do mouse ao longo do eixo x para alterar a definição do campo de texto.
Mova o ponteiro do mouse da esquerda para a direita, a fim de que a definição aumente e
pareça mais dentada. Mova o ponteiro do mouse ao longo do eixo y, a fim de que a
espessura do campo de texto seja alterada.
O ActionScript anterior pode ser dividido em cinco seções. A primeira seção define um
novo objeto de formato de texto que especifica duas propriedades: tamanho e fonte. A
propriedade font (fonte) refere-se ao identificador de vinculação do símbolo de fonte que
está atualmente na biblioteca de documentos. A segunda, terceira e quarta seções de
código criam um novo campo de texto dinâmico no Stage (Palco) e definem algumas
propriedades comuns: antiAliasType (que deve ser definido com advanced [avançado]),
embedFonts (definido com true [verdadeiro]), multiline e wordWrap. Cada seção
também aplica o objeto de formato de texto criado em um seção anterior e define o tipo
de ajuste à grade com normal, pixel ou subpixel. A quinta e última seção cria uma
instância LoadVars, que carrega o conteúdo de um arquivo de texto externo para cada um
dos campos de texto criados com código.
9. Salve o documento e selecione Control (Controlar) > Test Movie (Testar filme) para testar
o arquivo SWF.
Cada arquivo de texto deve ser inicializado com o valor “loading...”. Após o
carregamento bem-sucedido do arquivo de texto externo, cada campo de texto exibirá um
texto de exemplo formatado usando um tipo diferente de ajuste à grade.
DICA
Para obter uma lista completa dos métodos TextFormat e de suas descrições, consulte
%{TextFormat}% em ActionScript 2.0 Language Reference.
Você pode criar estilos que redefinam marcas de formatação HTML internas utilizadas pelo
Flash Player (como <p> e <li>). Também é possível criar classes de estilo que podem ser
aplicadas a elementos HTML específicos usando o atributo class da marca <p> ou <span>,
ou definir novas marcas.
Você usa a classe TextField.StyleSheet para trabalhar com folhas de estilos de texto. Embora a
classe TextField possa ser usada com o Flash Player 6, a classe TextField.StyleSheet exige que os
arquivos SWF se destinem ao Flash Player 7 ou a versões posteriores. É possível carregar estilos
de um arquivo CSS externo ou criá-los de maneira nativa usando o ActionScript. Para aplicar
uma folha de estilos a um campo de texto que contém texto em formato HTML ou XML, use
a propriedade TextField.styleSheet. Os estilos definidos na folha de estilos são mapeados
automaticamente para as marcas definidas no documento HTML ou XML.
O uso de folhas de estilos envolve as seguintes três etapas básicas:
■ Criar um objeto de folha de estilos a partir da classe TextField.StyleSheet (para obter mais
informações, consulte %{StyleSheet (TextField.StyleSheet)}% em ActionScript 2.0
Language Reference).
■ Adicionar estilos ao objeto de folha de estilos, carregando-os de um arquivo CSS externo
ou criando novos estilos com o ActionScript.
■ Atribuir a folha de estilos a um objeto TextField que contém texto em formato HTML ou
XML.
Para obter mais informações, consulte os seguintes tópicos:
■ “Propriedades CSS suportadas” na página 448
■ “Criando um objeto de folha de estilos” na página 449
■ “Carregando arquivos CSS externos” na página 450
■ “Criando novos estilos com o ActionScript” na página 451
■ “Aplicando estilos a um objeto TextField” na página 452
Para adicionar estilos a um objeto de folha de estilos, você pode carregar um arquivo CSS
externo no objeto ou definir os estilos no ActionScript. Consulte “Carregando arquivos CSS
externos” na página 450 e “Criando novos estilos com o ActionScript” na página 451.
Você pode localizar um arquivo de origem de exemplo, formattedText.fla, na pasta Samples no
disco rígido, que mostra como aplicar a formatação CSS ao texto carregado em um arquivo
SWF durante a execução.
.headline {
font-family: Arial,Helvetica,sans-serif;
font-size: 24px;
}
Se a mensagem “Error loading CSS file.” (Erro ao carregar o arquivo CSS) for exibida no
painel Output, verifique se o arquivo FLA e o arquivo CSS estão no mesmo diretório e se
digitou o nome do arquivo CSS corretamente.
Como com todos os outros métodos do ActionScript que carregam dados pela rede, o arquivo
CSS deve ser estar no mesmo domínio que o arquivo SWF que está carregando o arquivo.
(Consulte “Acesso entre domínios e a subdomínios entre arquivos SWF” na página 729.) Para
obter mais informações sobre o uso de estilos CSS com o Flash, consulte %{StyleSheet
(TextField.StyleSheet)}% em ActionScript 2.0 Language Reference.
Você pode localizar um arquivo de origem de exemplo, formattedText.fla, na pasta Samples no
disco rígido, que mostra como aplicar a formatação CSS ao texto carregado em um arquivo
SWF durante a execução.
No Windows, navegue até a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\LoadText.
No Macintosh, navegue até HD do Macintosh/Applications/Macromedia Flash 8/Samples and
Tutorials/Samples/ActionScript/LoadText.
O bloco de código anterior cria uma nova instância TextField.StyleSheet, que define três
estilos para as marcas HTML html, body e h1. A seguir, o objeto de folha de estilos é
aplicado ao componente TextArea, e a formatação HTML é ativada. O restante do
ActionScript define um objeto LoadVars que carrega um arquivo HTML externo e
preenche a área de texto com o texto carregado.
4. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Combinando estilos
Os estilos CSS no Flash Player são aditivos; ou seja, quando os estilos são aninhados, cada
nível de aninhamento pode contribuir com informações de estilo, que são acrescentadas juntas
para resultar na formatação final.
Por exemplo, a folha de estilos a seguir define duas classes de estilos: mainBody e emphasis.
.mainBody {
font-family: Arial,Helvetica,sans-serif;
font-size: 24px;
}
.emphasis {
color: #666666;
font-style: italic;
}
No texto HTML que você atribui a um campo de texto, é possível aplicar esses estilos às
marcas <p> e <span>, como mostra o seguinte trecho:
<p class='mainBody'>This is <span class='emphasis'>really exciting!</
span></p>
a:link {
color: #FF0000;
}
.headline {
color: #000000;
font-family: Arial,Helvetica,sans-serif;
font-size: 18px;
font-weight: bold;
display: block;
}
.byline {
color: #666600;
font-style: italic;
font-weight: bold;
display: inline;
}
Essa folha de estilos define estilos para duas marcas HTML internas (<p> e <a>) que serão
aplicadas a todas as instâncias dessas marcas. Ela também define duas classes de estilos
(.headline e .byline) que serão aplicadas a parágrafos específicos e intervalos de texto.
3. Salve o arquivo como html_styles.css.
4. Crie um novo arquivo de texto em um editor de texto ou HTML e salve o documento
como myText.htm.
Adicione o código a seguir ao arquivo:
<p class='headline'>Flash adds FlashType rendering technology!</
p><p><span class='byline'>San Francisco, CA</span>--Macromedia Inc.
announced today a new version of Flash that features a brand new font
rendering technology called FlashType, most excellent at rendering
small text with incredible clarity and consistency across platforms.
For more information, visit the <a href='http://
www.macromedia.com'>Macromedia Flash web site.</a></p>
N OT A
Nesse ActionScript, você está carregando o texto de um arquivo externo. Para obter
informações sobre como carregar dados externos, consulte o Capítulo 15,
“Trabalhando com imagens, som e vídeo.”
8. Salve o arquivo como news_html.fla no mesmo diretório que contém o arquivo CSS
criado na etapa 3.
9. Selecione Control (Controlar) > Test Movie (Testar filme) para ver os estilos aplicados ao
texto HTML automaticamente.
Você pode preencher um campo de texto associado a essa folha de estilos com o seguinte texto
em formato XML:
<sectionHeading>This is a section</sectionHeading>
<mainBody>This is some main body text,
with one <emphasized>emphatic</emphasized> word.
</mainBody>
Esse código cria um novo objeto de folha de estilos chamado styles que define estilos
usando o método setStyle(). Os estilos correspondem exatamente aos criados em um
arquivo CSS externo, anteriormente neste capítulo.
Para renderizar o HTML corretamente, é necessário usar a sintaxe adequada. Os atributos das
marcas HTML devem estar entre aspas simples (') ou duplas("). Os valores de atributos sem
aspas podem produzir resultados inesperados, como renderização de texto imprópria. Por
exemplo, o trecho de HTML a seguir não pode ser renderizado adequadamente pelo Flash
Player porque o valor atribuído ao atributo align (left) não está entre aspas:
this.createTextField("myField_txt", 10, 10, 10, 400, 200);
myField_txt.html = true;
myField_txt.htmlText = "<p align=left>This is left-aligned text</p>";
Se você colocar os valores do atributo entre aspas duplas, deverá acrescentar um caractere de
escape para fechar as aspas (\"). Há duas maneiras aceitáveis de fazer isso:
myField_txt.htmlText = "<p align='left'>This uses single quotes</p>";
myField_txt.htmlText = "<p align=\"left\">This uses escaped double quotes</
p>";
myField_txt.htmlText = '<p align="left">This uses outer single quotes</p>';
myField_txt.htmlText = '<p align=\'left\'>This uses escaped single quotes</
p>';
Você não precisará acrescentar um caractere de escape para fechar as aspas duplas se estiver
carregando texto de um arquivo externo; isso só será necessário se você estiver atribuindo uma
seqüência de caracteres de texto no ActionScript.
Marca de âncora
A marca <a> cria um hiperlink e oferece suporte aos seguintes atributos:
■ href Uma seqüência de até 128 caracteres que especifica o URL da página a ser
carregada no navegador. O URL pode ser absoluto ou relativo ao local do arquivo SWF
que está carregando a página. Um exemplo de referência absoluta a um URL é http://
www.macromedia.com; um exemplo de referência relativa é /index.html.
■ target Especifica o nome da janela de destino na qual a página será carregada. As
opções incluem _self, _blank, _parent e _top. A opção _self especifica o quadro atual
na janela atual, _blank especifica uma nova janela, _parent especifica o pai do quadro
atual e _top especifica o quadro de nível superior na janela atual.
Por exemplo, o código HTML a seguir cria o link “Vá para a página inicial”, que abre o site
www.macromedia.com em uma nova janela do navegador.
urlText_txt.htmlText = "<a href='http://www.macromedia.com'
target='_blank'>Go home</a>";
Você pode usar o protocolo asfunction especial para fazer com que o link execute uma
função do ActionScript em um arquivo SWF, em vez de abrir um URL. Para obter mais
informações sobre o protocolo asfunction, consulte %{asfunction protocol}% em
ActionScript 2.0 Language Reference.
Você também pode definir os estilos a:link, a:hover e a:active para marcas de âncora
usando a folha de estilos. Consulte “Atribuindo estilo a marcas HTML internas”
na página 454.
NO T A
Os URLs absolutos devem ter o prefixo http://; caso contrário, o Flash os tratará como
URLs relativos.
Marca de negrito
A marca <b> renderiza o texto como negrito, como mostra este exemplo:
text3_txt.htmlText = "He was <b>ready</b> to leave!";
Um tipo em negrito deve estar disponível para a fonte usada para exibir o texto.
Marca de fonte
A marca <font> especifica uma fonte ou lista de fontes para exibir o texto.
A marca font oferece suporte aos seguintes atributos:
■ color Apenas valores de cor hexadecimais (#FFFFFF) são suportados. Por exemplo, o
código HTML a seguir cria texto vermelho:
myText_txt.htmlText = "<font color='#FF0000'>This is red text</font>";
■ face Especifica o nome da fonte que será usada. Como mostra o exemplo a seguir, você
pode especificar uma lista de nomes de fontes delimitados por vírgula; nesse caso, o Flash
Player selecionará a primeira fonte disponível:
myText_txt.htmlText = "<font face='Times, Times New Roman'>Displays as
either Times or Times New Roman...</font>";
Você também pode usar tamanhos de ponto relativos em vez de um tamanho de pixel,
como +2 ou -4.
Marca de itálico
A marca <i> exibe o texto marcado em itálico, como mostra o seguinte código:
That is very <i>interesting</i>.
As listas ordenadas e não ordenadas (marcas<ol> e <ul>) não são reconhecidas pelo
Flash Player e, portanto, não modificam o modo como sua lista é renderizada. Todos
os itens de lista usam marcadores.
Marca de parágrafo
A marca <p> cria um novo parágrafo. Para usar essa marca, defina o campo de texto como um
campo de várias linhas.
A marca <p> oferece suporte aos seguintes atributos:
■ align Especifica o alinhamento do texto no parágrafo; os valores válidos são left,
right, justify e center.
■ class Especifica uma classe de estilo CSS definida em um objeto TextField.StyleSheet.
Para obter mais informações, consulte “Usando classes de estilo” na página 454.
O exemplo a seguir usa o atributo class para atribuir uma classe de estilo de texto a uma
marca <p>:
var myStyleSheet:TextField.StyleSheet = new TextField.StyleSheet();
myStyleSheet.setStyle(".blue", {color:'#99CCFF', fontSize:18});
this.createTextField("test_txt", 10, 0, 0, 300, 100);
test_txt.html = true;
test_txt.styleSheet = myStyleSheet;
test_txt.htmlText = "<p class='blue'>This is some body-styled text.</
p>.";
Marca de intervalo
A marca <span> está disponível somente para uso com os estilos de texto CSS. Para obter mais
informações, consulte “Formatando texto com estilos CSS” na página 447. Ela oferece
suporte ao seguinte atributo:
■ class Especifica uma classe de estilo CSS definida em um objeto TextField.StyleSheet.
Para obter mais informações sobre a criação de classes de estilo de texto, consulte “Usando
classes de estilo” na página 454.
AJ 34 Detective
Marca de sublinhado
A marca <u> sublinha o texto marcado, como mostra o seguinte código:
This is <u>underlined</u> text.
Durante a execução, o código de exemplo anterior do Flash exibe o seguinte texto no Stage:
The <b> tag makes text appear bold.
Além dos símbolos “maior que” e “menor que”, o Flash também reconhece outras entidades
HTML listadas na tabela apresentada a seguir.
Entidade Descrição
< < (menor que)
> > (maior que)
& E comercial (&)
" " (aspas duplas)
' ' (apóstrofo, aspas simples)
O código anterior cria um novo campo de texto dinâmico no Stage (Palco), ativa a
formatação HTML e adiciona um texto ou imagem local ao campo de texto.
3. Adicione o seguinte ActionScript abaixo do código adicionado na etapa anterior:
this.createTextField("image2_txt", 20, 50, 200, 400, 150);
image2_txt.html = true;
image2_txt.htmlText = "<p>Here's a picture from my garden:<img
src='http://www.helpexamples.com/flash/images/image2.jpg'>";
Também é possível inserir uma imagem usando um endereço absoluto. O código anterior
insere um arquivo JPEG localizado em um diretório em um servidor. O arquivo SWF que
contém esse código pode estar no disco rígido ou em um servidor.
4. Salve o documento e selecione Control (Controlar) > Test Movie (Testar filme) para testar
o documento.
O campo de texto superior deveria ter uma frase e, muito provavelmente, uma mensagem
de erro no painel Output (Saída), informando que o Flash não pôde localizar um arquivo
chamado beach.gif no diretório atual. O campo de texto inferior deveria ter uma frase e a
imagem de uma flor carregada do servidor remoto.
Copie uma imagem GIF para o mesmo diretório de FLA, renomeie a imagem como
beach.gif e selecione Control > Test Movie para testar novamente o documento do Flash.
NO T A
Para que um clipe de filme incorporado seja exibido adequada e completamente, o ponto
de registro de seu símbolo deve ser no ponto (0,0).
8. Salve as alterações no documento do Flash.
9. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
4. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o aplicativo.
Agora, sempre que você clicar na instância de botão stop_btn, a linha de tempo da
animação aninhada no campo de texto irá parar.
Para obter informações sobre como criar mídias incorporadas em um hiperlink, consulte
“Sobre a criação de hiperlinks a partir de uma mídia incorporada” na página 474.
2. Crie um botão Up (Para cima) e um botão Down (Para baixo) ou selecione Window
(Janela) > Common Libraries (Bibliotecas comuns) > Buttons (Botões) e arraste os botões
para o Stage.
Esses botões serão usados para rolar o texto para cima e para baixo.
3. Selecione o botão Down no Stage e digite down_btn na caixa de texto Instance Name
(Nome da instância).
4. Selecione o botão Up no Stage e digite up_btn na caixa de texto Instance Name.
5. Selecione o Frame 1 (Quadro 1) na Timeline (Linha de tempo) e, no painel Actions (Ações)
(Window > Actions), digite o seguinte código a fim de rolar o texto para baixo no campo
de texto:
down_btn.onPress = function() {
textField_txt.scroll += 1;
};
6. Após o ActionScript da etapa 5, digite o código a seguir para rolar o texto para cima:
up_btn.onPress = function() {
textField_txt.scroll -= 1;
};
Os botões up e down podem ser usados para rolar todo texto carregado no campo
textField_txt.
function langListener(eventObj:Object):Void {
Locale.loadLanguageXML(eventObj.target.value);
}
function localeListener(success:Boolean):Void {
if (success) {
greeting_txt.text = Locale.loadString("IDS_GREETING");
} else {
greeting_txt.text = "unable to load language XML file.";
}
}
O ActionScript anterior está dividido em duas seções. A primeira seção de código importa
a classe Locale e especifica um ouvinte de retornos de chamadas, que é acionado sempre ao
término do carregamento do arquivo XML de um idioma. Em seguida, a caixa de
combinação lang_cb é preenchida com um array classificado dos idiomas disponíveis.
Sempre que o valor lang_cb muda, o distribuidor de eventos do Flash dispara a função
langListener(), que carrega o arquivo XML do idioma especificado. A segunda seção de
código define duas funções: langListener() e localeListener(). A primeira função,
langListener(), é chamada sempre que o valor da caixa de combinação lang_cb é
alterado pelo usuário. A segunda função, localeListener(), é chamada sempre ao
término do carregamento do arquivo XML de um idioma. A função verifica se o
carregamento foi bem-sucedido e, em caso afirmativo, define a propriedade text da
instância greeting_txt para a saudação do idioma selecionado.
O arquivo XML utilizado deve usar o padrão XLIFF (XML Localization Interchange
File Format, Formato de arquivo de intercâmbio de localização XML).
AT E N ÇÃ O
No momento, não é possível saber qual IME está ativo (se houver algum) nem mudar de
um IME para outro (por exemplo, de inglês para japonês ou de coreano para chinês).
enable_btn.onRelease = function() {
System.IME.setEnabled(true);
};
disable_btn.onRelease = function() {
System.IME.setEnabled(false);
};
function checkIME():Boolean {
if (System.capabilities.hasIME) {
if (System.IME.getEnabled()) {
trace("You have an IME installed and enabled.");
return true;
} else {
trace("You have an IME installed but not enabled.");
return false;
}
} else {
trace("Please install an IME and try again.");
return false;
}
}
Este exemplo requer que exista um IME instalado no sistema. Para obter
informações sobre a instalação de um IME, consulte os links que antecedem este
exemplo.
Insira texto no campo de texto de entrada no Stage (Palco). Alterne o IME para um
idioma diferente e digite no campo de texto de entrada novamente. O Flash Player
informa caracteres usando o novo IME. Quando você clica no botão disable_btn no
Stage, o Flash passa a usar o idioma anterior e ignora as atuais definições do IME.
Esse código define três objetos String: um que usa um valor literal de uma seqüência de
caracteres, um que usa o operador new e um outro sem um valor inicial. As seqüências de
caracteres podem ser comparadas usando o operador de igualdade (==), conforme
mostrado na terceira linha de código. Ao fazer referência a variáveis, você só especifica o
tipo de dado quando a variável estiver sendo definida.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
Use sempre valores literais de seqüência de caracteres, a menos que seja estritamente necessário
usar um objeto String. Para obter mais informações sobre valores literais de seqüências de
caracteres e o objeto String, consulte o Capítulo 5, “Sobre literais”, na página 138.
Para usar as aspas retas simples (') e aspas retas duplas (") como delimitadores em um valor
literal de seqüência de caracteres, você poderá usar a barra invertida (\) como o caractere de
escape. As duas seqüências de caracteres apresentadas a seguir são equivalentes:
var firstStr:String = "That's \"fine\"";
var secondStr:String = 'That\'s "fine"';
Seqüência de Descrição
escape
\b O caractere backspace.
\f O caractere de alimentação de formulário.
\n O caractere de nova linha (newline).
\r O caractere de retorno de carro.
\t O caractere de tabulação.
\unnnn O caractere Unicode com o código de caractere especificado pelo
número hexidecimal nnnn. Por exemplo, \u263a é o caractere de
sorriso.
\xnn O caractere ASCII com o código de caractere especificado pelo
número hexadecimal nn.
\' Uma aspa simples.
\" Uma aspa dupla.
\\ Um caractere de barra invertida.
Uma seqüência de caracteres vazia e outra nula têm tamanho igual a zero:
var firstStr:String = new String();
trace(firstStr.length); // 0
Se uma seqüência de caracteres não contém nenhum valor, o comprimento é definido como
undefined:
var thirdStr:String;
trace(thirdStr.length); // undefined (indefinido)
A VI S O
Também é possível usar códigos de caracteres para definir uma seqüência de caracteres. Para
obter mais informações sobre códigos de caracteres e codificação de caracteres, consulte “Sobre
seqüências de caracteres e a classe String” na página 477.
O exemplo a seguir cria uma variável chamada myStr e define o valor da seqüência de
caracteres com base em valores ASCII passados ao método String.fromCharCode():
var myStr:String =
String.fromCharCode(104,101,108,108,111,32,119,111,114,108,100,33);
trace(myStr); // olá, mundo!
Você pode examinar os caracteres que ocupam várias posições em uma seqüência, como no
seguinte exemplo:
3. Selecione Control (Controlar) > Test Movie (Testar filme) para visualizar o documento do
Flash. Você deverá ver cada caractere apresentado no painel Output (Saída) em uma linha
separada.
4. Modifique o código ActionScript existente, de modo que apresente o valor ASCII de cada
caractere:
var myStr:String = "hello world!";
for (var i:Number = 0; i < myStr.length; i++) {
trace(myStr.charAt(i) + " - ASCII=" + myStr.charCodeAt(i));
}
5. Salve o documento atual do Flash e selecione Control (Controlar) > Test Movie (Testar
filme) para visualizar o arquivo SWF.
Quando esse código é executado, o painel Output (Saída) exibe o seguinte:
h - ASCII=104
e - ASCII=101
l - ASCII=108
l - ASCII=108
o - ASCII=111
- ASCII=32
w - ASCII=119
o - ASCII=111
r - ASCII=114
l - ASCII=108
Você pode usar operadores para comparar seqüências de caracteres. Para obter informações
sobre o uso de operadores com seqüências de caracteres, consulte “Sobre uso de operadores
com seqüências de caracteres” na página 192.
Também é possível usar esses operadores com instruções condicionais, como if e while. O
exemplo a seguir usa operadores e seqüências de caracteres para fazer uma comparação.
3. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme)
para testar o arquivo SWF.
Ao comparar dois tipos de dados diferentes (como “strings” e números), o Flash tenta
converter os tipos de dados, de modo a possibilitar a comparação.
3. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme).
Para obter mais informações sobre o uso de operadores com seqüências de caracteres, consulte
“Sobre uso de operadores com seqüências de caracteres” na página 192.
O arquivo de origem de exemplo, strings.fla, encontra-se na pasta Samples do disco rígido.
Esse arquivo mostra como criar um processador de texto simples que compare e recupere
seleções de seqüências e de subseqüências de caracteres.
■ No Windows, navegue até a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Strings.
■ No Macintosh, navegue até HD do Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Strings.
3. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme).
N OT A
myStr = myStr.toUpperCase();
Quando você concatena duas seqüências de caracteres, elas são unidas seqüencialmente em
uma só. Por exemplo, você pode usar o operador de adição (+) para concatenar duas
seqüências de caracteres. O próximo exemplo mostra como fazer isso.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Se você usar o operador de adição (+) (ou o operador de adição e atribuição [+=]) com um
objeto String (Seqüência de caractere) e outro diferente de String, o ActionScript converterá
automaticamente o objeto diferente de String em seqüências de caracteres para avaliar a
expressão. Essa conversão é demonstrada no seguinte código de exemplo:
var version:String = "Flash Player ";
var rel:Number = 8;
version = version + rel;
trace(version); // Flash Player 8
Entretanto, você pode usar parênteses para forçar o operador de adição (+) a fazer uma
avaliação aritmética, conforme demonstrado no seguinte código ActionScript:
trace("Total: $" + 4.55 + 1.46); // Total: $4.551.46
trace("Total: $" + (4.55 + 1.46)); // Total: $6.01
Você pode usar o método split() para criar um array de subseqüências de caracteres de uma
seqüência, que é dividido com base em um caractere delimitador. Por exemplo, você poderia
segmentar uma seqüência delimitada por vírgulas ou tabulações em várias seqüências.
Por exemplo, o código a seguir mostra como dividir um array em subseqüências de caracteres
usando o caractere de E comercial (&) como delimitador.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
D IC A
Para obter mais informações sobre o uso de operadores com seqüências de caracteres, consulte
“Sobre uso de operadores com seqüências de caracteres” na página 192.
O arquivo de origem de exemplo, strings.fla, encontra-se na pasta Samples do disco rígido.
Esse arquivo mostra como criar um processador de texto simples que compare e recupere
seleções de seqüências e de subseqüências de caracteres.
■ No Windows, navegue até a unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Strings.
■ No Macintosh, navegue até HD do Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Strings.
497
Sobre a ordem de operação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Desenhando com o ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Noções básicas sobre dimensionamento e guias de trecho. . . . . . . . . . . . . . . . . . .583
Quando você usa um manipulador de eventos onEnterFrame para criar animações com
script, a animação é executada segundo a taxa de quadros do documento, da mesma
forma como se você tivesse criado uma interpolação de movimento em uma timeline.
Uma alternativa para o manipulador de eventos onEnterFrame é a função setInterval
(consulte %{função setInterval}% em ActionScript 2.0 Language Reference
(Referência da linguagem ActionScript 2.0)). Em vez de depender da taxa de quadros,
você pode chamar funções em um intervalo especificado. Da mesma forma que com o
manipulador onEnterFrame, quanto mais você usar setInterval para chamar uma
função, mais recursos terá a animação em seu processador.
3. Selecione Control > Test Movie para testar o documento e mova o ponteiro do mouse no
Stage.
O arquivo de imagem carregado transforma as cores quando você move o mouse.
Você também pode usar a classe ColorMatrixFilter para converter uma imagem colorida em
uma imagem em preto-e-branco, conforme o procedimento a seguir:
Para usar a classe ColorMatrixFilter e alterar uma imagem para uma imagem
em escala de cinza:
1. Crie um novo documento do Flash chamado grayscale.fla.
2. Selecione o Frame 1 da Timeline e adicione o código a seguir ao painel Actions:
import flash.filters.ColorMatrixFilter;
System.security.allowDomain("http://www.helpexamples.com");
var mcl_obj:Object = new Object();
mcl_obj.onLoadInit = function(target_mc:MovieClip):Void {
var myElements_array:Array = [0.3, 0.59, 0.11, 0, 0,
0.3, 0.59, 0.11, 0, 0,
0.3, 0.59, 0.11, 0, 0,
0, 0, 0, 1, 0];
var myColorMatrix_filter:ColorMatrixFilter = new
ColorMatrixFilter(myElements_array);
target_mc.filters = [myColorMatrix_filter];
}
this.createEmptyMovieClip("img_mc", this.getNextHighestDepth());
var img_mcl:MovieClipLoader = new MovieClipLoader();
img_mcl.addListener(mcl_obj);
img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",
img_mc);
Este bloco de código usa a classe MovieClipLoader para carregar um JPEG externo.
Depois que a imagem for carregada com êxito, o manipulador de eventos onLoadInit da
classe MovieClipLoader será chamado e modificará o brilho da imagem para 100 usando o
filtro ColorMatrixFilter.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
A imagem carregada no arquivo SWF muda o brilho quando você testa o arquivo SWF.
Exiba a imagem on-line (http://www.helpexamples.com/flash/images/image2.jpg)
para ver sua aparência original.
Para obter um exemplo de animação com script no Flash, localize um arquivo de origem de
exemplo, animation.fla, na pasta Samples do seu disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Animation.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Animation.
O bitmap é copiado para o Stage principal como pixels não esticados e não girados,
encaixados nos limites dos pixels mais próximos. Os pixels são mapeados de um para
um com o objeto pai. Se os limites do bitmap forem alterados, o bitmap será recriado, e
não esticado.
Para obter informações sobre cada método e propriedade da classe Tween, consulte o Chapter
51, “Tween class” em Components Language Reference (Referência da linguagem de
componentes). Para obter informações sobre cada método e propriedade da classe
TransitionManager, consulte o Chapter 48, “TransitionManager class” em Components
Language Reference. Para obter informações sobre como trabalhar com pacotes, consulte
“Trabalhando com pacotes de filtro” na página 528.
Há um arquivo de origem de exemplo, tweenProgress.fla, que usa essas classes para adicionar
animação com script. Esse arquivo está localizado na pasta Samples do seu disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Tween ProgressBar.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Tween ProgressBar.
Para obter mais informações sobre as classes Tween e TransitionManager , consulte os
seguintes tópicos:
■ “Adicionando interpolações e transições a um arquivo no Flash Professional 8 (somente
Flash Professional 8)” na página 511
■ “Animando com as classes TransitionManager e Tween” na página 513
■ “Sobre classes e métodos de atenuação” na página 516
Esse código chama a classe TransitionManager e, em seguida, aplica a transição Zoom com
o método de atenuação mx.transitions.easing.Bounce.easeOut especificado. Nesse
caso, a transição é aplicada ao slide selecionado. Para aplicar esse efeito a um clipe de filme,
você pode modificar o ActionScript e usá-lo nas animações Flash. É fácil modificar o
código para trabalhar com um símbolo de clipe de filme: altere o primeiro parâmetro de
eventObj.target para o nome de instância do clipe de filme desejado.
O Flash inclui dez transições, que você pode personalizar usando os métodos de atenuação e
diversos parâmetros opcionais. Lembre-se de que a atenuação refere-se à aceleração ou à
desaceleração gradual durante uma animação, o que confere um aspecto mais realista às
animações. Por exemplo, a velocidade de uma bola pode aumentar gradualmente no início de
uma animação, mas pode diminuir antes de parar completamente no final. Há muitas
equações para essa aceleração e essa desaceleração, que alteram a animação da atenuação de
acordo.
A tabela a seguir descreve as transições incluídas no Flash Basic 8 (usando código) e no Flash
Professional 8 (usando código ou comportamentos):
Transição Descrição
Iris Revela a tela ou o clipe de filme usando uma máscara de animação de
uma forma que aumenta o zoom.
Pixel Dissolve Mascara a tela ou o clipe de filme usando retângulos que desaparecem
e aparecem.
Cada transição possui personalizações ligeiramente diferentes que você pode aplicar à
animação. A caixa de diálogo Transitions permite que você visualize uma animação de
exemplo antes de usar o efeito no slide ou no formulário.
D IC A
Para obter informações sobre como trabalhar com pacotes, consulte “Trabalhando
com pacotes de filtro” na página 528.
6. Selecione o novo clipe de filme no Stage e atribua a ele o nome de instância img2_mc
usando o inspetor Properties.
7. Selecione o Frame 1 da Timeline principal e adicione o seguinte ActionScript ao código
existente:
mx.transitions.TransitionManager.start(img2_mc,
{type:mx.transitions.Zoom, direction:mx.transitions.Transition.IN,
duration:1, easing:mx.transitions.easing.Bounce.easeOut});
8. Selecione Control (Controlar) > Test Movie (Testar filme) para testar a animação.
O segundo clipe de filme cresce a partir do centro do símbolo, e não a partir do canto.
NO T A
Algumas transições são sensíveis ao local definido para o ponto de registro. Alterar o
ponto de registro pode afetar consideravalmente a aparência da animação em um
arquivo SWF. Por exemplo, se o ponto de registro estiver localizado no canto
superior esquerdo (padrão) quando você usar a transição Zoom, a transição será
iniciada a partir desse local.
Para obter informações sobre cada método e propriedade da classe Tween, consulte o Chapter
51, “Tween class” em Components Language Reference. Para obter informações sobre cada
método e propriedade da classe TransitionManager, consulte o Chapter 48,
“TransitionManager class” em Components Language Reference.
Há um arquivo de origem de exemplo, tweenProgress.fla, que usa essas classes para adicionar
animação com script. Esse arquivo está localizado na pasta Samples do seu disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Tween ProgressBar.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Tween ProgressBar.
Transição Descrição
Back Estende a animação para além do intervalo de transição em uma ponta
ou nas duas uma vez para dar um efeito de transbordamento.
Bounce Adiciona um efeito de salto dentro do intervalo de transição em uma
ponta ou nas duas. O número de saltos refere-se à duração: maior
duração produz mais saltos.
Strong Adiciona movimentos mais lentos em uma ponta ou nas duas. Esse
efeito é semelhante à atenuação Regular, mas é muito mais destacado.
Cada uma dessas seis classes de atenuação possui três métodos de atenuação, que estão
descritos na seguinte tabela:
Método Descrição
easeIn Produz o efeito de atenuação no início da transição.
easeOut Produz o efeito de atenuação no final da transição.
easeInOut Produz o efeito de atenuação no início e no final da transição.
Para abrir essas classes no Flash ou no editor do ActionScript, navegue até a pasta Disco
Rígido\Program Files\Macromedia\Flash 8\idioma\First Run\Classes\mx\transitions\easing\
no Windows (considerando uma instalação padrão) ou HD
Macintosh:Applications:Macromedia Flash 8:First Run:Classes:mx:transitions:easing.
Há um arquivo de origem de exemplo, tweenProgress.fla, que usa essas classes para adicionar
animação com script. Esse arquivo está localizado na pasta Samples do seu disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Tween ProgressBar.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Tween ProgressBar.
Esse trecho de ActionScript cria uma nova instância da classe Tween, que anima o clipe de
filme ball_mc no eixo x (da esquerda para a direita) do Stage. O clipe de filme anima de 0
pixels a 300 pixels em três segundos, e o ActionScript aplica um método de atenuação elástico.
Isso significa que a bola estende-se além de 300 pixels no eixo x antes de usar um efeito de
movimento fluido para animar.
Há um arquivo de origem de exemplo, tweenProgress.fla, que usa essas classes para adicionar
animação com script. Esse arquivo está localizado na pasta Samples do seu disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Tween ProgressBar.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Tween ProgressBar.
Este exemplo de código usa duas instruções import. A primeira instrução importa
somente a classe mx.transitions.Tween, e a segunda instrução import usa o atalho de
caractere curinga (*) para importar cada uma das seis classes de atenuação usando uma
única linha de código. A segunda instrução importa um pacote inteiro de classes.
NO T A
Para obter informações sobre como trabalhar com pacotes, consulte “Trabalhando
com pacotes de filtro” na página 528.
Após o término da interpolação inicial, o clipe de filme ball_mc interpola para a posição
original de 0 pixels. O trecho de código a seguir (editado para simplificar) mostra o protótipo
da função para o método continueTo():
function continueTo(finish:Number, duration:Number):Void {
/* omitted to save space. */
}
Somente dois argumentos passam para o método continueTo(), em vez dos sete argumentos
para o método construtor Tween, conforme mostrado no trecho a seguir:
function Tween (obj, prop, func, begin, finish, duration, useSeconds) {
/* omitted to save space. */
}
Os cinco parâmetros que não são exigidos pelo método continueTo() (obj, prop, func,
begin e useSeconds) usam os argumentos definidos anteriomente na chamada para a classe
Tween. Ao chamar o método continueTo(), você pressupõe que os argumentos obj, prop,
func (tipo de atenuação) e useSeconds sejam os mesmos usados na chamada anterior para a
classe Tween. O método continueTo() usa o valor finish da chamada para a classe Tween,
em vez de especificar um valor para o argumento begin, conforme mostrado no ActionScript
a seguir:
import mx.transitions.Tween;
import mx.transitions.easing.*;
var ball_tween:Object = new Tween(ball_mc, "_x", Regular.easeIn, 0, 300, 3,
true);
ball_tween.onMotionFinished = function() {
ball_tween.continueTo(0, 3);
};
this.createEmptyMovieClip("box_mc", this.getNextHighestDepth());
with (box_mc) {
beginFill(0xFF0000, 60);
moveTo(0, 0);
lineTo(20, 0);
lineTo(20, Stage.height);
lineTo(0, Stage.height);
lineTo(0, 0);
endFill();
}
A primeira seção de código começa importando a classe Tween, assim como cada classe do
pacote de atenuação. A próxima seção de código cria um novo clipe de filme com uma
instância denominada box_mc e desenha um retângulo de 20 pixels de largura e da mesma
altura que o Stage.
3. Adicione o seguinte ActionScript após o código criado na etapa anterior:
var box_tween:Tween = new Tween(box_mc, "_x", Regular.easeInOut, 0,
Stage.width, 3, true);
box_tween.onMotionFinished = function() {
Esse código cria uma nova interpolação para animar por 3 segundos o clipe de filme
box_mc ao longo do eixo x- no Stage.
4. Selecione Control > Test Movie para testar a animação.
A caixa é animada da esquerda para a direita e ao contrário. Se a animação não estiver
suave, você poderá aumentar a taxa de quadros do documento de 12 para 24 qps.
À medida que a caixa aproxima-se da borda direita do Stage, ela é animada fora dos limites
do Stage. Embora isso não seja grave, você não vai querer que o retângulo desapareça em
um lado do Stage e, um segundo depois, reapareça para ser animado na outra direção.
Para fazer ajustes, anime o retângulo a partir de 0 pixels até a largura do Stage menos a
largura do clipe de filme box_mc.
5. Para impedir que o retângulo desapareça, revise as linhas correspondentes de código da
etapa 3 para que correspondam ao código a seguir:
var box_tween:Tween = new Tween(box_mc, "_x", Regular.easeInOut, 0,
(Stage.width - box_mc._width), 3, true);
Esse código executa duas funcionalidades diferentes. A primeira seção cria e posiciona uma
instância de clipe de filme e, em seguida, desenha um retângulo preto arredondado no
Stage. O segundo bloco de código aplica um filtro de brilho ao retângulo no Stage e define
um manipulador de eventos onEnterFrame, responsável pela animação do efeito de filtro.
O manipulador de eventos onEnterFrame anima o filtro de brilho entre um
embaçamento de 10 e 30 pixels e, quando a animação fica igual ou maior que 30 ou igual
ou menor que 10, a direção dela inverte.
3. Salve as alterações no documento do Flash e selecione Control > Test Movie para testar o
arquivo SWF.
Para obter mais informações sobre como trabalhar com filtros em um aplicativo, consulte os
seguintes tópicos:
■ “Trabalhando com pacotes de filtro” na página 528
■ “Trabalhando com filtros, armazenamento em cache e a classe MovieClip” na página 530
■ “Sobre detecção de cliques e filtros de rotação, inclinação e dimensionamento”
na página 532
■ “Aplicando filtros a instâncias de objeto e instâncias de BitmapData” na página 532
■ “Sobre manipulação de erros, desempenho e filtros” na página 533
Para obter um exemplo de como usar o ActionScript para aplicar filtros, localize um arquivo
de origem de exemplo, Filters.fla, na pasta Samples do seu disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Filters.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Filters.
Para usar a instrução import, especifique ActionScript 2.0 e Flash Player 6 ou uma
versão posterior na guia Flash da caixa de diálogo Publish Settings (Configurações de
publicação) do arquivo FLA.
A instrução import permite acessar classes sem que seja necessário especificar seus nomes
totalmente qualificados. Por exemplo, para usar a classe BlurFilter em um script, você deverá
fazer referência a ela pelo seu nome totalmente qualificado (flash.filters.BlurFilter) ou
importá-la. Se a importar, você poderá fazer referência a ela pelo seu nome de classe
(BlurFilter) em seu código. O código ActionScript a seguir demonstra as diferenças entre o
uso da instrução import e o uso de nomes de classe totalmente qualificados.
Se você não importar a classe BlurFilter, o seu código precisará usar o nome de classe
totalmente qualificado (o nome de pacote seguido pelo nome de classe) para usar o filtro:
// sem importar
var myBlur:flash.filters.BlurFilter = new flash.filters.BlurFilter(10, 10,
3);
O mesmo código, escrito com uma instrução import, permite acessar a classe BlurFilter
usando o nome de classe em vez de fazer uma referência contínua a ela com o nome
totalmente qualificado. Isso pode reduzir a quantidade de código digitada e evitar possíveis
erros de digitação:
// com importação
import flash.filters.BlurFilter;
var myBlur:BlurFilter = new BlurFilter(10, 10, 3);
A instrução import aplica-se apenas ao script atual (quadro ou objeto) no qual ela é chamada.
Por exemplo, suponha que você importe todas as classes do pacote macr.util no Frame 1 de
um documento do Flash. Nesse quadro, você pode fazer referência às classes do pacote usando
seus nomes de classe em vez do nome totalmente qualificado. Para usar o nome de classe em
outro script de quadro, faça referência às classes desse pacote pelos seus nomes totalmente
qualificados ou adicione uma instrução import ao outro quadro que importará as classes desse
pacote.
Ao usar as instruções import, lembre-se de que as classes somente são importadas para o nível
especificado. Por exemplo, se você importar todas as classes do pacote mx.transitions,
somente as classes do diretório /transitions/ serão importadas, e não todas as classes dos
subdiretórios (por exemplo, as classes do pacote mx.transitions.easing ).
DICA
Se você importar uma classe, mas não a usar no script, ela não será exportada como
parte do arquivo SWF. Isso significa que você pode importar pacotes grandes sem se
preocupar com o tamanho do arquivo SWF. O bytecode associado a uma classe
somente será incluído em um arquivo SWF se a classe for realmente usada.
Para obter um exemplo de como usar o ActionScript para aplicar filtros, localize um arquivo
de origem de exemplo, Filters.fla, na pasta Samples do seu disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Filters.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Filters.
Você pode acessar e modificar filtros da mesma forma que faria no caso de um objeto de array
comum. O uso da propriedade para definir e obter os filtros retorna uma duplicata do objeto
filters, e não uma referência.
Para modificar um filtro existente, é possível usar um código semelhante ao do procedimento
a seguir.
A primeira seção deste código usa a API de desenho para criar um quadrado vermelho e
posiciona a forma no Stage. A segunda seção do código aplica um filtro de sombreamento
ao quadrado. Em seguida, o código cria um array temporário para armazenar os filtros
atuais a serem aplicados ao quadrado vermelho no Stage. A propriedade distance do
primeiro filtro é definida para 10 pixels, e o filtro modificado é reaplicado à instância de
clipe de filme my_mc.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
N OT A
No momento, não há suporte disponível para a rotação de qualquer filtro com base
na rotação de seu respectivo pai ou para algum outro tipo de rotação. O filtro de
embaçamento sempre embaça perfeitamente na horizontal ou na vertical,
independentemente da rotação ou da inclinação de qualquer item na árvore de
objetos pai.
DICA
Para obter um exemplo de como usar o ActionScript para aplicar filtros, localize um arquivo
de origem de exemplo, Filters.fla, na pasta Samples do seu disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Filters.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Filters.
Se um objeto de 100 X 100 pixels aumentar o zoom uma vez, ele usará quatro vezes a
memória, pois as dimensões do conteúdo passarão para 200 X 200 pixels. Se você
aumentar o zoom mais duas vezes, a forma será desenhada como um objeto de 800 X
800 pixels, utilizando 64 vezes a memória em comparação ao objeto original de 100 X
100 pixels. Sempre que você usar filtros em um arquivo SWF, convém sempre desativar
as opções do menu de zoom no menu de contexto desse arquivo.
Você também poderá encontrar erros se usar tipos de parâmetro inválidos. Alguns parâmetros
de filtro também possuem um intervalo válido específico. Se você definir um valor fora do
intervalo válido, o valor será alterado para um valor válido dentro do intervalo. Por exemplo,
quality deve ser um valor de 1 a 3 para uma operação padrão e somente pode ser definido
para o intervalo de 0 a 15. Qualquer valor acima de 15 será definido como 15.
Com um filtro de embaçamento, utilize potências de 2 para blurX e blurY (por exemplo,
2, 4, 8, 16 e 32), pois eles são calculados de forma mais rápida, além de melhorar o
desempenho em 20% a 30%.
Esse código usa uma instância do clipe de filme carregador para carregar uma imagem
PNG semitransparente. Após o carregamento da imagem, ela é movida para o centro do
Stage e um filtro de brilho é aplicado.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
O efeito do filtro de brilho somente é aplicado à área opaca (não transparente) da imagem
PNG.
As seções a seguir descrevem como usar os filtros:
■ “Usando o filtro de embaçamento” na página 536
■ “Usando o filtro de sombreamento” na página 538
■ “Usando o filtro de brilho” na página 542
■ “Criando brilhos gradientes” na página 543
■ “Usando o filtro de chanfro” na página 545
■ “Aplicando um filtro de chanfro gradiente” na página 551
■ “Usando o filtro de matriz de cores” na página 552
■ “Usando o filtro de torção” na página 554
■ “Usando o filtro de mapa de deslocamento” na página 556
Para obter um exemplo de como usar o ActionScript para aplicar filtros, localize um arquivo
de origem de exemplo, Filters.fla, na pasta Samples do seu disco rígido.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Filters.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/Filters.
Para obter mais informações sobre esse filtro, consulte %{BlurFilter (flash.filters.BlurFilter)}%
em ActionScript 2.0 Language Reference.
O procedimento a seguir embaça uma imagem carregada dinamicamente com base na posição
atual do ponteiro do mouse no Stage. Quanto mais distante o ponteiro estiver do centro do
Stage, mais embaçada estará a imagem.
A primeira seção deste código carrega e posiciona uma imagem carregada dinamicamente
no Stage. A segunda seção define um ouvinte que é chamado sempre que o mouse é
movido. Calcule a quantidade de embaçamento horizontal e vertical com base na posição
atual do ponteiro do mouse no Stage. Quanto mais distante você mover o ponteiro do
mouse do centro do Stage, mais embaçamento será aplicado à instância.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Mova o ponteiro do mouse ao longo do eixo x para modificar a quantidade de
embaçamento horizontal. A instância ficará mais embaçada quanto mais afastado estiver o
ponteiro do centro horizontal do Stage. Mover o ponteiro ao longo do eixo y faz com que
o embaçamento vertical aumente ou diminua, dependendo da distância do centro vertical
do Stage.
DICA
Com um filtro de embaçamento, utilize potências de dois para blurX e blurY (por
exemplo, 2, 4, 8, 16 e 32), pois eles são calculados de forma mais rápida, além de
melhorar o desempenho em 20% a 30%.
ATENÇÃO
A primeira seção do código cria um novo clipe de filme e utiliza a API de desenho para
criar um quadrado vermelho. A segunda seção define um ouvinte de mouse que é
chamado sempre que o mouse é movido. O ouvinte de mouse calcula a distância do
sombreamento e o nível de embaçamento com base nas posições x e y do ponteiro do
mouse e reaplica o filtro de sombreamento. Se você clicar no quadrado vermelho, a
intensidade do sombreamento aumentará.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Mova o ponteiro do mouse ao longo do eixo x para alterar o valor da distância do
sombreamento e, em seguida, mova o ponteiro ao longo do eixo y para alterar a
quantidade de embaçamento aplicada à instância do clipe de filme.
A primeira seção deste código define uma instância de sombreamento, carrega uma
imagem externa e reposiciona a imagem no centro do Stage. A segunda seção define um
ouvinte de mouse que é chamado sempre que o usuário movimenta o ponteiro do mouse
no Stage. Sempre que o mouse for movido, o manipulador de eventos recalculará a
distância e o ângulo entre o ponteiro do mouse e o canto superior esquerdo da imagem.
Com base nesse cálculo, o filtro de sombreamento será reaplicado ao clipe de filme.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Este código ActionScript usa a classe MovieClipLoader para carregar uma imagem e
aplicar um filtro de sombreamento quando a imagem estiver completamente carregada do
servidor remoto.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
O Flash carrega uma imagem PNG com um fundo transparente. Quando você aplicar o
filtro de sombreamento, somente a parte opaca (não transparente) da imagem terá o filtro
aplicado.
this.createEmptyMovieClip("shapeClip", 10);
with (shapeClip) {
beginFill(0xFF0000, 100);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 100);
lineTo(0, 100);
lineTo(0, 0);
endFill();
}
shapeClip._x = 100;
shapeClip._y = 100;
shapeClip.onPress = function():Void {
glow.strength++;
shapeClip.filters = [glow];
};
var glow:GlowFilter = new GlowFilter(0xCC0000, 0.5, 10, 10, 2, 3);
var mouseListener:Object = new Object();
mouseListener.onMouseMove = function():Void {
glow.blurX = (_xmouse / Stage.width) * 255;
glow.blurY = (_ymouse / Stage.width) * 255;
shapeClip.filters = [glow];
};
Mouse.addListener(mouseListener);
// posicionar a forma
shapeClip._x = 100;
shapeClip._y = 100;
// definir um brilho gradiente
var gradientGlow:GradientGlowFilter = new GradientGlowFilter(0, 45,
[0x000000, 0xFF0000], [0, 1], [0, 255], 10, 10, 2, 3, "outer");
O código anterior é dividido em três seções. A primeira seção do código usa a API de
desenho para criar um quadrado e posiciona a forma no Stage. A segunda seção define
uma nova instância de filtro de brilho gradiente, que cria um brilho variando de vermelho
a preto. A terceira seção define um ouvinte que ouve dois manipuladores de eventos do
mouse. O primeiro manipulador de eventos é onMouseDown, que aumenta a intensidade
do brilho gradiente. O segundo manipulador de eventos é onMouseMove, que é chamado
sempre que você movimenta o ponteiro do mouse no arquivo SWF. Quanto mais para
longe você move o ponteiro do mouse do canto superior esquerdo do documento do
Flash, mais intenso é o efeito de brilho aplicado.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
A primeira seção do código define uma instância BevelFilter e utiliza a API de desenho
para criar um quadrado no Stage. Quando você clicar no quadrado do Stage, o valor de
intensidade atual do chanfro será incrementado e aplicará uma aparência mais alta e legível
ao chanfro. A segunda seção define um ouvinte de mouse, que modifica a distância e o
embaçamento do chanfro com base na posição atual do ponteiro do mouse.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Quando você move o ponteiro do mouse pelo eixo x, a distância de deslocamento do
chanfro aumenta ou diminui. Quando você move o ponteiro do mouse pelo eixo y, as
coordenadas atuais do ponteiro modificam a quantidade de embaçamento horizontal e
vertical.
O valor do ângulo determina qual borda será usada como realce e qual será usada
como sombreamento.
O valor do ângulo determina o ângulo usado para aplicar as cores de gradiente ao objeto, ou
seja, o local em que o realce e o sombreamento aparecerão no objeto. As cores são aplicadas na
mesma ordem do array.
O código a seguir usa um quadrado rosa (criado com a API de desenho) e aplica um filtro de
gradiente em arco-íris. As cores são, na ordem apresentada no array: azul, verde, roxo e
amarelo (realce); vermelho (preenchimento de base); amarelo, roxo, verde, preto
(sombreamento). Para determinar os valores de proporção, atribuímos quatro valores de 0 a
127 praticamente iguais para as cores de realce e cores de sombreamento de 129 a 255. As
cores das bordas externas foram azul (16) e preto (235).
var colors:Array = [0x0000FF, 0x00FF00, 0x9900FF, 0xFFFF00, 0xFF0000,
0xFFFF00, 0x9900FF, 0x00FF00,0x000000];
var alphas:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1];
var ratios:Array = [16, 32, 64, 96, 128, 160, 192, 224, 235];
var gradientBevel:GradientBevelFilter = new GradientBevelFilter(8, 225,
colors, alphas, ratios, 16, 16, 1.3, 2, "inner", false);
A figura a seguir mostra o filtro de chanfro gradiente criado pelo código acima, um chanfro
em arco-íris de nove cores aplicado a um clipe de filme de retângulo vermelho:
Este código usa a API de desenho para criar um quadrado no Stage que é posicionado no
centro do Stage. Quando você mover o ponteiro do mouse no Stage, a quantidade de
embaçamento ao longo dos eixos x e y aumentará ou diminuirá. Quando você mover o
ponteiro para a esquerda do Stage, a quantidade de embaçamento horizontal diminuirá.
Quando você movê-lo para a direita do Stage, o embaçamento aumentará. Da mesma
forma, quanto maior o ponteiro no Stage, menor será a quantidade de embaçamento ao
longo do eixo y.
3. Selecione Control > Test Movie para testar o documento e exibir os resultados.
Você pode aplicar o filtro de matriz de cores a bitmaps e instâncias de clipes de filme.
Para obter mais informações sobre o filtro de matriz de cores, consulte %{ColorMatrixFilter
(flash.filters.ColorMatrixFilter)}% em ActionScript 2.0 Language Reference.
Você pode usar o filtro de matriz de cores para modificar o brilho de uma instância, conforme
demonstrado no exemplo a seguir.
Este código carrega dinamicamente uma imagem JPEG usando uma instância
MovieClipLoader. Depois que a imagem estiver completamente carregada e posicionada
no Stage, o brilho da instância será definido como 100% usando um filtro de matriz de
cores.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
Você também pode criar um efeito de brilho animado combinando a classe Tween com a
classe ColorMatrixFilter, conforme é mostrado no procedimento a seguir.
A primeira seção de código usa a classe MovieClipLoader para carregar uma imagem JPEG
no Stage. Depois que a imagem estiver completamente carregada, reposicione-a no centro
do Stage. Em seguida, utilize a classe Tween para animar o nível de brilho da imagem. Para
animar o brilho, use o método Object.watch(), que registra um manipulador de eventos
iniciado quando uma propriedade especificada de um objeto do ActionScript é alterado.
Sempre que algum ActionScript tentar definir a propriedade de brilho personalizada da
instância target_mc, você chamará a função brightnessWatcher. A função
brightnessWatcher personalizada cria um novo array, que utiliza um filtro de matriz de
cores a fim de definir o brilho da imagem de destino para uma quantidade especificada.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
Depois que a imagem estiver carregada e posicionada no Stage, seu brilho animará entre -
100 e 100. Após a conclusão da interpolação de brilho, a animação será invertida com o
método Tween.yoyo(), que resultará em uma animação constante da interpolação.
this.createEmptyMovieClip("shape_mc", 1);
shape_mc.createEmptyMovieClip("holder_mc", 1);
var imageLoader:MovieClipLoader = new MovieClipLoader();
imageLoader.loadClip("http://www.helpexamples.com/flash/images/
image1.jpg", shape_mc.holder_mc);
var matrixArr:Array = [1, 4, 6, 4, 1, 4, 16, 24, 16, 4, 16, 6, 24, 36,
24, 6, 4, 16, 24, 16, 4, 1, 4, 6, 4, 1];
var convolution:ConvolutionFilter = new ConvolutionFilter(5, 5,
matrixArr);
shape_mc.filters = [convolution];
O código anterior é dividido em três seções. A primeira seção importa duas classes:
ConvolutionFilter e BitmapData. A segunda seção cria um clipe de filme aninhado e usa
um objeto de clipe de filme carregador para carregar uma imagem no clipe de filme
aninhado. Um objeto de filtro de convolução é criado e aplicado ao clipe de filme
shape_mc. A seção final do código define um objeto ouvinte de mouse que modifica as
propriedades divisor e bias do filtro de convolução com base na posição atual do ponteiro
do mouse e reaplica o filtro ao clipe de filme shape_mc.
var perlinBmp:BitmapData;
var displacementMap:DisplacementMapFilter;
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip):Void {
target_mc._x = (Stage.width - target_mc._width) / 2;
target_mc._y = (Stage.height - target_mc._height) / 2;
perlinBmp = new BitmapData(target_mc._width, target_mc._height);
perlinBmp.perlinNoise(target_mc._width, target_mc._height, 10,
Math.round(Math.random() * 100000), false, true, 1, false);
displacementMap = new DisplacementMapFilter(perlinBmp, new Point(0,
0), 1, 1, 100, 100, "color");
shapeClip.filters = [displacementMap];
};
var shapeClip:MovieClip = this.createEmptyMovieClip("shapeClip", 1);
shapeClip.createEmptyMovieClip("holderClip", 1);
var imageLoader:MovieClipLoader = new MovieClipLoader();
imageLoader.addListener(mclListener);
Este código carrega uma imagem JPEG inserindo-a no Stage. Depois que a imagem estiver
completamente carregada, o código criará uma instância BitmapData e usará o método
perlinNoise() para preenchê-la com pixels colocados aleatoriamente. A instância
BitmapData passa para o filtro de mapa de deslocamento, que é aplicado à imagem
fazendo com que ela tenha uma aparência distorcida.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
Como o trecho de código anterior retorna uma cópia do array de filtros, o código modifica a
cópia, em vez do array original. Para modificar a propriedade blurX, você precisaria usar o
seguinte código ActionScript:
// funciona
var filterArray:Array = my_mc.filters;
filterArray[0].blurX = 20;
my_mc.filters = filterArray;
O procedimento a seguir embaça uma imagem com base na posição atual do ponteiro do
mouse no Stage. Sempre que o ponteiro do mouse movimenta-se horizontalmente ou
verticalmente, as propriedades blurX e blurY do filtro de embaçamento são modificadas
adequadamente.
this.createEmptyMovieClip("holder_mc", 10);
holder_mc.createEmptyMovieClip("img_mc", 20);
holder_mc.img_mc.loadMovie("http://www.helpexamples.com/flash/images/
image2.jpg");
holder_mc.onMouseMove = function() {
var tempFilter:BlurFilter = holder_mc.filters[0];
tempFilter.blurX = Math.floor((_xmouse / Stage.width) * 255);
tempFilter.blurY = Math.floor((_ymouse / Stage.height) * 255);
holder_mc.filters = [tempFilter];
};
this.createEmptyMovieClip("holder_mc", 10);
holder_mc.createEmptyMovieClip("img_mc", 20);
O código anterior cria uma nova instância do filtro de sombreamento e atribui o nome
greenDropShadow a ele. O objeto de sombreamento verde é duplicado com o método
DropShadowFilter.clone() e cria um novo objeto de filtro denominado
redDropShadow. Os filtros de sombreamento verde e vermelho são aplicados à instância de
clipe de filme flower_mc no Stage. Se você não tiver chamado o método clone(), os dois
sombreamentos serão exibidos em vermelho. O motivo dessa aparência é que a
configuração da propriedade redDropShadow.color altera os objetos de sombreamento
vermelho e verde, pois o sombreamento vermelho contém uma referência ao
sombreamento verde.
5. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
O filtro é duplicado e clonado, e os dois filtros são aplicados à instância flower_mc.
Para obter mais informações sobre o método clone(), consulte %{clone (método
DropShadowFilter.clone)}% em ActionScript 2.0 Language Reference. Para obter informações
relacionadas, consulte também o método clone() de qualquer classe de filtro.
Este código cria um campo de texto com o nome de instância status_txt, que segue o
ponteiro do mouse e exibe os valores atuais dos parâmetros high e low para o método
noise(). A função setInterval() altera o efeito de ruído, que é atualizado a cada 100
milissegundos (1/10 de segundo), chamando continuamente a função updateNoise().
Os parâmetros high e low para o método noise() são determinados calculando a posição
atual do ponteiro no Stage.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
Mover o ponteiro do mouse ao longo do eixo x afeta o parâmetrolow, enquanto movê-lo
ao longo do eixo y afeta o parâmetrohigh.
A classe BitmapData permite distorcer uma imagem carregada dinamicamente usando uma
combinação de um efeito do método perlinNoise() com um filtro de mapa de
deslocamento. O procedimento a seguir mostra o seguinte.
Esse exemplo de código consiste em cinco seções lógicas. A primeira seção importa as
classes necessárias para o exemplo. O segundo bloco de código cria um clipe de filme
aninhado e carrega uma imagem JPEG a partir de um servidor remoto. O terceiro bloco
de código cria uma nova instância BitmapData denominada perlinBmp, cujo tamanho é
igual às dimensões do Stage. A instância perlinBmp contém os resultados de um efeito de
ruído de Perlin e é usada posteriormente como parâmetro para o filtro de mapa de
deslocamento. O quarto bloco de código cria e aplica o efeito de filtro de mapa de
deslocamento à imagem carregada dinamicamente que foi criada anteriormente. O quinto
e último bloco de código cria um ouvinte do mouse que gera novamente o ruído de Perlin
usado pelo filtro de mapa de deslocamento sempre que o usuário movimenta o ponteiro
do mouse.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Modos de mistura
Você pode aplicar modos de mistura a objetos de clipe de filme através da área de trabalho do
Flash (Flash Professional 8) ou do ActionScript (Flash Basic 8 e Flash Professional 8). Durante
a execução, vários gráficos são mesclados como uma forma. Por esse motivo, não é possível
aplicar diferentes modos de mistura a diferentes símbolos gráficos.
Para obter mais informações sobre como usar o ActionScript para aplicar modos de mistura,
consulte “Aplicando modos de mistura” na página 565.
Os modos de mistura envolvem a combinação das cores de uma imagem (a imagem base) com
as cores de outra imagem (a imagem de mistura) para produzir uma terceira imagem. Cada
valor de pixel de uma imagem é processado com o valor de pixel correspondente da outra
imagem a fim de produzir um valor de pixel para essa mesma posição no resultado.
A propriedade MovieClip.blendMode oferece suporte aos seguintes modos de mistura:
add Normalmente usado para criar um efeito de dissolução de luminosidade animado entre
duas imagens.
alpha Normalmente usado para aplicar a transparência do primeiro plano no fundo.
darken Normalmente usado para sobrepor um tipo.
function cbListener(eventObj:Object):Void {
img_mc.blendModeType_mc.blendMode = eventObj.target.value;
}
blendMode_cb.addEventListener("change", cbListener);
Este código ActionScript preenche a caixa de combinação com cada tipo de modo de
mistura, para que o usuário possa ver cada efeito na imagem carregada dinamicamente.
Um objeto ouvinte é criado e usado com uma instância MovieClipLoader. O objeto
ouvinte define um único ouvinte de eventos, onLoadInit, que é chamado depois que o
download da imagem tiver sido concluído e ela for inicializada pelo Flash. O ouvinte de
eventos cria um novo clipe de filme denominado blendModeType_mc e usa a API de
desenho para desenhar uma forma retangular sobre a metade esquerda da imagem. Em
seguida, o modo de mistura selecionado no momento para a instância do ComboBox é
aplicado ao clipe de filme blendModeType_mc.
O restante do código configura a instância MovieClipLoader, responsável pelo
carregamento da imagem especificada em um clipe de filme no Stage. Finalmente, um
ouvinte é definido para a instância do ComboBox blendMode_cb, que aplica o modo de
mistura selecionado sempre que um novo item é escolhido na instância do ComboBox.
4. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
2. Se você usar o método setMask() e a máscara tiver um cache de bitmap, o Flash executará
uma mistura alfa entre as duas imagens.
3. Em seguida, são aplicados filtros (embaçamento, sombreamento, brilho etc.)
4. Se você usar a classe ColorTransform, a operação de transformação de classe será executada
e armazenada em cache como um resultado de bitmap.
5. Se você aplicar um modo de mistura, a mistura será executada (através de um renderizador
vetorial).
6. Se você aplicar camadas de máscara externas, elas executarão o mascaramento (através de
um renderizador vetorial).
Este código desenha uma linha a partir de 0,0 no Stage até 200,100. Em seguida, as
coordenadas _x e _y da linha são modificadas para reposicionar a linha em 100,100 no
Stage.
3. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme)
para testar o arquivo SWF.
3. Salve o documento do Flash e selecione Control > Test Movie para testá-lo.
Este código usa a API de desenho para criar um círculo no Stage. A forma circular usa
somente quatro chamadas para o método MovieClip.curveTo() e, portanto, pode
apresentar uma aparência um pouco distorcida. Para obter outro exemplo que utilize a API
de desenho para criar um círculo, consulte o procedimento sobre como criar um círculo
em “Desenhando formas específicas” na página 570 no caso de um código que usa oito
chamadas para o método MovieClip.curveTo() a fim de criar um círculo mais realista.
Nesse código, o clipe de filme vazio (triangle_mc) chama métodos de desenho. O código
desenha um triângulo com linhas roxas de 5 pixels, sem preenchimento.
4. Salve o documento do Flash e selecione Control > Test Movie para testá-lo.
Para obter informações detalhadas sobre esses métodos, consulte as respectivas entradas em
%{MovieClip}% em ActionScript 2.0 Language Reference.
Você pode localizar um arquivo de origem de exemplo, drawingapi.fla, na pasta Samples do
seu disco rígido, que mostra como usar a API de desenho em um aplicativo Flash.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\DrawingAPI.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/ActionScript/DrawingAPI.
3. Salve o documento do Flash e selecione Control > Test Movie para testá-lo.
3. Salve o documento do Flash e selecione Control > Test Movie para testar o documento.
Um retângulo verde é exibido no Stage com 240 pixels de largura, 180 pixels de altura e
cantos arredondados de 20-pixels. Você pode criar várias instâncias de retângulos
arredondados criando novos clipes de filme com MovieClip.createEmptyMovieClip()
e chamando sua função drawRoundedRectangle() personalizada.
Você pode criar um círculo perfeito usando a API de desenho, conforme o procedimento a
seguir.
3. Salve o documento do Flash e selecione Control > Test Movie para testar o arquivo SWF.
Este código cria um círculo mais complexo e realista do que o exemplo de círculo anterior. Em
vez de usar apenas quatro chamadas para o método curveTo(), este exemplo usa oito
chamadas para esse método, o que confere uma aparência muito mais arredondada à forma.
Você pode usar a API de desenho para criar um triângulo, conforme o procedimento a seguir.
O código ActionScript anterior usa a API de desenho para criar um quadrado no Stage e
chama o método beginGradientFill() para preencher o quadrado com um gradiente
circular vermelho e azul.
3. Salve o documento do Flash e selecione Control > Test Movie para exibir o arquivo do
Flash.
O código anterior usa a API de desenho para criar duas linhas no Stage. A primeira linha é
vermelha e tem uma espessura igual a 0, indicando uma espessura fina, e a segunda linha é
azul e possui uma espessura de 1 pixel.
Você pode usar um dos quatro modos diferentes para especificar quando deve ocorrer o
dimensionamento e quando ele não deve ocorrer. Estes são os valores possíveis para a
propriedade noScale:
normal Sempre dimensiona a espessura (padrão).
vertical Não dimensiona a espessura se o objeto for dimensionado verticalmente.
horizontal Não dimensiona a espessura se o objeto for dimensionado horizontalmente.
none Nunca dimensiona a espessura.
O código anterior usa a API de desenho para criar três linhas, cada uma com um valor
diferente para capsStyle.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
Você pode definir os três tipos de estilos de união a seguir para o parâmetro jointStyle:
■ round (padrão)
■ miter
■ bevel
O Flash usa a API de desenho para criar três triângulos no Stage. Cada triângulo possui
um valor diferente para o seu estilo de união.
3. Salve o documento do Flash e selecione Control > Test Movie para testar o documento.
Este exemplo de código importa a classe Tween e cada uma das classes existentes no pacote
de atenuação. Em seguida, ele cria um objeto que funciona como ouvinte de uma
instância MovieClipLoader, criada em uma seção posterior do código. O objeto ouvinte
define um único ouvinte de eventos, onLoadInit, que centraliza a imagem JPEG
carregada dinamicamente no Stage. Depois que o código reposiciona a imagem, uma nova
instância de clipe de filme é criada no clipe de filme target_mc (que contém a imagem
JPEG carregada dinamicamente). Nesse novo clipe de filme, o código da API de desenho
cria um retângulo com as mesmas dimensões da imagem JPEG. O novo clipe de filme
mascara a imagem JPEG chamando o método MovieClip.setMask(). Depois que a
máscara estiver desenhada e configurada, ela usará a classe Tween para animar, o que
revelará lentamente a imagem.
3. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme)
para testar o arquivo SWF.
N OT A
Por padrão, a instância do componente Button possui 100 pixels de largura por 22 pixels
de altura.
Este trecho de código rastreia o valor do objeto Rectangle usado pela propriedade
scale9Grid. O retângulo possui um coordenada x e uma coordenada y de 20 pixels, largura
de 120 pixels e altura de 120 pixels.
O código anterior é dividido em cinco seções. A primeira seção de código importa duas
classes: mx.controls.Button (a classe do componente Button) e flash.geom.Rectangle. A
segunda seção de código cria uma nova instância da classe Rectangle e especifica as
coordenadas x e y de 100 pixels, além de uma largura e altura de 100 pixels. Essa instância
de retângulo é usada para configurar a grade de dimensionamento em 9 trechos para uma
forma de clipe de filme criada posteriormente.
Em seguida, crie uma nova instância do componente Button e atribua o nome de instância
small_button a ele. Sempre que você clicar nesse botão, o clipe de filme criado
anteriormente será redimensionado para 100 pixels de largura X 100 pixels de altura. A
quarta seção de código cria dinamicamente uma nova instância da classe Button
denominada large_button, que, quando clicada, redimensiona o clipe de filme de
destino para 450 pixels de largura X 300 pixels de altura. A seção final do código cria uma
nova instância da classe Button, que pode ser ativada e desativada pelo usuário. Quando o
botão está no estado ativado, a grade em 9 trechos é aplicada. Se o botão estiver no estado
desativado, a grade em 9 trechos será desabilitada.
14. Salveo documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme)
para testar o arquivo SWF.
Este exemplo de código adiciona e posiciona três instâncias do componente Button no
Stage e cria ouvintes de eventos para cada botão. Se clicar no botão Large (Grande) com a
grade em 9 trechos desativada, você perceberá que a imagem fica distorcida e parece
esticada. Ative a grade clicando no botão de alternância e clique novamente no botão
Large. Com a grade em 9 trechos ativada, o círculo localizado no canto superior esquerdo
não deverá mais apresentar uma aparência distorcida.
589
Sobre eventos e interação
Sempre que um usuário clica no mouse ou pressiona uma tecla, essa ação gerado um evento.
Esses tipos de eventos normalmente são chamados eventos do usuário, pois são gerados em
resposta a alguma ação executada pelo usuário. Você pode escrever ActionScript para
responder a esses eventos ou manipulá-los. Por exemplo, quando um usuário clica em um
botão, você pode enviar a reprodução para outro quadro do arquivo SWF ou carregar uma
nova página da Web no navegador.
Em um arquivo SWF, botões, clipes de filme e campos de texto geram eventos aos quais você
pode responder. O ActionScript fornece três formas de manipular eventos: métodos
manipuladores de eventos, ouvintes de eventos e manipuladores on() e onClipEvent(). Para
obter informações sobre eventos e como manipulá-los, consulte Capítulo 10, “Manipulando
eventos.”.
No exemplo final, a função global gotoAndStop() é usada para mover a reprodução para o
Frame 1 (Quadro 1) de Scene 2 (Cena 2). Se nenhuma cena for especificada, a reprodução
seguirá para o quadro definido na cena atual. Somente é possível usar o parâmetro scene na
timeline raiz, e não nas timelines de clipes de filme ou de outros objetos no documento.
nextScene_mc.onRelease = function() {
gotoAndStop("Scene 2", 1);
}
Você também pode enviar variáveis junto com o URL, usando o método GET ou POST. Esse
procedimento é útil quando a página carregada de um servidor de aplicativos, como uma
página do ColdFusion Server (CFM), espera receber variáveis de formulário. Por exemplo,
imagine que você deseje carregar uma página CFM chamada addUser.cfm que espera duas
variáveis de formulário, primeiro Name e age. Para isso, você pode criar um clipe de filme
chamado variables_mc que defina essas duas variáveis, como mostrado no exemplo a seguir.
variables_mc.firstName = "Francois";
variables_mc.age = 32;
O código a seguir carrega addUser.cfm em uma janela de navegador em branco e passa para a
página CFM variables_mc.name e variables_mc.age no cabeçalho POST.
variables_mc.getURL("addUser.cfm", "_blank", "POST");
Você pode usar o ActionScript a seguir para chamar openNewWindow de seu arquivo SWF:
var myURL:String = "http://foo.com";
getURL("javascript:openNewWindow('" + String(myURL) + "');");
Para obter mais informações, consulte %{função getURL}% em ActionScript 2.0 Language
Reference (Referência da linguagem ActionScript 2.0).
5. Selecione Control > Test movie para testar o filme do Flash. Os campos box1_txt e
box2_txt mostram a posição do ponteiro durante a sua movimentação no Stage.
Para obter mais informações sobre as propriedades _xmouse e _ymouse, consulte %{_xmouse
(propriedade MovieClip._xmouse)}% e %{_ymouse (propriedade MovieClip._ymouse)}%
em ActionScript 2.0 Language Reference.
Verifique se selecionou Control (Controlar) > Disable Keyboard Shortcuts (Desativar atalhos
de teclado), caso contrário, determinadas teclas com comportamento interno não serão
substituídas quando você usar Control > Test Movie para testar o aplicativo. Consulte o
parâmetro keyPress de %{manipulador on}% em ActionScript 2.0 Language Reference.
Você pode obter códigos de teclas virtuais ou valores ASCII (American Standard Code for
Information Interchange, Código padrão americano para intercâmbio de informações) de
pressionamentos de teclas:
■ Para obter o código de tecla virtual da última tecla pressionada, use o método getCode().
■ Para obter o valor ASCII da última tecla pressionada, use o método getAscii().
Um código de tecla virtual é atribuído a cada tecla física de um teclado. Por exemplo, a tecla
de seta para a esquerda tem o código de tecla virtual 37. O uso desse código garante que os
controles do arquivo SWF sejam os mesmos em todos os teclados, independentemente de
linguagem ou da plataforma.
Valores ASCII são atribuídos aos primeiros 127 caracteres em cada conjunto de caracteres. Os
valores ASCII fornecem informações sobre um caractere da tela. Por exemplo, a letra “A” e a
letra “a” possuem valores ASCII diferentes.
Decida quais teclas usar e determine seus códigos de teclas virtuais executando um destes
procedimentos:
■ Consulte a lista de códigos de teclas em Apêndice C, “Teclas do teclado e valores de
códigos de teclas.”.
■ Use uma constante da classe Key. (Na caixa de ferramentas Actions, clique em
ActionScript 2.0 Classes (Classes do ActionScript 2.0) > Movie (Filme) > Key (Tecla) >
Constants (Constantes).)
■ Atribua o manipulador onClipEvent() a seguir a um clipe de filme, selecione Control >
Test Movie e pressione a tecla desejada:
onClipEvent(keyDown) {
trace(Key.getCode());
}
5. Para criar o manipulador de eventos para o clipe de filme do carro que verifique qual tecla
de seta (para a esquerda, para a direita, para cima ou para baixo) está pressionada no
momento, adicione este código ao painel Actions:
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
};
Key.addListener(keyListener);
6. Para verificar se a tecla de seta para a esquerda está pressionada e mover o clipe de filme do
carro de forma apropriada, adicione o código ao corpo do manipulador de eventos
onEnterFrame.
O seu código deve ser semelhante ao exemplo a seguir (o novo código está em negrito):
var distance:Number = 10;
this.createTextField("display_txt", 999, 0, 0, 100, 20);
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
if (Key.isDown(Key.LEFT)) {
car_mc._x = Math.max(car_mc._x - distance, 0);
display_txt.text = "Left";
}
};
Key.addListener(keyListener);
7. Para que o botão azul altere a cor do clipe de filme car_mc para azul, adicione o código a
seguir ao painel Actions:
blue_btn.onRelease = function() {
colorTrans.rgb = 0x333399; // azul
trans.colorTransform = colorTrans;
};
blue_btn.onRelease = function() {
colorTrans.rgb = 0x333399; // azul
trans.colorTransform = colorTrans;
};
red_btn.onRelease = function() {
colorTrans.rgb = 0xFF0000; // vermelho
trans.colorTransform = colorTrans;
};
9. Selecione Control > Test Movie para alterar a cor do clipe de filme.
Para obter mais informações sobre os métodos da classe ColorTransform, consulte
%{ColorTransform (flash.geom.ColorTransform)}% em ActionScript 2.0 Language Reference.
Esse código primeiro interrompe o clipe de filme speaker. Em seguida, ele cria um novo
objeto Sound (song_sound) e anexa o som cujo identificador de vinculação é
a_thousand_ways. Os manipuladores de eventos onRelease associados aos objetos
playButton e stopButton iniciam e interrompem o som usando os métodos
Sound.start() e Sound.stop(), e também iniciam e interrompem o som anexado.
7. Selecione Control > Test Movie para ouvir o som.
volume_mc.handle_btn.onPress = function() {
startDrag(this._parent, false, this._parent.left, this._parent.top,
this._parent.right, this._parent.bottom);
};
volume_mc.handle_btn.onRelease = function() {
stopDrag();
var level:Number = Math.ceil(this._parent._x - this._parent.left);
this._parent._parent.song_sound.setVolume(level);
Detectando colisões
O método hitTest() da classe MovieClip detecta colisões em um arquivo SWF. Ele verifica
se um objeto colidiu com um clipe de filme e retorna um valor booleano (true ou false).
Você deseja saber se houve colisão para testar se o usuário chegou a uma certa área estática no
Stage ou para determinar quando um clipe de filme alcançou outro. Com hitTest(), você
pode determinar esses resultados.
Você pode usar os parâmetros de hitTest() para especificar as coordenadas x e y de uma
área sensível a cliques no Stage ou usar o caminho de destino de outro clipe de filme como
uma área sensível a cliques. Quando você especificar x e y, hitTest() retornará true se o
ponto identificado por (x, y) não for transparente. Quando um destino é passado para
hitTest(), as caixas delimitadoras dos dois clipes de filme são comparadas. Se houver uma
interseção entre elas, hitTest() retornará true. Se não houver uma interseção entre as duas
caixas, hitTest() retornará false.
Você também pode usar hitTest() para testar uma colisão entre dois clipes de filme.
O exemplo a seguir mostra como detectar uma colisão entre um mouse e os clipes de filme no
Stage.
4. Selecione Control > Test Movie e mova o ponteiro sobre o clipe de filme para testar a
colisão.
O valor true é exibido sempre que o ponteiro está sobre um pixel não transparente.
car_mc.onPress = function() {
this.startDrag(false);
updateAfterEvent();
};
car_mc.onRelease = function() {
this.stopDrag();
};
5. Selecione Control > Test Movie e arraste o clipe de filme para testar a detecção da colisão.
Sempre que a caixa delimitadora do carro formar uma interseção com a caixa delimitadora
da área, o status será true.
Para obter mais informações, consulte %{hitTest (método MovieClip.hitTest)}% em
ActionScript 2.0 Language Reference.
5. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
6. Arraste o ponteiro para desenhar uma linha no Stage.
Este ActionScript cria dois pontos finais de vinculação de dados, um para cada
componente vinculado. O primeiro ponto final criado define a partir de qual componente
está ocorrendo a vinculação (in_ti), qual propriedade deve ser observada (text) e qual
evento ativará a vinculação (focusOut). O segundo ponto final criado lista apenas o
componente e a propriedade (out_ti e text, respectivamente). Finalmente, você cria a
vinculação entre os dois pontos finais ao chamar o construtor da classe Binding (new
Binding(src, dest)).
Você não precisa usar nomes de classe totalmente qualificados (por exemplo,
mx.data.binding.EndPoint) em seu ActionScript, conforme já viu no primeiro trecho
de código. Se usar a instrução import no início do código, você poderá evitar a utilização
de nomes totalmente qualificados. Ao importar todas as classes do pacote
mx.data.binding usando o caractere curinga (*) (o pacote inclui as classes EndPoint e
Binding), você poderá reduzir o código e fazer referência direta às classes EndPoint e
Binding. Para obter mais informações sobre as instruções import, consulte a entrada
import em ActionScript 2.0 Language Reference.
8. Selecione Control > Test Movie para testar o código no ambiente de teste. Digite um texto
no campo de entrada de texto in_ti .
Depois que a instância in_ti perder o foco (clique no Stage, pressione Tab ou clique no
segundo campo), o Flash copiará qualquer texto digitado em in_ti para o campo de texto
out_ti.
9. Selecione File (Arquivo) > Save (Salvar) para salvar as alterações.
Se desejar modificar o texto do campo de entrada de texto out_ti do exercício anterior, o seu
código poderá ficar bem mais complexo. Por padrão, se usar o Component inspector para
configurar vinculações, você criará uma conexão bidirecional. Isso significa que, se você alterar
o campo de texto no Stage, o outro campo de texto também será alterado. Quando você usa o
ActionScript para criar vinculações, o seu aplicativo funciona da maneira oposta. Por padrão,
as vinculações de dados durante a execução são unidirecionais, a menos que você especifique o
contrário, conforme demonstrado no exemplo a seguir.
4. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
O Flash altera o segundo valor no campo de entrada de texto in_ti e o atualiza para
out_ti. Uma conexão bidirecional foi criada com êxito.
Use objetos para definir os pontos finais em vez de criar novas instâncias da classe
EndPoint, conforme demonstrado nos exercícios anteriores desta seção. O trecho de
código desta etapa cria dois objetos, que funcionam como pontos finais da vinculação.
Crie a vinculação ao chamar o construtor da classe Binding. Para reduzir ainda mais a
quantidade de código (e a legibilidade), defina os objetos inline, como mostra o trecho a
seguir:
new mx.data.binding.Binding({component:my_ch, property:"selected",
event:"click"}, {component:my_lbl, property:"text"});
Este ActionScript diminui a legibilidade do seu código, mas também a digitação a ser feita.
Se compartilhar seus arquivos FLA (ou ActionScript), é possível que você deseje usar o
primeiro trecho do ActionScript, por ser mais fácil de ser compreendido.
A primeira seção de código define a nova classe DateFormat, que estende a classe
CustomFormatter no pacote mx.data.binding. Lembre-se de que o Flash compila as
classes de vinculação no arquivo de componente DataBindingClasses, para que você pode
vê-las diretamente ou localizá-las na pasta Classes, no diretório de instalação do Flash.
O único método usado é o format(), que converte a instância de data em um formato de
seqüência de caracteres personalizado. A próxima etapa consiste em criar um array de
nomes de meses para que o resultado final tenha uma aparência próxima de NOV 4, 2004,
em vez do formato de data padrão. Lembre-se de que os arrays têm zero como base no
Flash, portanto, se o valor de rawValue.getMonth() retornar 1, ele representará fevereiro,
e não janeiro (pois janeiro corresponde ao mês 0). O código restante cria a seqüência de
caracteres formatada personalizada concatenando valores e retornando a seqüência de
caracteres returnValue.
Poderá ocorrer um problema quando você trabalhar com classes em um clipe compilado,
como pode ser observado no trecho anterior. Como você estende uma classe localizada na
classe DataBindingClasses e ela não está prontamente disponível para o Flash, o erro a
seguir será exibido quando você verificar a sintaxe na classe anterior:
**Error** <path to DateFormat class>\DateFormat.as: Line 1: The class
'mx.data.binding.CustomFormatter' could not be loaded.
class DateFormat extends mx.data.binding.CustomFormatter {
O seu código provavelmente está correto. Esse problema ocorre quando o Flash não
consegue localizar a classe e, portanto, ocorre falha na verificação da sintaxe.
4. Salve o arquivo DateFormat.as.
5. Abra customformat.fla do exercício em “Usando componentes, vinculações e formatadores
personalizados”. Verifique se salvou ou copiou DateFormat.as para o mesmo diretório
desse arquivo.
6. Em customformat.fla, modifique o código ActionScript no Frame 1 da camada Actions de
acordo com o código a seguir:
import mx.data.binding.*;
var src:EndPoint = new EndPoint();
src.component = my_dc;
src.property = "selectedDate";
src.event = "change";
var dest:EndPoint = new EndPoint();
Agora, defina um objeto customFormatter, que informe ao Flash que você está utilizando
a classe DateFormat criada recentemente para formatar o ponto final na vinculação.
7. Salve as alterações no documento e selecione Control > Test Movie para testar o código.
reset_btn.onRelease = function() {
zapped = false;
bug_mc._x = initx;
bug_mc._y = inity;
bug_mc._alpha = 100;
bug_mc._rotation = 0;
};
bug_mc.onPress = function() {
this.startDrag();
};
bug_mc.onRelease = function() {
this.stopDrag();
};
bug_mc.onEnterFrame = function() {
619
Esta seção descreve como trabalhar com arquivos de imagem, de som e vídeo FLV em
aplicativos Flash. Para obter mais informações, consulte os seguintes tópicos:
Sobre o carregamento e o trabalho com mídia externa . . . . . . . . . . . . . . . . . . . . . . 620
Carregando arquivos SWF e de imagem externos . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Sobre o carregamento e o uso de arquivos MP3 externos. . . . . . . . . . . . . . . . . . . .626
Atribuindo vinculação a recursos da biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
Sobre o uso de vídeo FLV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .632
Sobre a criação de animações do progresso para arquivos de mídia . . . . . . . . . .654
Para obter mais informações sobre como carregar arquivos SWF e de imagem externos,
consulte “Sobre o carregamento de arquivos SWF e a Timeline raiz” na página 625.
Para pré-carregar arquivos SWF e JPEG em instâncias de clipe de filme, use a classe
MovieClipLoader. Essa classe fornece um mecanismo de ouvinte de eventos para informar
sobre o status dos downloads de arquivos em clipes de filmes. Para usar um objeto
MovieClipLoader para pré-carregar arquivos SWF e JPEG, você deve seguir estas etapas:
Criar um novo objeto MovieClipLoader Você pode usar um único objeto
MovieClipLoader para controlar o progresso do download de vários arquivos ou criar um
objeto separado para controlar o progresso de cada arquivo. Crie um novo clipe de filme,
carregue o seu conteúdo nele e crie o objeto MovieClipLoader, como mostra o seguinte
código:
this.createEmptyMovieClip("img_mc", 999);
var my_mcl:MovieClipLoader = new MovieClipLoader();
Registrar o objeto ouvinte no objeto MovieClipLoader Para que o objeto ouvinte receba
os eventos de carregamento, registre-o no objeto MovieClipLoader, como mostra o seguinte
código:
my_mcl.addListener(mclListener);
Começar a carregar o arquivo (de imagem ou SWF) em um clipe de destino Para iniciar
o download do arquivo de imagem ou SWF, use o método MovieClipLoader.loadClip(),
como mostra o seguinte código:
my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",
img_mc);
N O TA
this.createEmptyMovieClip("img_mc", 999);
7. Teste o documento selecionando Control (Controlar) > Test Movie (Testar filme).
A imagem é carregada no clipe de filme img_mc.
8. Selecione File (Arquivo) > Publish (Publicar) > Formats (Formatos) e verifique se as opções
SWF e HTML estão selecionadas.
9. Clique em Publish (Publicar) e localize os arquivos HTML e SWF no disco rígido.
Eles estão na mesma pasta do arquivo progress.fla salvo na etapa 1.
Use o novo objeto para chamar loadSound() e carregar um som de evento ou um fluxo de
som. Os sons de evento são totalmente carregados antes da reprodução; os fluxos de som são
reproduzidos durante o download. Defina o parâmetro isStreaming de loadSound para
especificar um som como um som de evento ou um fluxo de som. Depois de carregar um som
de evento, chame o método start() da classe Sound para reproduzir o som. Os fluxos de
som começam a ser reproduzidos quando há dados suficientes carregados no arquivo SWF;
não é necessário usar start().
Por exemplo, o código a seguir cria um objeto Sound chamado my_sound e, em seguida,
carrega um arquivo MP3 chamado song1.mp3. Coloque o seguinte ActionScript no Frame 1
(Quadro 1) da Timeline (Linha de tempo):
var my_sound:Sound = new Sound();
my_sound.loadSound("http://www.helpexamples.com/flash/sound/song1.mp3",
true);
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o som.
O Flash Player oferece suporte somente ao carregamento de arquivos de som do tipo MP3
durante a execução.
Para obter mais informações, consulte Sound.loadSound(), Sound.start() e
Sound.onLoad em ActionScript 2.0 Language Reference. Para obter informações sobre como
pré-carregar arquivos MP3, consulte “Pré-carregando arquivos MP3” na página 628. Para
obter informações sobre a criação de animação para uma barra de progresso ao carregar um
arquivo de som, consulte “Criando uma barra de progresso para carregar arquivos MP3 com o
ActionScript” na página 657.
A pasta Samples do seu disco rígido contém um arquivo de origem de exemplo, jukebox.fla,
que carrega arquivos MP3. Esse exemplo demonstra como criar um jukebox usando tipos de
dados, princípios gerais de codificação e vários componentes.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\Components\Jukebox.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/Components/Jukebox.
O exemplo a seguir usa a função setInterval() para verificar os bytes carregados para um
objeto Sound em intervalos predeterminados.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o som.
O painel Output (Saída) mostra o progresso do carregamento.
A técnica de pesquisa pode ser usada para pré-carregar arquivos FLV externos. Para obter o
número total de bytes e o número atual de bytes carregados para um arquivo FLV, use as
propriedades NetStream.bytesLoaded e NetStream.bytesTotal (para obter mais
informações, consulte %{bytesLoaded (NetStream.bytesLoaded property)}% e %{bytesTotal
(NetStream.bytesTotal property)}% ).
Para obter mais informações, consulte MovieClip.getBytesLoaded(),
MovieClip.getBytesTotal(), setInterval(), Sound.getBytesLoaded() e
Sound.getBytesTotal() em ActionScript 2.0 Language Reference.
Para obter informações sobre a criação de animação para uma barra de progresso, consulte
“Criando uma barra de progresso para carregar arquivos MP3 com o ActionScript”
na página 657.
A pasta Samples do seu disco rígido contém um arquivo de origem de exemplo, jukebox.fla,
que carrega arquivos MP3. Esse exemplo demonstra como criar um jukebox usando tipos de
dados, princípios gerais de codificação e vários componentes.
■ No Windows, navegue até unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\Components\Jukebox.
■ No Macintosh, navegue até HD Macintosh/Applications/Macromedia Flash 8/Samples
and Tutorials/Samples/Components/Jukebox.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o som.
As marcas de ID3 aparecem no Stage (Palco), e o som é reproduzido.
Como as marcas do ID3 2.0 estão localizadas no início do arquivo MP3 (antes dos dados de
som), elas ficam disponíveis assim que o download do arquivo é iniciado. Contudo, as marcas
do ID3 1.0 estão localizadas no final do arquivo (depois dos dados de som) e, portanto, só
ficarão disponíveis quando o download de todo o arquivo MP3 for concluído.
7. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
O bitmap da biblioteca é exibido no Stage (Palco), e a imagem torna-se arrastável.
7 7, 8
On2 VP6 6 8*
7 8
8 8
Para obter informações sobre os conceitos básicos de vídeo, como fluxo, download
progressivo, dimensões, codificação, importação e questões de largura de banda, consulte
Capítulo 11, “Trabalhando com vídeo” em Usando o Flash.
Esta seção aborda o uso de vídeo FLV sem componentes. Você também pode usar o
componente FLVPlayback para reproduzir arquivos FLV ou usar a classe VideoPlayback para
criar um exibidor de vídeo personalizado que carregue arquivos FLV dinamicamente (consulte
www.macromedia.com/devnet ou www.macromedia.com/support/documentation/). Para
obter informações sobre o uso de vídeo FLV com os componentes FLVPlayback e Media,
consulte as seguintes seções:
■ “FLVPlayback Component (Flash Professional Only)” na página 505
■ “Media components (Flash Professional only)” na página 831
Como uma alternativa à importação de vídeos diretamente para o ambiente de criação do
Flash, você pode usar o ActionScript para reproduzir dinamicamente arquivos FLV externos
no Flash Player. Os arquivos FLV podem ser reproduzidos a partir de um endereço HTTP ou
do sistema de arquivos local. Para reproduzir arquivos FLV, use as classes NetConnection e
NetStream, bem como o método attachVideo() da classe Video. Para obter mais
informações, consulte %{NetConnection}%, %{NetStream}% e %{attachVideo
(Video.attachVideo method)}% em ActionScript 2.0 Language Reference.
É possível criar arquivos FLV importando o vídeo para a ferramenta de criação do Flash e
exportando-o como um arquivo FLV. Se tiver o Flash Professional 8, você poderá usar o plug-
in FLV Export para exportar arquivos FLV de aplicativos de edição de vídeo suportados.
O uso de arquivos FLV externos oferece certos recursos que não estão disponíveis quando você
usa vídeo importado:
■ É possível usar videoclipes mais longos nos documentos do Flash sem tornar a reprodução
mais lenta. Os arquivos FLV externos são reproduzidos usando a memória cache; isso
significa que arquivos grandes são armazenados em pequenas partes e acessados
dinamicamente, exigindo menos memória do que os arquivos de vídeo incorporados.
■ Um arquivo FLV externo tem uma taxa de quadros diferente do documento do Flash no
qual é reproduzido. Por exemplo, você pode definir a taxa de quadros do documento do
Flash como 30 quadros por segundo (qps) e a taxa de quadros do vídeo como 21 qps. Essa
configuração permite melhor controle do vídeo do que o vídeo incorporado, garantindo
sua reprodução contínua. Ela também permite reproduzir arquivos FLV com taxas de
quadros diferentes, sem a necessidade de alterar o conteúdo existente do Flash.
Para carregar arquivos FLV de um servidor Web, talvez seja necessário registrar o
tipo MIME (Multipurpose Internet Mail Extensions, Extensões multipropósito do
Internet Mail) e a extensão do arquivo nesse servidor; consulte a documentação do
servidor. O tipo MIME dos arquivos FLV é video/x-flv. Para obter mais informações,
consulte “Sobre a configuração de arquivos FLV para hospedagem em um servidor”
na página 652.
Para obter mais informações sobre vídeo FLV, consulte os seguintes tópicos:
■ “Criando um objeto de vídeo” na página 634
■ “Reproduzindo arquivos FLV externos dinamicamente” na página 635
■ “Criando uma faixa de vídeo” na página 636
■ “Pré-carregando arquivos FLV” na página 639
■ “Trabalhando com pontos de início” na página 640
■ “Trabalhando com metadados” na página 650
■ “Sobre a configuração de arquivos FLV para hospedagem em um servidor” na página 652
■ “Sobre a definição de arquivos FLV locais como destino no Macintosh” na página 653
9. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
Para obter informações sobre como pré-carregar arquivos FLV, consulte “Pré-carregando
arquivos FLV” na página 639. Para obter informações sobre como carregar dinamicamente
vídeo FLV em componentes, consulte “Creating an application with the FLVPlayback
component” na página 507. Para obter informações sobre arquivos FLV e o servidor, bem
como arquivos FLV e a reprodução desses arquivos localmente no Macintosh, consulte “Sobre
a configuração de arquivos FLV para hospedagem em um servidor” na página 652.
13. Selecione Insert (Inserir) > Timeline > Layer (Camada) para criar uma nova camada e
atribua o nome button a ela.
14. Selecione a ferramenta Rectangle (Retângulo) no painel Tools (Ferramentas).
15. Na seção Colors (Cores) do painel Tools, clique no ícone de lápis para selecionar o controle
de cor do traço.
16. Selecione No Color (Nenhuma cor), que desativa o contorno do retângulo.
17. Arraste o ponteiro diagonalmente no Stage para criar um retângulo.
O tamanho do retângulo não é importante porque você o redimensionará usando o
inspetor Properties.
18. Clique na ferramenta Selection (Seleção) no painel Tools e, em seguida, clique no retângulo
no Stage para selecioná-lo.
19. Com o retângulo ainda selecionado, no inspetor Properties, digite 468 e 60 nas caixas de
texto de largura e altura, respectivamente. Em seguida, altere as coordenadas X e Y (caixas
de texto X e Y) para 0.
27. Faça outras modificações na faixa; por exemplo, adicione gráfico ou texto.
28.Selecione Control (Controlar) > Test Movie (Testar filme) para testar a faixa no Flash
Player.
Nesse exemplo, você criou uma faixa e a redimensionou para as dimensões padronizadas
estabelecidas, definidas pelo IAB (Interactive Advertising Bureau, Agência de propaganda
interativa). Para obter informações sobre as dimensões padrão de propaganda (e várias outras
diretrizes úteis), consulte a página de padrões e diretrizes do Interactive Advertising Bureau em
www.iab.net/standards/adunits.asp.
10. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código.
N OT A
function traceMeta(metaProp:Object):Void {
var p:String;
for (p in metaProp) {
switch (p) {
case "cuePoints" :
trace("cuePoints: ");
//percorre os pontos de início
var cuePointArr:Array = metaProp[p];
for (var j:Number = 0; j < cuePointArr.length; j++) {
//percorre os parâmetros atuais de ponto de início
trace("\t cuePoints[" + j + "]:");
var currentCuePoint:Object = metaProp[p][j];
var metaPropPJParams:Object = currentCuePoint.parameters;
trace("\t\t name: " + currentCuePoint.name);
trace("\t\t time: " + currentCuePoint.time);
trace("\t\t type: " + currentCuePoint.type);
if (metaPropPJParams != undefined) {
trace("\t\t parameters:");
traceObject(metaPropPJParams, 4);
}
}
break;
default:
trace(p + ": " + metaProp[p]);
break;
}
}
}
function traceObject(obj:Object, indent:Number):Void {
var indentString:String = "";
for (var j:Number = 0; j < indent; j++) {
indentString += "\t";
}
for (var i:String in obj) {
if (typeof(obj[i]) == "object") {
trace(indentString + " " + i + ": [Object]");
traceObject(obj[i], indent + 1);
} else {
trace(indentString + " " + i + ": " + obj[i]);
}
}
}
Para obter informações sobre o uso de pontos de início com o componente FLVPlayback,
consulte “Usando pontos de início incorporados com o componente FLVPlayback (somente
Flash Professional)”.
Para ver os pontos de início na guia Parameters, digite o nome do arquivo FLV na caixa
de texto contentPath, em vez de usar um código para atribuir o contentPath.
7. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF.
O tempo decorrido é exibido na instância de TextArea quando a reprodução passa por
cada ponto de início incorporado no documento.
Para obter mais informações sobre como trabalhar com o componente FLVPlayback, consulte
“FLVPlayback Component (Flash Professional Only)” na página 505.
9. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código.
Os seguintes pontos de início aparecem no painel Output (Saída):
Elapsed time in seconds: 1.034
Elapsed time in seconds: 2.102
8. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código.
Os seguintes pontos de início aparecem no painel Output (Saída):
cuePoint = {cuePointName:one cuePointTime:1}
cuePoint = {cuePointName:two cuePointTime:2}
cuePoint = {cuePointName:three cuePointTime:3}
cuePoint = {cuePointName:four cuePointTime:4}
Para obter mais informações sobre como trabalhar com o componente MediaPlayback,
consulte “Media components (Flash Professional only)” na página 831. Para obter mais
informações sobre como trabalhar com o componente FLVPlayback, consulte “FLVPlayback
Component (Flash Professional Only)” na página 505.
8. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código.
Quando você clica no botão, a reprodução do vídeo é movida para a duração especificada:
2 segundos no vídeo.
function clickMe(){
my_flvPb.seekToNextNavCuePoint();
}
my_button.addEventListener("click", clickMe);
8. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código.
O arquivo cuepoints.flv contém três pontos de início de navegação: um no início, outro
no meio e outro no fim do arquivo de vídeo. Quando você clica no botão, a instância de
FLVPlayback busca o próximo ponto de início até chegar no último ponto de início do
arquivo de vídeo.
Também é possível buscar um ponto de início especificado em um arquivo FLV usando o
método seekToCuePoint(), como mostra o exemplo a seguir.
function clickMe(){
my_flvPb.seekToNavCuePoint("point2");
}
my_button.addEventListener("click", clickMe);
10. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código.
O arquivo cuepoints.flv contém três pontos de início de navegação: um no início, outro
no meio e outro no fim do arquivo de vídeo. Quando você clica no botão, a instância de
FLVPlayback busca o ponto de início especificado (point2).
Para obter mais informações sobre pontos de início, consulte “Using cue points”
na página 513. Para obter mais informações sobre o componente FLVPlayback, consulte
“FLVPlayback Component (Flash Professional Only)” na página 505.
Para trabalhar com NetStream.onMetaData, é necessário ter um Flash Video que contenha
metadados. Se você codificar os arquivos FLV com o Flash 8 Video Encoder, o arquivo FLV
conterá informações de metadados (consulte o exemplo a seguir para obter uma lista de
metadados de um arquivo FLV codificado com o Flash 8 Video Encoder).
NO T A
O Flash Video Exporter 1.2 e versões posteriores (incluindo o Flash 8 Video Exporter)
adicionam os metadados aos arquivos FLV. O Sorenson Squeeze 4.1 e versões
posteriores também adicionam metadados aos arquivos de vídeo.
10. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código.
As seguintes informações serão exibidas no painel Output (Saída):
canSeekToEnd:true
audiocodecid:2
audiodelay:0.038
audiodatarate:96
videocodecid:4
framerate:15
videodatarate:400
O formato a seguir também pode ser usado para exibir a maioria das informações de
metadados. Por exemplo, este código mostra a duração de um arquivo FLV:
nStream.onMetaData = function(myMeta) {
trace("FLV duration: " + myMeta.duration + " sec.");
};
Esse formato não rastreia as informações de metadados cuePoint. Para obter informações
sobre o rastreamento de pontos de início, consulte “Rastreando pontos de início em um
arquivo FLV” na página 641.
Esse problema ocorre devido a uma limitação do sistema operacional, e não a uma
limitação do Flash ou do Flash Player.
Para que um arquivo FLV de uma unidade não pertencente ao sistema seja reproduzido em
um Macintosh, faça referência a ele com um caminho absoluto usando a notação de dois-
pontos (:) em vez de usar a notação de barra (/). A lista a seguir mostra a diferença entre os
dois tipos de notação:
Notação de barra myDrive/myFolder/myFLV.flv
Notação de dois-pontos (Macintosh) myDrive:myFolder:myFLV.flv
Você também pode criar um arquivo projetor para um CD-ROM que será usado para
reprodução no Macintosh. Para obter as informações mais recentes sobre arquivos FLV e CD-
ROMs Macintosh, consulte www.macromedia.com/go/3121b301.
Para criar uma barra de progresso para carregar arquivos de imagem ou SWF:
1. Crie um novo documento do Flash chamado loadImage.fla.
2. Selecione Modify (Modificar) > Document (Documento) e digite 700 e 500 nas caixas de
texto de largura e altura, respectivamente, para alterar as dimensões do documento.
3. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte código
no painel Actions (Ações):
//criar clipes para armazenar o conteúdo
this.createEmptyMovieClip("progressBar_mc", 0);
progressBar_mc.createEmptyMovieClip("bar_mc", 1);
progressBar_mc.createEmptyMovieClip("stroke_mc", 2);
//usar métodos de desenho para criar uma barra de progresso
with (progressBar_mc.stroke_mc) {
lineStyle(0, 0x000000);
moveTo(0, 0);
lineTo(100, 0);
lineTo (100, 10);
lineTo(0, 10);
lineTo(0, 0);
}
with (progressBar_mc.bar_mc) {
beginFill(0xFF0000, 100);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 10);
lineTo(0, 10);
lineTo(0, 0);
endFill();
_xscale = 0;
}
progressBar_mc._x = 2;
progressBar_mc._y = 2;
4. Selecione Control (Controlar) > Test Movie (Testar filme) para ver o carregamento da
imagem e a barra de progresso.
NO T A
Se você testar esse código uma segunda vez, a imagem será armazenada em cache,
e a barra de progresso será encerrada imediatamente. Para testar várias vezes, use
diferentes imagens e carregue-as a partir de uma origem externa. Uma origem local
poderá ocasionar problemas durante o teste do aplicativo porque o conteúdo é
carregado muito rápido.
pb._x = 100;
pb._y = 100;
with (pb.bar_mc) {
beginFill(0xFF0000);
moveTo(0, 0);
lineTo(pb_width, 0);
lineTo(pb_width, pb_height);
lineTo(0, pb_height);
lineTo(0, 0);
endFill();
var my_interval:Number;
var my_sound:Sound = new Sound();
my_sound.onLoad = function(success:Boolean) {
if (success) {
trace("sound loaded");
}
};
my_sound.onSoundComplete = function() {
clearInterval(my_interval);
trace("Cleared interval");
}
my_sound.loadSound("http://www.helpexamples.com/flash/sound/song2.mp3",
true);
my_interval = setInterval(updateProgressBar, 100, my_sound);
function updateProgressBar(the_sound:Sound):Void {
var pos:Number = Math.round(the_sound.position / the_sound.duration *
100);
pb.bar_mc._xscale = pos;
pb.vBar_mc._x = pb.bar_mc._width;
pb.pos_txt.text = pos + "%";
}
3. Selecione Control (Controlar) > Test Movie (Testar filme) para carregar o arquivo MP3 e
observe a barra de progresso.
NO T A
Se você testar esse código uma segunda vez, a imagem será armazenada em cache,
e a barra de progresso será encerrada imediatamente. Para testar várias vezes, use
diferentes imagens e carregue-as a partir de uma origem externa. Uma origem local
poderá ocasionar problemas durante o teste do aplicativo porque o conteúdo é
carregado muito rápido.
9. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o código.
O vídeo é carregado, e uma barra com animação e a alteração dos valores de texto
informam o progresso do carregamento. Se esses elementos se sobrepuserem ao vídeo,
mova o objeto de vídeo no Stage. Você pode personalizar a cor da barra de progresso
modificando beginFill e lineStyle no trecho de código anterior.
N OT A
663
Enviando e carregando variáveis
Um arquivo SWF é uma janela para a captura e exibição de informações, semelhante a uma
página HTML. Contudo, os arquivos SWF podem permanecer carregados no navegador e ser
constantemente atualizados com novas informações sem a necessidade do recarregamento da
página inteira. Com as funções e os métodos do ActionScript, você pode enviar e receber
informações de arquivos de texto, arquivos XML e scripts de servidor.
Além disso, os scripts de servidor podem solicitar informações específicas a um banco de
dados e retransmiti-las para um arquivo SWF. Os scripts do servidor podem ser escritos em
diversas linguagens: as mais comuns são CFML, Perl, ASP (Microsoft Active Server Pages,
Páginas de servidor ativo da Microsoft) e PHP. Com o armazenamento e recuperação de
informações em um banco de dados, você pode criar um conteúdo dinâmico e personalizado
para o arquivo SWF. Por exemplo, você pode criar um quadro de mensagens, perfis pessoais
para usuários ou um carrinho de compras para controlar as compras de um usuário.
Várias funções e métodos do ActionScript permitem passar informações para/de um arquivo
SWF. Cada função ou método usa um protocolo para transferir as informações e requer que
elas sejam formatadas de uma determinada maneira.
■ As funções e os métodos de MovieClip que usam o protocolo HTTP ou HTTPS para
enviar informações em um formato de código URL são getURL(), loadVariables(),
loadVariablesNum(), loadMovie() e loadMovieNum().
■ Os métodos LoadVars que usam o protocolo HTTP ou HTTPS para enviar e carregar
informações em formato de código URL são load(), send() e sendAndLoad().
■ Os métodos que usam o protocolo HTTP ou HTTPS para enviar e carregar informações
como XML são XML.send(), XML.load() e XML.sendAndLoad().
■ Os métodos que criam e usam uma conexão de soquete TCP/IP para enviar e carregar
informações como XML são XMLSocket.connect() e XMLSocket.send().
Para obter mais informações, consulte os seguintes tópicos:
■ “Verificando os dados carregados” na página 664
■ “Criando uma barra de progresso para exibir o progresso do carregamento dos dados”
na página 666
Se você tiver usado o seguinte código, não poderá rastreiar os dados que estão sendo
carregados:
loadVariables("myData.txt", 0);
trace(lastSiteVisited); // undefined
Cada função ou método possui uma técnica específica que pode ser usada para verificar os
dados que foram carregados. Se usar %{loadVariables function}% ou %{loadMovie
function}%, você poderá carregar informações em um destino de clipe de filme e usar o
manipulador onData para executar um script. Se você usar %{loadVariables function}% para
carregar os dados, o manipulador onData será executado quando a última variável for
carregada. Se você usar %{loadMovie function}% para carregar os dados, o manipulador
onData será executado sempre que um fragmento do arquivo SWF for enviado ao Flash
Player.
Por exemplo, o ActionScript a seguir carrega as variáveis do arquivo myData.txt no clipe de
filme loadTarget_mc. Um manipulador onData() para a instância loadTarget_mc usa a
variável lastSiteVisited, carregada do arquivo myData.txt. As seguintes ações de
rastreamentosó são exibidas depois que todas as variáveis, incluindo lastSiteVisited, são
carregadas:
this.createEmptyMovieClip("loadTarget_mc", this.getNextHighestDepth());
this.loadTarget_mc.onData = function() {
trace("Data Loaded");
trace(this.lastSiteVisited);
};
loadVariables("myData.txt", this.loadTarget_mc);
Se o carregamento do arquivo XML remoto for executado rápido demais para permitir a
visualização do efeito de pré-carregamento, tente carregar um arquivo XML maior na
Internet.
this.createEmptyMovieClip("pBar_mc", 9999);
var bar:MovieClip = pBar_mc.createEmptyMovieClip("bar_mc", 10);
bar.beginFill(0xFF0000, 100);
bar.moveTo(0, 0);
bar.lineTo(barWidth, 0);
bar.lineTo(barWidth, barHeight);
bar.lineTo(0, barHeight);
bar.lineTo(0, 0);
bar.endFill();
bar._xscale = 0;
pBar_mc.onEnterFrame = function() {
var pctLoaded:Number = Math.floor(my_xml.getBytesLoaded() /
my_xml.getBytesTotal() * 100);
if (!isNaN(pctLoaded)) {
pBar_mc.bar_mc._xscale = pctLoaded;
pBar_mc.label_txt.text = pctLoaded + "% loaded";
if (pctLoaded >= 100) {
pBar_mc.onEnterFrame = undefined;
}
}
};
O código anterior divide-se em sete seções. A primeira define a largura e a altura da barra
de progresso quando desenhada no Stage (Palco). A barra de progresso será centralizada no
Stage na próxima seção. A próxima seção de código cria dois clipes de filme, pBar_mc e
bar_mc. O clipe de filme bar_mc é aninhado dentro de pBar_mc e desenha um retângulo
vermelho no Stage. A instância de bar_mc modifica sua propriedade _xscale quando o
arquivo XML externo é carregado a partir do site da Web remoto.
Em seguida, um segundo clipe de filme é aninhado dentro do clipe de filme pBar_mc,
stroke_mc. O clipe de filme stroke_mc desenha um contorno no Stage que corresponde
às dimensões especificadas pelas variáveis barHeight e barWidth definidas na primeira
seção. A quarta seção do código cria, dentro do clipe de filme pBar_mc, um campo de
texto usado para exibir a porcentagem do arquivo XML já carregada, semelhante ao rótulo
no componente ProgressBar. Em seguida, o clipe de filme pBar_mc (que inclui as
instâncias aninhadas de bar_mc, stroke_mc e label_txt) é centralizado no Stage.
Você pode precisar codificar por URL determinados caracteres, como o sinal de adição
(+) ou E comercial (&). Para obter mais informações, consulte www.macromedia.com/
go/tn_14143.
Você deve ter instalado o ColdFusion no navegador da Web para este exemplo.
Este código ActionScript cria uma nova instância do objeto LoadVars, copia os valores dos
campos de texto para ela e envia os dados ao servidor. O arquivo CFM envia o e-mail e
retorna uma variável (true ou false) ao arquivo SWF chamada result, que é exibida
no campo de texto debug_txt.
NO T A
Ou, você pode chamar o método FileReferenceList.browse(), que abre uma caixa de
diálogo no sistema do usuário para solicitar que ele selecione um arquivo para carregar e criará
um array de objetos FileReference se o usuário selecionar um ou mais arquivos com êxito.
Cada objeto FileReference representa um arquivo selecionado pelo usuário na caixa de
diálogo. Um objeto FileReference não conterá nenhum dado nas propriedades FileReference
(como name, size ou modificationDate) até que o método FileReference.browse() ou
FileReferenceList.browse() seja chamado e o usuário selecione um arquivo no seletor de
arquivos ou até que o método FileReference.download() seja usado para selecionar um
item no seletor de arquivos.
N OT A
quando uma caixa de diálogo é exibida no computador do usuário final, o local padrão
mostrado nessa caixa é a pasta utilizada mais recentemente (se por possível determinar
esse local) ou a área de trabalho (se não for possível determinar a pasta mais recente).
As APIs de FileReference e FileReferenceList não permitem que você defina o local
padrão do arquivo
Ao permitir que os usuários carreguem arquivos em um ervidor, você sempre deve ter o
cuidado de verificar o tipo de arquivo, antes de salvá-lo no disco rígido. Por exemplo,
você não gostaria de permitir que um usuário carregasse um script de servidor que
pudesse ser usado para excluir pastas ou arquivos nesse servidor. Se você só quiser
permitir que os usuários carreguem um arquivo de imagem, verifique se o script de
servidor que carrega os arquivos determina se o arquivo sendo carregado é uma
imagem válida.
import flash.net.FileReference;
imagePane.setSize(400, 350);
imagePane.move(75, 25);
uploadBtn.move(75, 390);
uploadBtn.label = "Upload Image";
imageLbl.move(75, 430);
imageLbl.text = "Select Image";
statusLbl.move(210, 390);
statusLbl.text = "Status";
imagesCb.move(75, 450);
statusArea.setSize(250, 100);
statusArea.move(210, 410);
/* When the user selects a file, the onSelect() method is called, and
passed a reference to the FileReference object. */
listener.onSelect = function(selectedFile:FileReference):Void {
/* Update the TextArea to notify the user that Flash is attempting to
upload the image. */
statusArea.text += "Attempting to upload " + selectedFile.name + "\n";
/* Upload the file to the PHP script on the server. */
selectedFile.upload("http://www.helpexamples.com/flash/file_io/
uploadFile.php");
};
imagePane.addEventListener("complete", imageDownloaded);
imagesCb.addEventListener("change", downloadImage);
uploadBtn.addEventListener("click", uploadImage);
/* If the image does not download, the event object's total property will
equal -1. In that case, display a message to the user. */
function imageDownloaded(event:Object):Void {
if (event.total == -1) {
imagePane.contentPath = "Message";
}
}
/* When the user selects an image from the ComboBox, or when the
downloadImage() function is called directly from the
listener.onComplete() method, the downloadImage() function sets the
contentPath of the ScrollPane in order to start downloading the image
to the player. */
function downloadImage(event:Object):Void {
imagePane.contentPath = "http://www.helpexamples.com/flash/file_io/
images/" + imagesCb.value;
}
/* When the user clicks the button, Flash calls the uploadImage()
function, and it opens a file browser dialog box. */
function uploadImage(event:Object):Void {
imageFile.browse([{description: "Image Files", extension:
"*.jpg;*.gif;*.png"}]);
}
Banco de dados
username Jean Smith
Submit
password •••••••
Filme do Flash
O fluxo e a conversão de dados entre um filme do Flash, um script do servidor e um banco de dados
A validação da senha no sistema de corretagem requer dois scripts: uma função definida no
Quadro 1, e um script que cria e depois envia os objetos XML criados no documento.
Quando os usuários inserem informações em campos de texto no arquivo SWF com as
variáveis username e password, essas variáveis devem ser convertidas em XML antes de serem
passadas para o servidor. A primeira seção do script carrega as variáveis em um objeto XML
criado recentemente chamado loginXML. Quando o usuário clica em um botão para fazer
login, o objeto loginXML é convertido em uma seqüência de caracteres do XML e
enviado para o servidor.
O código ActionScript a seguir é colocado na Timeline e é usado para enviar dados
formatados em XML para o servidor. Para compreender esse script, leia as linhas comentadas
(indicadas pelos caracteres //):
// ignore XML white space
XML.prototype.ignoreWhite = true;
// Construct an XML object to hold the server's reply
var loginReplyXML:XML = new XML();
// this function triggers when an XML packet is received from the server.
loginReplyXML.onLoad = function(success:Boolean) {
if (success) {
// (optional) Create two text fields for status/debugging
//status_txt.text = this.firstChild.attributes.status;
//debug_txt.text = this.firstChild;
switch (this.firstChild.attributes.STATUS) {
case 'OK' :
_global.session = this.firstChild.attributes.SESSION;
Você pode testar esse código usando o nome de usuário JeanSmith e a senha VerySecret. A
primeira seção do script gera o seguinte XML quando o usuário clica no botão de login:
<login username="JeanSmith" password="VerySecret" />
Esse XML inclui um atributo session que contém a identificação de uma sessão exclusiva,
gerada aleatoriamente, que será usada em todas as comunicações entre o cliente e o servidor
no restante da sessão. Se a senha for rejeitada, o servidor responderá com a seguinte
mensagem:
<LOGINREPLY STATUS="FAILURE" />
O nó XML loginreply deve ser carregado em um objeto XML limpo no arquivo SWF. A
instrução a seguir cria o objeto XML loginreplyXML para receber o nó XML:
// Construct an XML object to hold the server's reply
var loginReplyXML:XML = new XML();
loginReplyXML.onLoad = function(success:Boolean) {
A segunda instrução nesse código ActionScript defime uma função anônima (inline),
chamada quando o evento onLoad é disparado.
O botão de login (instância login_btn) é usado para enviar o nome do usuário e a senha
como XML ao servidor e para carregar uma resposta XML de volta para o arquivo SWF. Você
pode usar o método sendAndLoad() para fazer isso, como mostra o seguinte exemplo:
loginXML.sendAndLoad("http://www.flash-mx.com.com/mm/main.cfm",
loginReplyXML);
Primeiro, os dados formatados em XML são criados por meio dos valores inseridos pelo
usuário no arquivo SWF, e esse objeto XML é enviado por meio do método sendAndLoad.
Semelhante aos dados de uma função loadVariables(), o elemento XML loginreply
chega de forma assíncrona (ou seja, não espera os resultados antes de ser retornado) e é
carregado no objeto loginReplyXML. Quando os dados chegam, o manipulador onLoad do
objeto loginReplyXML é chamado. Você deve definir a função loginReplyXML, chamada
quando o manipulador onLoad é disparado, de modo que possa processar o elemento
loginreply.
NO T A
Essa função sempre deve estar no quadro que contém oActionScript referente ao botão
de login.
Esse design é apenas um exemplo, e a Macromedia não oferece garantia alguma quanto
ao nível de segurança proporcionado. Se você estiver implementando um sistema
seguro protegido por senha, deverá ter um bom conhecimento de segurança de rede.
Para obter mais informações, consulte Integrating XML and Flash in a Web Application
(Integrando XML e Flash em um aplicativo da Web) em www.macromedia.com/support/
flash/interactivity/xml/ e a entrada %{XML}% em ActionScript 2.0 Language Reference. Para
obter mais informações sobre a segurança de arquivo local, consulte “Sobre segurança do
arquivo local e o Flash Player” na página 709.
Você poderá encontrar o arquivo de origem de exemplo, login.fla, na pasta Samples
(Exemplos) no disco rígido. Esse exemplo mostra como adicionar uma funcionalidade de
login simples aos sites da Web usando o ActionScript 2.0. O exemplo usa o ActionScript e
seus componentes para criar um pequeno formulário no qual você insere um nome de usuário
e uma senha, e depois clica em um botão para entrar em um site.
■ No Windows, vá para unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Login.
■ No Macintosh, vá para HD Macintosh/Applications/Macromedia Flash 8/Samples and
Tutorials/Samples/ActionScript/Login.
O Flash Player 8 introduziu o manipulador de eventos onHTTPStatus para as classes
LoadVars, XML e MovieClipLoader, com o objetivo de permitir que os usuários acessem o
código de status de uma solicitação HTTP. Isso permite que os desenvolvedores determinem
por que uma determinada operação de carregamento falhou, em vez de apenas detectarem que
uma operação desse tipo já falhou.
O exemplo a seguir mostra como você pode usar o manipulador de eventos onHTTPStatus da
classe XML para verificar se o download de um arquivo XML foi realizado com êxito do
servidor e qual o código de status retornado da solicitação HTTP.
O código anterior define um novo objeto XML com o nome de variável my_xml, define
dois manipuladores de evento (onHTTPStatus e onLoad) e carrega um arquivo XML
externo. O manipulador de eventos onLoad verifica se o arquivo XML foi carregado com
êxito e, se esse for o caso, envia uma mensagem ao painel Output, bem como rastreia a
propriedade de status do objeto XML. É importante lembrar que o ouvinte de eventos
onHTTPStatus retorna o código de status do servidor da Web, enquanto a propriedade
XML.status contém um valor numérico que indica se o objeto XML foi analisado com
êxito.
3. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do
Flash.
DICA
Há vários arquivos de exemplo no disco rígido que carregam XML em um arquivo SWF em
tempo de execução. Um exemplo demonstra como criar um controlador de log da Web
carregando, analisando e manipulando dados XML. Você poderá encontrar o arquivo de
origem de exemplo, xml_blogTracker.fla, na pasta Samples (Exemplos) no disco rígido.
Você pode usar os métodos connect() e send() da classe XMLSocket para transferir XML
para/de um servidor através de uma conexão de soquete. O método connect() estabelece
uma conexão de soquete com uma porta do servidor da Web. O método send() envia um
objeto XML para o servidor especificado na conexão de soquete.
Quando você chama o método connect(), o Flash Player abre uma conexão TCP/IP com o
servidor e mantém a conexão aberta até que ocorra uma das seguintes situações:
■ O método close() da classe XMLSocket é chamado.
■ Não existe mais nenhuma referência ao objeto XMLSocket.
■ O Flash Player é encerrado.
■ A conexão é interrompida (por exemplo, o modem é desconectado).
O exemplo a seguir cria uma conexão de soquete XML e envia os dados do objeto XML
myXML. Para compreender o script, leia as linhas comentadas (indicadas pelos caracteres //):
// Create XMLSocket object
var theSocket:XMLSocket = new XMLSocket();
// Connect to a site on unused port above 1024 using connect() method.
// Enter localhost or 127.0.0.1 for local testing.
// For live server, enter your domain www.yourdomain.com
theSocket.connect("localhost", 12345);
// displays text regarding connection
theSocket.onConnect = function(myStatus) {
if (myStatus) {
conn_txt.text = "connection successful";
} else {
conn_txt.text = "no connection made";
}
};
// data to send
function sendData() {
var myXML:XML = new XML();
var mySend = myXML.createElement("thenode");
mySend.attributes.myData = "someData";
myXML.appendChild(mySend);
theSocket.send(myXML);
}
// button sends data
O uso de fscommand() para chamar o JavaScript não funciona nos navegadores Safari
ou Internet Explorer para Macintosh.
A função fscommand() tem dois parâmetros: command e arguments. Para enviar uma
mensagem para a versão independente do Flash Player, use comandos e argumentos
predefinidos. Por exemplo, o manipulador de eventos a seguir faz com que o exibidor
independente dimensione o arquivo SWF para o tamanho de tela cheia quando o usuário
solta o botão:
my_btn.onRelease = function() {
fscommand("fullscreen", true);
};
A tabela a seguir mostra os valores que podem ser especificados para os parâmetros command e
arguments da função fscommand() a fim de controlar a aparência de arquivo SWF que esteja
sendo reproduzido no exibidor independente (incluindo projetores):
N OT A
Um projetor é um arquivo SWF salvo em um formato que pode ser executado comom
aplicativo independente — ou seja, incorporando o Flash Player com o conteúdo de um
arquivo executável.
Essa funcionalidade substitui a antiga função fscommand() para interoperação com uma
página HTML ou um aplicativo de recipiente. A API External oferece uma funcionalidade
mais avançada do que a funçãofscommand() nessa situação. Para obter mais
informações, consulte “Sobre a API External” na página 696.
5. Arraste um componente Label para o Stage, atribua a ele um nome de instância de in_lbl,
posicione-o acima da instância de TextInput in_ti e defina sua propriedade de texto na
guia Parameters como Receiving from JS: (Recebendo do JS).
6. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo)
principal:
import flash.external.ExternalInterface;
send_button.addEventListener("click", clickListener);
function clickListener(eventObj:Object):Void {
trace("click > " + out_ti.text);
ExternalInterface.call("jsFunc", out_ti.text);
}
function makeCall(str) {
thisMovie("extint").asFunc(str);
}
function jsFunc(str) {
document.inForm.inField.value = "AS > Hello " + str;
}
// -->
</script>
Esse código JavaScript define três métodos. O primeiro retorna uma referência ao arquivo
SWF incorporado com base em se o navegador do usuário é o Microsoft Internet Explorer
(IE) ou um Mozilla. A segunda função, makeCall(), chama o método asFunc() definida
dentro do documento do Flash no exemplo anterior. O parâmetro "extint" na chamada
de função thisMovie() refere-se à identificação do objeto e ao nome do arquivo SWF
incorporado. Se você salvou o documento do Flash com outro nome, será necessário
alterar essa seqüência de caracteres para corresponder os valores no objeto e marcas
incorporadas. A terceira função, jsFunc(), define o valor do campo de texto inField no
documento HTML. Essa função é chamada do documento do Flash quando um usuário
clica no componente Button send_button.
4. Adicione o seguinte código HTML antes da marca de fechamento</body>:
<form name="outForm" method="POST"
action="javascript:makeCall(document.outForm.outField.value);">
Sending to AS:<br />
<input type="text" name="outField" value="" /><br />
<input type="submit" value="Send" />
Esse código HTML cria dois formulários HTML semelhantes àqueles criados no
ambiente do Flash no exercício anterior. O primeiro formulário envia o valor do campo de
texto outField à função JavaScript makeCall() definida em uma etapa anterior. O
segundo formulário é usado para exibirum valor enviado do arquivo SWF quando o
usuário clica na instância de send_button.
5. Salve o documento HTML e carregue os arquivos HTML e SWF em um navegador da
Web.
6. Visualize o arquivo HTML em um navegador da Web, insira uma seqüência de caracteres
na instância de TextInput out_ti e clique no botão Send (Enviar).
O Flash chama a função JavaScript jsFunc() e passa o conteúdo do campo de texto
out_ti, que exibe o conteúdo no campo de entrada de texto inField do formulário
HTML inForm.
7. Digite um valor no campo de texto HTML outField e clique no botão Send.
O Flash chama a função asFunc() do arquivo SWF, que exibe a seqüência de caracteres na
instância de TextInput in_ti.
Você poderá encontrar o arquivo de origem de exemplo, ExtInt.fla, na pasta Samples
(Exemplos) no disco rígido.
■ No Windows, vá para unidade de inicialização\Program Files\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\ExternalAPI\simple example.
■ No Macintosh, vá para HD Macintosh/Applications/Macromedia Flash 8/Samples and
Tutorials/Samples/ActionScript/ExternalAPI/simple example.
Para obter um exemplo mais complexo que use a API External, consulte “Controlando Flash
Video com a API External” na página 701. Para obter mais informações sobre a segurança de
arquivo local, consulte “Sobre segurança do arquivo local e o Flash Player” na página 709.
N OT A
function pauseResume():Void {
video_ns.pause();
}
<script language="JavaScript">
// Use a variable to reference the embedded SWF file.
var flashVideoPlayer;
/* When the HTML page loads (through the onLoad event of the <body>
tag), it calls the initialize() function. */
function initialize() {
/* Check whether the browser is IE. If so, flashVideoPlayer is
window.videoPlayer. Otherwise, it's document.videoPlayer. The
videoPlayer is the ID assigned to the <object> and <embed> tags. */
var isIE = navigator.appName.indexOf("Microsoft") != -1;
flashVideoPlayer = (isIE) ? window['videoPlayer'] :
document['videoPlayer'];
}
/* When the user clicks the play button in the form, update the
videoStatus text area, and call the playVideo() function within the
SWF file, passing it the URL of the FLV file. */
function callFlashPlayVideo() {
var comboBox = document.forms['videoForm'].videos;
var video = comboBox.options[comboBox.selectedIndex].value;
updateStatus("____" + video + "____");
flashVideoPlayer.playVideo("http://www.helpexamples.com/flash/
video/" + video);
}
/* The updateStatus() function is called from the SWF file from the
onStatus() method of the NetStream object. */
function updateStatus(message) {
document.forms['videoForm'].videoStatus.value += message + "\n";
}
</script>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=8,0,0,0" width="320" height="240" id="videoPlayer"
align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="video.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="video.swf" quality="high" bgcolor="#ffffff" width="320"
height="240" name="videoPlayer" align="middle"
allowScriptAccess="sameDomain" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
<form name="videoForm">
Select a video:<br />
<select name="videos">
<option value="lights_long.flv">lights_long.flv</option>
<option value="clouds.flv">clouds.flv</option>
<option value="typing_long.flv">typing_long.flv</option>
<option value="water.flv">water.flv</option>
</select>
<input type="button" name="selectVideo" value="play"
onClick="callFlashPlayVideo();" />
<br /><br />
</body>
</html>
Noções básicas de
segurança
17
No Macromedia Flash Basic 8 e no Macromedia Flash Professional 8, você pode usar o
ActionScript para carregar dados de origens externas em um arquivo SWF ou enviar dados a
um servidor. Quando carrega os dados em um arquivo SWF, você deve entender e acomodar o
modelo de segurança do Flash 8. Quando abrir um arquivo SWF no disco rígido, talvez você
precise fazer configurações especiais para testar o arquivo localmente.
Para obter informações sobre a segurança de arquivo local, consulte “Sobre segurança do
arquivo local e o Flash Player” na página 709. Para obter informações sobre as mudanças entre
o modelo de segurança do Flash Player 7 e do Flash Player 8, consulte “Sobre compatibilidade
com os modelos de segurança anteriores do Flash Player” na página 708. Para obter
informações sobre como carregar e analisar dados de um servidor, leia o Capítulo 16,
“Trabalhando com dados externos”, na página 663. Para obter informações sobre segurança,
consulte www.macromedia.com/devnet/security e www.macromedia.com/software/
flashplayer/security/.
Para obter mais informações sobre segurança no Flash 8, consulte estes tópicos:
Sobre compatibilidade com os modelos de segurança anteriores do Flash
Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .708
Sobre segurança do arquivo local e o Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . .709
Sobre domínios, segurança entre domínios e arquivos SWF . . . . . . . . . . . . . . . . . 727
Arquivos de diretivas de servidor para autorizar o acesso a dados. . . . . . . . . . . . . 736
Acesso de protocolo HTTP para HTTPS entre arquivos SWF . . . . . . . . . . . . . . . . 741
707
Sobre compatibilidade com os modelos
de segurança anteriores do Flash Player
Como resultado das alterações ao recurso de segurança no Flash Player 7, o conteúdo
executado conforme p esperado no Flash Player 6 ou nas versões anteriores talvez não seja
executado da mesma forma nas versões posteriores do Flash Player. Por exemplo, no Flash
Player 6, um arquivo SWF em www.macromedia.com podia ler os dados de um servidor
localizado em data.macromedia.com. Ou seja, o Flash Player 6 permitia que um arquivo SWF
de um domínio carregasse dados de um domínio semelhante.
No Flash Player 7 e versões posteriores, se um arquivo SWF da versão 6 (ou anterior) tentar
carregar dados de um servidor em outro domínio, e esse servidor não fornecer um arquivo de
diretivas que permita leitura a partir do domínio daquele arquivo SWF, será exibida a caixa de
diálogo Macromedia Flash Player Settings (Configurações do Macromedia Flash Player). A
caixa de diálogo solicita que o usuário autorize ou negue o acesso aos dados entre domínios.
Se o usuário clicar em Allow (Autorizar), o arquivo SWF poderá acessar os dados solicitados;
se o usuário clicar em Deny (Negar), o arquivo SWF não poderá acessar os dados solicitados.
Para evitar que essa caixa de diálogo seja exibida, crie um arquivo de diretivas de segurança no
servidor que está fornecendo os dados. Para obter mais informações, consulte “Sobre a
autorização de carregamento de dados entre domínios” na página 737.
O Flash Player 7 e as versões posteriores não permitem o acesso entre domínios sem um
arquivo de diretivas de segurança.
O Flash Player 8 alterou o modo como manipula System.security.allowDomain. Um
arquivo SWF do Flash 8 que chama System.security.allowDomain sem nenhum
argumento, ou qualquer outro arquivo SWF que use o valor curinga (*), permite acesso
apenas a si mesmo. Agora, há suporte para um valor curinga (*), por exemplo:
System.security.allowDomain("*") e System.security.allowInsecureDomain("*").
Se um arquivo SWF da versão 7 ou posterior chamar System.security.allowDomain ou
System.security.allowInsecureDomain com outro argumento, sem ser o curinga (*), isso
afetará todos os arquivos SWF da versão 7 ou anterior no domínio do arquivo SWF que fez a
chamada, assim como ocorria no Flash Player 7. Entretanto, esse tipo de chamada não afeta
nenhum arquivo SWF do Flash Player 8 (ou posterior) no domínio do arquivo SWF
efetuando a chamada. Isso ajuda a minimizar a quebra de conteúdo legado no Flash Player.
Para obter mais informações, consulte “Sobre domínios, segurança entre domínios e arquivos
SWF” na página 727, %{allowDomain (security.allowDomain method)}%, e
%{allowInsecureDomain (security.allowInsecureDomain method)}%.
Quando cria um arquivo FLA, você pode indicar se um arquivo SWF tem permissão para se
comunicar com uma rede ou sistema de arquivos local. Nas versões anteriores do Flash Player,
os arquivos SWF locais podiam interagir com outros arquivos SWF e carregar dados de
qualquer posição local ou remota. No Flash Player 8, um arquivo SWF não pode estabelecer
conexões com o sistema de arquivos local e a Internet. Essa é uma alteração de segurança, para
que um arquivo SWF não possa ler arquivos no seu disco rígido e enviar o conteúdo desses
arquivos pela Internet.
Essa restrição de segurança afeta todo o conteúdo implantado localmente, quer seja conteúdo
legado (um arquivo FLA criado em uma versão anterior do Flash) ou criado no Flash 8.
Imagine que você faça a implantação de um aplicativo do Flash, usando o Flash MX 2004 ou
posterior, executado localmente e que também acessa a Internet. No Flash Player 8, esse
aplicativo agora solicita que o usuário dê permissão para comunicar-se com a Internet.
Quando você testa um arquivo no disco rígido, é necessário seguir uma série de etapas para
determinar se ele é um documento confiável local ou um documento possivelmente não
confiável. Se você criar o arquivo no ambiente de criação do Flash, por exemplo, quando você
seleciona Control (Controlar) > Test Movie (Testar filme), o arquivo será confiável porque está
em um ambiente de teste.
Quando o conteúdo mais antigo é executado em uma versão mais nova do exibidor, e o Flash
Player precisa que você decida se deseja impor regras mais novas ou não, uma das caixas de
diálogo pop-up a seguir poderá ser exibida. Essas caixas de diálogo solicitam permissão antes
de permitir que o conteúdo antigo do Flash se comunique com outros locais na Internet:
■ Poderá ser exibida uma caixa de diálogo avisando que o conteúdo do Flash utilizado está
tentando usar regras de segurança mais antiga para acessar as informações de um site fora
de seu próprio domínio e que essas informações poderão ser compartilhadas entre os dois
sites. O Flash Player pergunta se você deseja permitir ou negar esse acesso.
Clique em Settings (Configurações) para acessar o painel Global Security Settings, no qual
é possível especificar que certos aplicativos do Flash no computador possam se comunicar
com a Internet.
Para alterar as configurações de segurança ou saber mais sobre suas opções, use o painel Global
Security Settings. Use esse painel para redefinir as configurações de privacidade no
Macromedia Flash Player:
■ Se você selecionar Always Deny (Sempre negar) e confirmar essa seleção, o acesso não será
negado para nenhum site da Web que tentar usar a câmera ou o microfone. Você não verá
a pergunta se um site da Web pode usar sua câmera o microfone novamente. Essa ação
aplica-se aos sites da Web que você já visitou ou não.
■ Se você selecionar Always Ask (Sempre perguntar) e confirmar essa seleção, qualquer site da
Web que tentar usar a câmera ou o microfone deverá pedir permissão. Essa ação aplica-se
aos sites da Web que você já visitou ou não.
Depois que você selecionar Always Ask ou Always Deny (ou em vez de fazê-lo), especifique as
configurações de privacidade para sites da Web individuais já visitados. Por exemplo, você
pode selecionar Always Deny aqui e depois usar o painel Website Privacy Settings
(Configurações de privacidade de site da Web) e selecionar Always Allow para sites individuais
que conhece e nos quais confia.
Para o conteúdo implantado localmente e os dados locais, os usuários têm outra opção: eles
podem especificar quais arquivos SWF podem acessar a Internet utilizando o painel Global
Security Settings (Configurações de segurança globais). Para obter mais informações sobre
como especificar configurações no painel Global Security Settings, consulte “Especificando
arquivos confiáveis usando o Settings Manager” na página 721. Para obter mais informações
sobre o painel Global Security Settings, consulte www.macromedia.com/support/
documentation/en/flashplayer/help/settings_manager04a.html.
N OT A
Para corrigir os arquivos SWF para a reprodução local, use uma destas
opções:
Redeploy (Implantar novamente) Executa o Local Content Updater (Atualizador de
conteúdo local). O Local Content Updater reconfigura o arquivo SWF para torná-lo
compatível com o modelo de segurança do Flash Player 8. Reconfigure o arquivo SWF local
para que ele possa acessar somente a rede ou o sistema de arquivos local. Para obter mais
informações e fazer download do Local Content Updater, consulte www.macromedia.com/
support/flashplayer/downloads.html.
Republish and redeploy (Publicar e implantar novamente) Publica o arquivo novamente
com o Flash Basic 8 ou o Flash Professional 8. A ferramenta de criação requer que você
especifique na caixa de diálogo Publish Settings se um arquivo SWF local pode acessar a rede
ou o sistema de arquivos local — mas não ambos. Se especificar que um arquivo SWF local
pode acessar a rede, você também deverá ativar permissões para esse arquivo SWF (e todos os
arquivos SWF locais) nos arquivos SWF, HTML, de dados e/ou servidor que ele acessar. Para
obter mais informações, consulte “Publicando arquivos para implantação local”
na página 717.
Deploy new content (Implantar novo conteúdo) Usa um arquivo de configuração (.cfg) na
pasta #Security/FlashPlayerTrust. Você pode usar esse arquivo para definir permissões de rede
e acesso local. Para obter mais informações, consulte “Criando arquivos de configuração para
o desenvolvimento em Flash” na página 723.
N OT A
Todas essas opções requerem que você publique ou implante o arquivo SWF
novamente.
Se você especificar o acesso de rede para um arquivo local, também será necessário
ativar as permissões nos arquivos SWF, HTML, de dados e de servidor acessados pelo
arquivo SWF local.
Network SWF files (Arquivos SWF de rede) Os arquivos SWF transferidos de uma rede
(como um servidor on-line) são colocados em uma sandbox separada que corresponde aos
domínios de origem de site da Web exclusivos deles. Os arquivos SWF locais que especificam
o acesso à rede são colocados na sandbox local-with-networking (local com a rede). Por padrão,
esses arquivos podem ler dados somente do mesmo site no qual se originaram. A
correspondência de domínio exato aplica-se a esses arquivos. Os arquivos SWF de rede
poderão acessar dados de outros domínios se tiverem as permissões corretas. Para obter mais
informações sobre arquivos SWF de rede, consulte “Access network only (Acessar somente a
rede)” na página 719.
Local SWF files (Arquivos SWF locais) Os arquivos SWF que operam com sistemas de
arquivos locais ou caminhos de rede UNC são colocados em uma das três sandboxes no Flash
Player 8. Por padrão, os arquivos SWF locais são colocados na sandbox local-with-file-system
(local com sistema de arquivos). Os arquivos SWF locais registrados como confiáveis (com o
uso de um arquivo de configuração) são colocados na sandbox local-trusted (local confiável).
Para obter informações sobre essas sandboxes, consulte “Access local files only (Acessar
arquivos locais somente - padrão)” na página 718.
Se você acessou o Settings Manager clicando no botão Settings em uma caixa de diálogo, a
caixa Add Location conterá um caminho semelhante a
C:\nome_do_diretório\nome_do_arquivo.swf ou /Users/nome_do_diretório/
nome_do_arquivo.swf; esse caminho informa qual arquivo tentou se comunicar com a
Internet e foi interrompido pela segurança do Flash Player. Se o caminho apresentar o
conteúdo que deverá ter permissão para se comunicar com a Internet, copie e cole-o na
caixa Trust This Location (Confiar nesse local). Ou clique em um dos botões Browse
(Procurar) e encontre o conteúdo.
Você pode adicionar um arquivo individual ou um diretório completo. Caso adicione um
diretório completo, todos os arquivos e subdiretórios nele contidos serão considerados
confiáveis. Uma parte do conteúdo do Flash consiste em vários arquivos relacionados e
talvez seja necessário confiar no diretório completo em que esses arquivos se encontram.
Em geral, não confie em diretórios de nível superior.
2. Clique em Confirm (Confirmar).
O local será adicionado ao painel Security Settings (Configurações de segurança). Os
locais na lista sempre terão permissão para usar as regras de segurança antigas, mesmo que
as opções Always Deny ou Always Ask na parte superior do painel Security estejam
selecionadas.
Após a adição de locais confiáveis, você poderá reiniciar o conteúdo local do Flash
atualizando o navegador ou reiniciando o exibidor.
Se você clicar em Always Allow, essa opção só aplicará essa configuração ao conteúdo legado
sempre permitido (Flash Player 7 e versões anteriores). A configuração nem “sempre autoriza”
o conteúdo do Flash Player 8. É recomendável especificar os aplicativos e diretórios do Flash
no computador que poderão se comunicar com a Internet e o sistema de arquivos local.
Se o arquivo FlashAuthor.cfg for excluído, ele será recriado quando você iniciar a
ferramenta de criação do Flash 8.
www.macromedia.com www.macromedia.com
data.macromedia.com data.macromedia.com
65.57.83.12 65.57.83.12
www.macromedia.com data.macromedia.com
macromedia.com www.macromedia.com
www.macromedia.com macromedia.com
O Flash Player 8 não permite que os arquivos SWF locais se comuniquem com a Internet sem
uma configuração apropriada. Para obter informações sobre como definir um arquivo de
configuração para testar o conteúdo localmente, consulte “Criando arquivos de configuração
para o desenvolvimento em Flash” na página 723.
Para obter mais informações sobre segurança, consulte www.macromedia.com/devnet/
security/ e www.macromedia.com/software/flashplayer/security/.
Para obter mais informações, consulte os seguintes tópicos:
■ “Regras relativas a nomes de domínio para configurações e dados locais” na página 728
■ “Acesso entre domínios e a subdomínios entre arquivos SWF” na página 729
■ “Sobre a autorização de carregamento de dados entre domínios” na página 737
A questão a seguir afeta apenas os arquivos SWF publicados para o Flash Player 7. Quando o
destinatário é HTTPS, e o remetente é um arquivo SWF local, allowDomain() é chamado,
mesmo que allowInsecureDomain() deva ser chamado. No entanto, no Flash Player 8,
quando um destinatário HTTPS LocalConnection é Flash Player 8, e o remetente é um
arquivo local, allowInsecureDomain() é chamado.
Os arquivos executados no Flash Player 8 estão sujeitos a alterações em relação ao modo como
são executados no Flash Player 7. Chamar System.security.allowDomain permite
operações entre scripts somente quando o arquivo SWF sendo acessado é aquele que chamou
System.security.allowDomain. Em outras palavras, um arquivo SWF que chama
System.security.allowDomain agora permite acesso apenas a si mesmo. Nas versões
anteriores, chamar System.security.allowDomain permitia operações entre scripts nas
quais o arquivo SWF sendo acessado podia ser qualquer arquivo SWF no mesmo domínio que
o que chamasse System.security.allowDomain. Isso abria todo o domínio do arquivo SWF
fazendo a chamada.
Foi adicionado suporte para o valor curinga (*) para System.security.allowDomain("*")
e System.security.allowInsecureDomain("*"). O valor de caractere curinga (*) permite
operações entre scripts nas quais o arquivo de acesso é qualquer um e pode ser carregado de
qualquer local (como uma permissão global). As permissões curinga podem ser úteis, mas
devem seguir as novas regras de segurança de arquivo local no Flash Player 8. Especificamente,
os arquivos locais não vêm de um domínio, portanto, é necessário utilizar o valor curinga.
Entretanto, tenha cuidado ao usar o valor curinga porque qualquer domínio tem acesso ao
arquivo. Para obter mais informações, consulte %{allowInsecureDomain (método
security.allowInsecureDomain)}%.
As versões que controlam o comportamento do Flash Player são versões de arquivos SWF (a
versão especificada do Flash Player de um arquivo SWF), não a versão do próprio Flash Player.
Por exemplo, quando o Flash Player 8 estiver reproduzindo um arquivo SWF publicado para a
versão 7, o Flash Player aplicará um comportamento consistente com a versão 7. Essa prática
garante que as atualizações do exibidor não alterem o comportamento de
System.security.allowDomain() nos arquivos SWF implantados.
Poderá ser necessário adicionar instruções como estas em seus arquivos, se você ainda não as
estiver utilizando. Por exemplo, se o seu arquivo SWF estiver hospedado em
www.someSite.com e você desejar autorizar o acesso por um arquivo SWF publicado para
Flash Player 7 que está em store.someSite.com, inclua instruções como as a seguir no arquivo
em www.someSite.com (você ainda poderá publicar para Flash Player 6 o arquivo em
www.someSite.com):
System.security.allowDomain("store.someSite.com");
my_lc.allowDomain = function(sendingDomain) {
return(sendingDomain=="store.someSite.com");
}
Além disso, considere que se um aplicativo Flash Player 6 em execução no Flash Player 7
tentar acessar dados fora de seu domínio exato, o Flash Player 7 e as regras de correspondência
de domínio exato serão impostos e o usuário deverá permitir ou negar o acesso.
Em resumo, poderá ser necessário modificar os seus arquivos para adicionar ou alterar
instruções allowDomain se você publicar arquivos para Flash Player 7 que atendam às
seguintes condições:
■ Você implementou scripts entre arquivos SWF (consulte “Permitindo o acesso a dados
entre arquivos SWF de domínios diferentes” na página 734).
■ O arquivo SWF chamado (de qualquer versão) não está hospedado em site com protocolo
seguro (HTTPS), ou os arquivos SWF chamado e de chamada estão ambos hospedados
em sites HTTPS. Se somente o arquivo SWF chamado estiver em HTTPS, consulte
“Acesso de protocolo HTTP para HTTPS entre arquivos SWF” na página 741.
■ Os arquivos SWF não estão no mesmo domínio (por exemplo, um arquivo está em
www.domain.com e o outro em store.domain.com).
Você deve realizar as seguintes alterações:
■ Se o arquivo SWF chamado estiver publicado para Flash Player 7 ou posterior, inclua
System.security.allowDomain ou LocalConnection.allowDomain nesse arquivo
SWF, usando a correspondência de nome de domínio exato.
Se dois arquivos SWF forem disponibilizados do mesmo domínio — por exemplo, http://
mysite.com/movieA.swf and http://mysite.com/movieB.swf — então movieA.swf poderá
examinar e modificar variáveis, objetos, propriedades, métodos etc. em movieB.swf, e movieB
poderá fazer o mesmo para movieA. Isso se chama script entre filmes ou operação entre scripts.
Se dois arquivos SWF forem disponibilizados de domínios diferentes — por exemplo, http://
mysite.com/movieA.swf and http://othersite.com/movieB.swf — então, por padrão, o Flash
Player não permitirá que movieA.swf crie script para movieB.swf, e nem o contrário. Se você
chamar System.security.allowDomain("mysite.com"), movieB.swf dará a movieA.swf
permissão para criar script para movieB.swf. Um arquivo SWF dá aos arquivos SWF de outros
domínios permissão para a criação de script por meio da chamada para
System.security.allowDomain(). Isso se chama criação de script entre domínios.
Suponha que data.swf defina um método chamado getData() em sua Timeline principal.
Por padrão, main.swf não pode chamar o método getData() definido em data.swf após o
carregamento desse arquivo porque os dois arquivos SWF não residem no mesmo domínio.
Por exemplo, ocorrerá uma falha na chamada de método a seguir em main.swf, caso data.swf
tenha sido carregado.
// In macromedia.swf, after data.swf has loaded:
target_mc.getData(); // This method call will fail
Agora, a função getData no arquivo SWF carregado pode ser chamada pelo arquivo
macromedia.swf. Observe que allowDomain permite a qualquer arquivo SWF do domínio
autorizado acessar qualquer arquivo SWF do domínio que permite o acesso, a menos que o
arquivo SWF que esteja sendo acessado esteja hospedado em um site que usa um protocolo
seguro (HTTPS).
Para contornar isso, você poderá carregar mais de um arquivo de diretivas em um único
arquivo SWF usando loadPolicyFile. O Flash Player sempre espera a conclusão do
download de qualquer arquivo de diretiva antes de negar uma solicitação que requeira um
arquivo desse tipo. O Flash Player consultará o local padrão de crossdomain.xml se nenhuma
outra diretiva for autorizada no arquivo SWF.
A sintaxe especial permite a recuperação dos arquivos de diretiva diretamente de um servidor
XMLSocket:
System.security.loadPolicyFile("xmlsocket://foo.com:414");
Nesse exemplo, o Flash Player tenta recuperar um arquivo de diretivas do host e da porta
especificados. Qualquer porta poderá ser usada se o arquivo de diretivas não estiver no
diretório padrão (raiz); caso contrário, a porta só poderá ser a 1024 ou superior (assim como
ocorre com os exibidores anteriores). Quando uma conexão é estabelecida com a porta
especificada, o Flash Player envia <policy-file-request />, terminada por um byte nulo.
O servidor de soquete XML pode ser configurado para disponibilizar arquivos de diretivas das
seguintes formas:
■ Disponibilizar arquivos de diretivas e conexões normais de soquete pela mesma porta. O
servidor deverá aguardar <policy-file-request /> antes de transmitir um arquivo de
diretivas.
Coo a capacidade de se conectar a portas inferiores a 1024 está disponível no Flash Player 7
(7.0.19.0) e posterior, um arquivo de diretivas carregado com loadPolicyFile sempre deverá
autorizar esse procedimento, mesmo quando um arquivo SWF estiver se conectando a seu
próprio subdomínio.
O código a seguir mostra um exemplo das alterações que você provavelmente terá de fazer:
// Commands in a Flash Player 6 SWF file at https://www.someSite.com
// to allow access by Flash Player 7 SWF files that are hosted
// at http://www.someSite.com or at http://www.someOtherSite.com
System.security.allowDomain("someOtherSite.com");
my_lc.allowDomain = function(sendingDomain) {
return(sendingDomain=="someOtherSite.com");
}
// Corresponding commands in a Flash Player 7 SWF file
// to allow access by Flash Player 7 SWF files that are hosted
// at http://www.someSite.com or at http://www.someOtherSite.com
System.security.allowInsecureDomain("www.someSite.com",
"www.someOtherSite.com");
my_lc.allowInsecureDomain = function(sendingDomain) {
return(sendingDomain=="www.someSite.com" ||
sendingDomain=="www.someOtherSite.com");
}
Depurando aplicativos 18
O Macromedia Flash Basic 8 e o Macromedia Flash Professional 8 oferecem várias
ferramentas para testar o ActionScript nos arquivos SWF. O Debugger (Depurador) permite
que você encontre erros em um arquivo SWF durante sua execução no Flash Debug Player
(consulte “Depurando scripts” na página 745). O Flash também fornece as seguintes
ferramentas de depuração adicionais:
■ O painel Output (Saída), que exibe mensagens de erro, inclusive alguns erros de tempo de
execução, e listas de variáveis e objetos (consulte “Usando o painel Output”
na página 759)
■ A instrução trace, que envia observações de programação e valores de expressão para o
painel Output (consulte “Usando a instrução trace” na página 764)
■ As instruções throw e try..catch..finally que permitem testar e responder aos erros
em tempo de execução de dentro do script.
Esta seção descreve como depurar os scripts e os aplicativos Flash utilizando o Debugger e
como usar o painel Output. Para obter mais informações, consulte os seguintes tópicos:
Depurando scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .745
Usando o painel Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .759
Depurando scripts
O Debugger no Flash 8 ajuda a encontrar erros no arquivo SWF durante sua execução no
Flash Player. Você deve exibir seu arquivo SWF em uma versão especial do Flash Player
chamada Flash Debug Player. Ao instalar a ferramenta de criação, o Flash Debug Player é
instalado automaticamente. Assim, se você instalar o Flash e navegar por um site com
conteúdo Flash ou usar a opção Test Movie (Testar filme), estará usando o Flash Debug
Player. Também é possível executar o instalador no seguinte diretório no Windows ou no
Macintosh: diretório de instalação do Flash\Players\Debug\ ou inicie o Flash Debug Player
independente do mesmo diretório.
745
Quando usar o comando Control (Controle) > Test Movie para testar os arquivo SWF que
implementam controles de teclado (tabulação, atalhos de teclado criados usando
Key.addListener() e assim por diante), selecione Control > Disable Keyboard Shortcuts
(Desativar atalhos de teclado). A seleção desta opção evita que o ambiente de criação “retenha”
pressionamentos de teclas e permite passá-los diretamente para o exibidor. Por exemplo, no
ambiente de criação, Control+U abre a caixa de diálogo Preferences (Preferências). Se o seu
script associar Control+U a uma ação que sublinha o texto na tela, ao usar o comando Test
Movie, o pressionamento de Control+U abrirá a caixa de diálogo Preferences (Preferências)
em vez de executar a ação que sublinha o texto. Para permitir que o comando Control+U seja
passado para o exibidor, você deve selecionar Control > Disable Keyboard Shortcuts.
A T E NÇ Ã O
O Debugger mostra uma lista hierárquica de clipes de filme carregados atualmente no Flash
Player. Com o Debugger, você pode exibir e modificar valores de variáveis e propriedades
durante a reprodução do arquivo SWF, e pode usar pontos de interrupção para interromper
sua execução e percorrer o código do ActionScript linha por linha.
Use o Debugger no modo de teste com arquivos locais ou para testar arquivos em um servidor
Web em local remoto. O Debugger permite definir pontos de interrupção no ActionScript
para interromper o Flash Player e executar a depuração direta do código durante a sua
execução. Depois, você pode voltar para os scripts e editá-los para que produzam os resultados
corretos.
Uma vez ativada, a barra de status do Debugger exibe o URL ou o caminho local do arquivo,
informa se o arquivo está sendo executado no modo de teste ou a partir de um local remoto, e
mostra uma lista de exibição dinâmica do clipe de filme. Quando os clipes de filme são
adicionados ou removidos do arquivo, a lista de exibição reflete as alterações imediatamente. É
possível redimensionar a lista de exibição movendo o divisor horizontal.
Se essa caixa de diálogo não for exibida, significa que o Flash não pôde encontrar o
arquivo SWD. Nesse caso, clique com o botão direito do mouse (Windows), ou
mantenha pressionada a tecla Control e clique (Macintosh), no arquivo SWF para
exibir o menu de contexto. Selecione Debugger nesse menu.
3. Na caixa de diálogo Remote Debug (Depuração remota), selecione Localhost (Host local)
ou Other Machine (Outra máquina):
■ Selecione Localhost se o Debug Player e o aplicativo de criação Flash estiverem no
mesmo computador.
■ Selecione Other Machine (Outra máquina) se o Debug Player e o aplicativo de criação
Flash não estiverem no mesmo computador. Digite o endereço IP do computador em
que o aplicativo de criação Flash está sendo executado.
4. Quando a conexão for estabelecida, a senha será solicitada.
Digite a senha para depuração se já houver uma definida.
A lista de exibição do arquivo SWF aparece no Debugger. Se o arquivo SWF não for
reproduzido, o Debugger poderá ser interrompido, portanto, clique em Continue para
iniciá-lo.
Para escrever o valor de uma expressão para o painel Output no modo de teste, use a
instrução trace. Consulte “Usando a instrução trace” na página 764.
Para escrever o valor de uma expressão para o painel Output no modo de teste, use
a instrução trace. Consulte “Usando a instrução trace” na página 764.
Step In (Depuração total) avança o Debugger (indicado pela seta amarela) dentro de uma
função. O botão Step In funciona somente com funções definidas pelo usuário.
No exemplo a seguir, se você colocar um ponto de interrupção na linha 7 e clicar em Step In,
o Debugger avançará para a linha 2, e, com um clique posterior em Step In, ele avançará para
a linha 3. Para avançar o Debugger uma linha de código, clique em Step In para linhas que
não têm funções definidas pelo usuário. Por exemplo, se você parar na linha 2 e selecionar
Step In, o Debugger avançará para a linha 3, conforme mostrado no seguinte exemplo:
1 function myFunction() {
2 x = 0;
3 y = 0;
4 }
5
6 mover = 1;
7 myFunction();
8 mover = 0;
NO TA
Os números neste trecho de código indicam números de linha. Eles não fazem parte do
código.
Continue (Continuar) sai da linha em que o exibidor está parado e continua a reprodução até
alcançar um ponto de interrupção.
Stop Debugging (Parar a depuração) desativa o Debugger, mas continua a reproduzir o
arquivo SWF no Flash Player.
Find (Localizar) Abre uma caixa de diálogo que você pode usar para encontrar uma
palavra-chave ou frase no conteúdo do painel Output.
Find Again (Localizar Tenta localizar a próxima instância de uma palavra-chave ou frase
novamente) no conteúdo do painel Output.
Save to File (Salvar em Salva o conteúdo atual do painel Output em um arquivo de texto
arquivo) externo.
Print (Imprimir) Mostra a caixa de diálogo Print, que permite imprimir o conteúdo
atual do painel Output em uma impressora instalada ou em
programas instalados, como o Flash Paper ou o Acrobat.
Filter level (Nível de Permite selecionar dois níveis possíveis de saída: None (Nenhum)
filtro) ou Verbose (Extenso). Selecione None para eliminar a saída
enviada ao navegador.
Para obter mais informações sobre como o painel Output, consulte os seguintes tópicos:
■ “Listando os objetos de um arquivo SWF” na página 761
■ “Listando as variáveis de um arquivo SWF” na página 762
■ “Sobre como exibir as propriedades do campo de texto para depuração” na página 763
■ “Usando a instrução trace” na página 764
■ “Atualizando o Flash Player para teste” na página 765
O comando List Objects não lista todos os objetos de dados do ActionScript. Nesse contexto,
um objeto é considerado como uma forma ou símbolo no Stage.
Para obter mais informações sobre os comandos List Variables (Listar variáveis) e List Objects
(Listar objetos), consulte “Usando o painel Output” na página 759.
2. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF.
767
Vários autores poderão trabalhar em um aplicativo com menos conflitos e mais eficiência.
Se melhores práticas e convenções de codificação forem seguidas, os administradores de
projetos ou sites poderão gerenciar e estruturar projetos ou aplicativos complexos com
menor quantidade de conflitos ou redundâncias.
■ Quando você estiver estudando ou ensinando o Flash e o ActionScript
Aprender a criar aplicativos usando as melhores práticas e seguindo convenções de
codificação reduz a necessidade de reaprender determinadas metodologias. Se os alunos
que estão aprendendo Flash exercitarem maneiras melhores e consistentes de estruturar o
código, poderão aprender a linguagem com mais rapidez e menos frustração.
Técnicas consistentes e as diretrizes a seguir ajudam pessoas que estejam aprendendo Flash ou
que estejam trabalhando efetivamente em ambientes de equipe. Quando você trabalha
sozinho, métodos consistentes o ajudam a lembrar como estruturou seu documento,
especialmente se não tiver usado o arquivo FLA recentemente.
Essas são apenas algumas razões pelas quais você deve aprender e seguir as melhores práticas.
Você está prestes a descobrir muito mais quando ler essas melhores práticas e desenvolver seus
próprios bons hábitos. Considere os tópicos a seguir como uma diretriz para a utilização do
Flash; você pode optar por seguir algumas ou todas as recomendações. Você também pode
modificá-las para que se ajustem ao seu modo de trabalho. Muitas das diretrizes neste capítulo
o ajudam a desenvolver uma maneira consistente de trabalhar com Flash e a criar o código
ActionScript.
Este capítulo aborda os seguintes tópicos sobre as convenções de codificação e as melhores
práticas:
Convenções de atribuição de nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .769
Usando de comentários no código. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
Convenções de codificação do ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782
Otimização do ActionScript e do Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
Formatando a sintaxe do ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .799
Nunca use maiúsculas e minúsculas diferentes para evitar conflito com palavras
reservadas. Por exemplo, a atribuição de nome a uma instância da classe TextField
textfield (que não entra em conflito com TextField porque o Flash faz distinção entre
maiúsculas e minúsculas) é uma prática de codificação inadequada.
A tabela a seguir lista as palavras reservadas no ActionScript 2.0 que causam erros nos scripts
quando usadas como nomes de variáveis:
gt if ifFrameLoaded implements
volatile
Sempre que possível, use uma atribuição estrita de tipos de dados em suas variáveis, pois isso o
ajudará da seguinte maneira:
■ Adiciona a funcionalidade de conclusão de código, o que agiliza a codificação.
■ Gera erros no painel Output (Saída), para que não ocorra uma falha silenciosa durante a
compilação do arquivo SWF. Esses erros ajudam a localizar e corrigir problemas nos
aplicativos.
Para adicionar um tipo de dados às variáveis, você deve defini-las usando a palavra-chave var.
No exemplo a seguir, ao criar um objeto LoadVars, você usaria a atribuição estrita de tipo de
dados:
var paramsLv:LoadVars = new LoadVars();
A atribuição estrita de tipo de dados não torna mais lento um arquivo SWF. A verificação
de tipo ocorre durante a compilação (quando o arquivo SWF é criado), e não em tempo
de execução.
Não codifique diretamente constantes numéricas a menos que a constante seja 1, 0 ou -1, que
você pode usar em um loop for como um valor de contador.
Ou, para uma variável indicando se um usuário fez login (ou não), você pode usar o seguinte:
isLoggedIn
Pode haver variáveis de membro públicas e privadas em uma classe. A classe pode conter
variáveis que os usuários não devem definir nem acessar diretamente. Torne essas variáveis
privadas e somente permita que os usuários acessem os valores usando os métodos getter/
setter.
As seguintes diretrizes se aplicam à atribuição de nomes a classes:
■ O nome de uma classe deve iniciar com uma letra maiúscula.
■ Escreva os nomes de classes em maiúsculas e minúsculas quando forem palavras compostas
ou concatenadas.
Comece com uma letra maiúscula para uma palavra composta ou concatenada. Um bom
exemplo seria NewMember.
■ Em geral, os nomes de classes são substantivos ou substantivos qualificados.
O qualificador descreve o substantivo ou a frase. Por exemplo, em vez de “member”, você
pode qualificar o substantivo usando NewMember or OldMember.
■ Nomes claros são mais importantes que nomes curtos.
■ Não use acrônimos e abreviações.
Não inclua comentários que não se relacionem diretamente à classe que está sendo lida.
Por exemplo, não inclua comentários que descrevam o pacote correspondente.
Convenções de codificação do
ActionScript
Um dos aspectos mais importantes sobre programação é a consistência, seja ela relacionada aos
esquema de atribuição de nome de variáveis (abordado em “Convenções de atribuição de
nome” na página 769), à formatação de código (abordada em “Formatando a sintaxe do
ActionScript” na página 799) ou ao padrões de codificação e ao posicionamento do código
your ActionScript 2.0, que é abordado nesta seção. Se o código for organizado e obedecer a
padrões, será possível simplificar significativamente a depuração e a manutenção do mesmo.
Para obter mais informações sobre convenções de codificação, consulte os seguintes tópicos:
■ “Manutenção do código ActionScript em um único local” na página 782
■ “Anexando código a objetos” na página 783
■ “Manipulação do escopo” na página 784
■ “Estruturando um arquivo de classes” na página 788
■ “Sobre o uso de funções” na página 795
Para obter mais informações sobre a sintaxe do ActionScript, consulte “Formatando a sintaxe
do ActionScript” na página 799
N OT A
Manipulação do escopo
O escopo é a área em que a variável é conhecida e pode ser usada em um arquivo SWF, como
na Timeline, globalmente em todo um aplicativo ou localmente em uma função. Em geral, é
possível referenciar o escopo de mais de uma forma quando você escreve código. O uso correto
do escopo significa que você pode criar o código ActionScript de forma móvel e reutilizável, e
não é necessário correr o risco de dividir os aplicativos durante a criação de novos módulos.
É necessário definir o escopo de todas as variáveis, exceto as que forem parâmetros de função e
variáveis locais. Sempre que possível, defina o escopo das variáveis em relação a seu caminho
atual, usando o endereçamento relativo, como a propriedade this. Para obter mais
informações sobre como usar a propriedade this, consulte %{this property}% em
ActionScript 2.0 Language Reference.
Se você adicionar a palavra-chave this nessas situações, o código ActionScript 2.0 será muito
mais fácil de ler e compreender.
Como você está tentando fazer referência à variável membro privada em um manipulador
onLoad, a palavra-chave this realmente se refere à instância prodXml e não à classe Product
esperada. Por isso, você deve criar um ponteiro para o arquivo de classes local para que possa
fazer referência direta à classe do manipulador onLoad.
Para obter mais informações sobre classes, consulte “Noções básicas sobre classes e escopo”
na página 299. Para obter mais informações sobre escopo, consulte “Manipulação do escopo”
na página 784.
Esse exemplo mostra uma forma melhor do que colocar as duas declarações na mesma
linha. Coloque essas declarações no início de um bloco de código.
■ Inicialize as variáveis locais ao declará-las.
As propriedades de uma classe somente deverão ser inicializadas na declaração se o
inicializador for uma constante de tempo de compilação.
■ Declare as variáveis antes de utilizá-las.
Isso inclui os loops.
■ Evite usar declarações locais que ocultem declarações de nível superior.
Por exemplo, não declare uma variável duas vezes, como mostra o seguinte exemplo:
var counterNum:Number = 0;
function myMethod() {
for (var counterNum:Number = 0; counterNum<=4; counterNum++) {
// statements;
}
}
Esse código declara a mesma variável dentro de um bloco interno, e essa é a prática que
você deve evitar.
■ Não atribua muitas variáveis a um único valor em uma instrução.
Siga essa convenção porque, caso contrário, o código será difícil de ler, como mostra o
código ActionScript a seguir:
playBtn.onRelease = playBtn.onRollOut = playsound;
ou
class User {
private var m_username:String, m_password:String;
}
■ Somente torne públicos um método ou propriedade se isso for necessário por algum
motivo. Caso contrário, deixe seus métodos e propriedades privados.
■ Não utilize em excesso as funções getter/setter no arquivo de classe.
As funções getter/setter são excelentes para várias finalidades (consulte “Sobre os métodos
getter e setter” na página 270), no entanto, seu uso excessivo pode indicar que você
poderia melhorar a arquitetura ou a organização do aplicativo.
Você não precisa adicionar esses prefixos, e alguns desenvolvedores acham que isso é
desnecessário. A Macromedia recomenda adicionar a palavra-chave this como prefixo,
pois ela pode melhorar a legibilidade e ajudar a escrever um código limpo, fornecendo
contexto.
Sobre a inicialização
Para os valores iniciais de variáveis, atribua um valor padrão ou permita o valor undefined,
como mostra o seguinte exemplo de classe. Quando você inicializa as propriedades inline, a
expressão à direita de uma atribuição deve ser uma constante de tempo de compilação. Ou
seja, a expressão não pode se referir a algo definido durante a execução. As constantes de
tempo de compilação incluem literais de seqüência de caracteres, números, valores booleanos,
null e undefined, bem como funções construtoras para as seguintes classes de nível superior:
Array, Boolean, Number, Object e String. Esta classe define os valores iniciais de m_username
e m_password como strings vazias:
class User {
private var m_username:String = "";
private var m_password:String = "";
function User(username:String, password:String) {
Exclua variáveis ou torne-as null quando não precisar mais delas. A definição de variáveis
como null ainda pode aumentar o desempenho. Esse processo é normalmente chamado
coleta de lixo. A exclusão de variáveis ajuda a otimizar o uso da memória durante o tempo de
execução, pois recursos desnecessários são removidos do arquivo SWF. É melhor excluir
variáveis do que defini-las como null. Para obter mais informações sobre variáveis, consulte
“Otimizando o código” na página 798.
NO TA
Para obter informações sobre a atribuição de nomes a variáveis, consulte “Atribuição de nome
a variáveis” na página 772. Para obter mais informações sobre como excluir objetos, consulte
%{delete statement}% em ActionScript 2.0 Language Reference.
O uso de classes é uma das maneiras mais fáceis de inicializar o código usando o ActionScript
2.0. Você pode encapsular toda a inicialização de uma instância na função construtora da
classe ou abstraí-la para um método separado, que chamaria explicitamente após a criação da
variável, como mostra o seguinte código:
class Product {
function Product() {
var prodXml:XML = new XML();
prodXml.ignoreWhite = true;
prodXml.onLoad = function(success:Boolean) {
if (success) {
trace("loaded");
} else {
trace("error loading XML");
}
};
prodXml.load("products.xml");
}
}
O código a seguir poderia ser a primeira chamada de função no aplicativo, e o único criado
para a inicialização. O Quadro 1 de um arquivo FLA que está carregando o XML pode usar
um código semelhante ao seguinte ActionScript:
if (init == undefined) {
var prodXml:XML = new XML();
prodXml.ignoreWhite = true;
prodXml.onLoad = function(success:Boolean) {
if (success) {
O uso de uma instrução trace é uma maneira eficiente de depurar o ActionScript 2.0.
Você pode remover as instruções trace ao publicar um arquivo SWF, o que significa uma
pequeno aumento no desempenho da reprodução. Antes de publicar um arquivo SWF, abra
Publish Settings (Configurações de publicação) e selecione Omit Trace Actions (Omitir ações
Trace) na guia Flash. Para obter mais informações sobre como usar trace, consulte %{trace
function}% em ActionScript 2.0 Language Reference.
A ferramenta Debugger também é útil para a depuração do código ActionScript. Para obter
mais informações, consulte Capítulo 18, “Depurando aplicativos.”.
Crie uma nova classe chamada Socks que estenda a classe Clothes, conforme mostrado no
seguinte exemplo:
class Socks extends Clothes {
private var color:String;
function Socks(paramColor:String) {
this.color = paramColor;
trace("[Socks] I am the constructor");
}
function getColor():String {
trace("[Socks] I am getColor");
return super.getColor();
}
function setColor(paramColor:String):Void {
this.color = paramColor;
trace("[Socks] I am setColor");
}
}
Neste código, você anexa uma instância de clipe de filme da biblioteca e modifica suas
propriedades usando a instrução with. Quando não especifica o escopo de uma variável, você
nem sempre sabe onde está definindo as propriedades; portanto, seu código pode fica confuso.
No código anterior, você poderia esperar que someVariable fosse definido no clipe de filme
circle1Clip, mas na verdade, foi definido na Timeline principal do arquivo SWF.
Uma exceção a essa regra é que quando está trabalhando com uma API de desenho para
desenhar formas, você pode ter várias chamadas semelhantes para os mesmos métodos (como
lineTo ou curveTo) em virtude da funcionalidade da API do desenho. Por exemplo, ao
desenhar um retângulo simples, você precisa de quatro chamadas separadas para o método
lineTo, como mostra o seguinte código:
this.createEmptyMovieClip("rectangleClip", 1);
with (rectangleClip) {
lineStyle(2, 0x000000, 100);
beginFill(0xFF0000, 100);
moveTo(0, 0);
lineTo(300, 0);
lineTo(300, 200);
lineTo(0, 200);
lineTo(0, 0);
endFill();
}
Se você tiver escrito o método lineTo ou curveTo com um nome de instância totalmente
qualificado, o código se tornará desordenado rapidamente, dificultando a leitura e depuração.
Você pode usar essas funções adicionando o seguinte código ActionScript ao arquivo FLA:
import mx.site.Utils;
var randomMonth:Number = Utils.randomRange(0, 11);
var min:Number = Utils.arrayMin([3, 3, 5, 34, 2, 1, 1, -3]);
var max:Number = Utils.arrayMax([3, 3, 5, 34, 2, 1, 1, -3]);
trace("month: "+randomMonth);
trace("min: "+min);
trace("max: "+max);
Otimizando o código
Lembre-se das seguintes diretrizes ao otimizar o código:
■ Evite chamar uma função várias vezes de dentro de um loop.
É melhor incluir o conteúdo de uma pequena função dentro do loop.
■ Use funções nativas quando possível.
Elas são mais rápidas do que as funções definidas pelo usuário.
■ Não use o tipo Object (Objeto) demais.
As anotações de tipo de dados devem ser precisas, porque isso melhora o desempenho. Use
o tipo Object somente quando não houver uma alternativa razoável.
■ Evite usar a função eval() ou o operador de acesso de array.
Com freqüência, é preferível e mais eficiente definir a referência local uma vez.
■ Atribua Array.length a uma variável antes de um loop.
Atribua Array.length a uma variável antes de um loop para usar como sua condição, em
vez de usar myArr.length. Por exemplo:
var fontArr:Array = TextField.getFontList();
var arrayLen:Number = fontArr.length;
for (var i:Number = 0; i < arrayLen; i++) {
em vez de:
var fontArr:Array = TextField.getFontList();
for (var i:Number = 0; i < fontArr.length; i++) {
trace(fontArr[i]);
}
ou
printSize("size is " + foo + "\n");
■ Coloque cada instrução em uma linha separada para aumentar a legibilidade do código
ActionScript.
O código ActionScript a seguir mostra um exemplo disso:
theNum++; // Correct
theOtherNum++; // Correct
aNum++; anOtherNum++; // Incorrect
// if..else statement
if (condition) {
// statements
} else {
// statements
}
// else..if statement
if (condition) {
// statements
} else if (condition) {
// statements
Ao escrever instruções complexas, você deve usar parênteses [()] para agrupar as condições. Se
parênteses não forem usados, você (ou outras pessoas que estejam usando o código
ActionScript 2.0) poderá encontrar erros de precedência de operador.
Por exemplo, o código a seguir não usa parênteses ao redor das condições:
if (fruit == apple && veggie == leek) {}
Você pode escrever uma instrução condicional que retorne um valor booleano de duas
maneiras. O segundo exemplo é preferível:
if (cartArr.length>0) {
return true;
} else {
return false;
}
O segundo trecho é mais curto e tem menos expressões para avaliação, além de ser mais fácil
de ler e entender.
O exemplo a seguir verifica se a variável y é maior que zero, e retorna o resultado x/y ou o
valor 0.
return ((y > 0) ? x/y : 0);
O exemplo a seguir mostra outra maneira de escrever esse código. Este exemplo é preferível:
if (y>0) {
return x/y;
} else {
return 0;
}
A sintaxe if reduzida do primeiro exemplo é mostrada como o operador condicional (?:). Ele
permite converter instruções if..else simples em uma única linha de código. Nesse caso, a
sintaxe abreviada reduz a legibilidade.
Se você precisa usar operações condicionais, coloque a condição inicial (antes do ponto de
interrogação [?]) entre parênteses para melhorar a legibilidade do código. Você pode ver um
exemplo disso no trecho de código anterior.
Delimite cada instrução entre chaves quando ela fizer parte de uma estrutura de controle
(if..else ou for), mesmo que ela contenha somente uma instrução. O exemplo a seguir
mostra o código escrito incorretamente:
// bad
if (numUsers == 0)
trace("no users found.");
Embora esse código seja validado, ele é escrito de forma incorreta, pois não tem chaves
delimitando as instruções. Nesse caso, se você adicionar outra instrução após trace, o código
será executado, quer a variável numUsers seja igual a 0 ou não:
// bad
var numUsers:Number = 5;
if (numUsers == 0)
trace("no users found.");
trace("I will execute");
A execução do código, apesar da variável numUsers pode levar a resultados inesperados. Por
isso, adicione chaves, como mostra o seguinte exemplo:
var numUsers:Number = 0;
if (numUsers == 0) {
trace("no users found");
}
Ao escrever uma condição, não adicione o redundante ==true ao código, da seguinte maneira:
if (something == true) {
// statements
}
// try..catch..finally
try {
// statements
} catch (myErr) {
// statements
} finally {
// statements
}
Uma pequena variação no primeiro exemplo desta seção consiste em usar o método
handleEvent, mas essa técnica é um pouco mais complicada. A Macromedia não recomenda
essa técnica porque você deve usar uma série de instruções if..else ou uma instrução
switch para detectar qual evento será capturado.
var boxLdr:mx.controls.Loader;
var ldrListener:Object = new Object();
ldrListener.handleEvent = function(evt:Object) {
switch (evt.type) {
case "progress" :
trace("loader loading:" + Math.round(evt.target.percentLoaded) + "%");
break;
case "complete" :
trace("loader complete:" + evt.target._name);
break;
}
};
boxLdr.addEventListener("progress", ldrListener);
boxLdr.addEventListener("complete", ldrListener);
boxLdr.load("http://www.helpexamples.com/flash/images/image1.jpg");
Mensagens de erro A
O Macromedia Flash Basic 8 e o Macromedia Flash Professional 8 fornecem relatórios
avançados de erros durante a compilação quando você publica no ActionScript 2.0 (padrão).
A tabela a seguir contém uma lista das mensagens de erro que podem ser geradas pelo
compilador do Flash:
809
Número do Texto da mensagem
erro
1111 Não são permitidos corpos de funções em interfaces.
1129 Uma função com tipo de retorno Void não pode retornar um valor.
1130 A cláusula ‘extends’ deve vir antes da cláusula ‘implements’.
1133 Uma classe não pode estender mais do que uma classe.
1134 Uma interface não pode estender mais do que uma interface.
1141 O nome desta classe, ‘<A.B.C>’, está em conflito com o nome de outra classe
que estava carregada, ‘<A.B>’.
(Esse erro ocorre quando o compilador do ActionScript 2.0 não consegue
compilar uma classe porque o nome completo de uma classe existente é
parte do nome da classe em conflito. Por exemplo, a compilação da classe
mx.com.util gerará o erro 1141 se a classe mx.com for uma classe compilada.)
1151 Você deve exportar o filme como Flash 7 para usar esta expressão.
811
Número do Texto da mensagem
erro
1161 Não é possível excluir classes, interfaces e tipos internos.
1166 A classe em compilação, ‘<A.b>’, não coincide com a classe que foi importada,
‘<A.B>’.
(Esse erro ocorre quando um nome de classe utiliza maiúsculas e minúsculas
diferentes daquelas utilizadas em uma classe importada. Por exemplo, a
compilação da classe mx.com.util gerará o erro 1166 se a instrução import
mx.Com aparecer no arquivo util.as.)
1178 Não é possível usar funções e variáveis de instância para inicializar variáveis
estáticas.
1186 O Flash Player identificado no momento não oferece suporte à ação getURL.
1189 Não é possível importar a classe ‘<A.B>’ porque o nome da folha já está
resolvido para a classe que está sendo definida, ‘<C.B>’.
(Por exemplo, a compilação da classe util gerará o erro 1189 se a instrução
import mx.util aparecer no arquivo util.as.)
1190 Não é possível importar a classe ‘<A.B>’ porque o nome da folha já está
resolvido para uma classe previamente importada ‘<C.B>’.
(Por exemplo, a compilação de import jv.util gerará o erro 1190 se a
instrução import mx.util também aparecer no arquivo AS.)
1192 Funções de membros de classes não podem ter o mesmo nome de uma
função construtora de superclasse.
813
Número do Texto da mensagem
erro
1197 O caractere curinga ‘*’ foi usado de modo incorreto no nome da classe
‘<NomeDaClasse>’.
1204 Não foi encontrada nenhuma classe nem pacote com o nome '<nomePacote>'
no pacote '<NomePacote>'.
1205 O Flash Player identificado no momento não oferece suporte à ação
FSCommand2.
1210 O nome de pacote '<NomePacote>' não pode ser usado como nome de um
método.
1211 O nome de pacote '<NomePacote>' também não pode ser usado como nome
de uma propriedade.
1212 O arquivo ASO da classe '<NomeDaClasse>' não pôde ser criado. Certifique-
se de que o nome da classe totalmente qualificado seja suficientemente curto
para que o nome do arquivo ASO, '<NomeDaClasse.aso>', tenha menos de
255 caracteres.
1213 Esse tipo de aspas não é permitido no ActionScript. Altere-o para aspas
duplas (retas) padrão.
Operadores Flash 4
obsoletos
B
A tabela a seguir lista os operadores somente do Flash 4 que ficaram obsoletos no ActionScript
2.0. Não use esses operadores a menos que você esteja publicando no Flash Player 4 e anterior.
815
816 Operadores Flash 4 obsoletos
APÊNDICE C
Para obter mais informações sobre a classe Key, consulte %{Key}% em ActionScript 2.0
Language Reference. Para interceptar teclas ao testar um arquivo SWF no ambiente de criação
(Control [Controlar]> Test Movie [Testar filme]), certifique-se de selecionar Control >
Disable Keyboard Shortcuts (Desativar atalhos do teclado).
817
Letras de A a Z e números padrão de 0 a 9
A tabela a seguir lista as teclas de um teclado padrão, com as letras de A a Z e os números de
0 a 9, e os valores de códigos de teclas correspondentes usados para identificar as teclas
no ActionScript:
B 66 66
C 67 67
D 68 68
E 69 69
F 70 70
G 71 71
H 72 72
I 73 73
J 74 74
K 75 75
L 76 76
M 77 77
N 78 78
O 79 79
P 80 80
Q 81 81
R 82 82
S 83 83
T 84 84
U 85 85
V 86 86
W 87 87
X 88 88
Y 89 89
0 48 48
1 49 49
2 50 50
3 51 51
4 52 52
5 53 53
6 54 54
7 55 55
8 56 56
9 57 57
a 65 97
b 66 98
c 67 99
d 68 100
e 69 101
f 70 102
g 71 103
h 72 104
i 73 105
j 74 106
k 75 107
l 76 108
m 77 109
n 78 110
o 79 111
p 80 112
q 81 113
r 82 114
819
Tecla alfabética ou Código da tecla Código da tecla ASCII
numérica
s 83 115
t 84 116
u 85 117
v 86 118
w 87 119
x 88 120
y 89 121
z 90 122
1 do teclado numérico 97 49
2 do teclado numérico 98 50
3 do teclado numérico 99 51
Multiplicar 106 42
Somar 107 43
Enter 13 13
Subtrair 109 45
Dividir 111 47
Teclas de função
A tabela a seguir lista as teclas de função em um teclado padrão e os valores de códigos de
teclas correspondentes usados para identificar as teclas no ActionScript:
F3 114 0
F4 115 0
F5 116 0
F6 117 0
F7 118 0
F8 119 0
F9 120 0
F12 123 0
F13 124 0
F14 125 0
F15 126 0
821
Outras teclas
A tabela a seguir lista as teclas de um teclado padrão que não são letras, números, teclas do
teclado numérico nem teclas de função, e os valores de códigos de teclas correspondentes
usados para identificar as teclas no ActionScript:
Tab 9 9
Enter 13 13
Shift 16 0
Control 17 0
Caps Lock 20 0
Esc 27 27
Barra de espaços 32 32
Page Up 33 0
Page Down 34 0
End 35 0
Home 36 0
Seta para Esquerda 37 0
Insert 45 0
Delete 46 127
Num Lock 144 0
ScrLk 145 0
Pause/Break 19 0
;: 186 59
=+ 187 61
-_ 189 45
/? 191 47
`~ 192 96
\| 220 92
]} 221 93
"' 222 39
, 188 44
. 190 46
/ 191 47
Para obter valores de códigos de teclas e valores ASCII adicionais, use o ActionScript no início
deste apêndice e pressione a tecla desejada para obter o código da tecla.
823
824 Teclas do teclado e valores de códigos de teclas
APÊNDICE D
825
Usando o Flash 8 para criar conteúdo
para o Flash Player 4
Para usar o Flash 8 na criação de conteúdo para o Flash Player 4, especifique Flash Player 4 na
guia Flash da caixa de diálogo Publish Settings (File > Publish Settings).
O ActionScript do Flash Player 4 possui apenas um tipo de dados primitivo básico que é
usado para a manipulação de números e de seqüências de caracteres. Ao criar um aplicativo
para o Flash Player 4, utilize os operadores obsoletos de seqüência de caracteres localizados na
categoria Deprecated (Obsoletos) > Operators (Operadores) da caixa de ferramentas
do ActionScript.
É possível usar os seguintes recursos do Flash 8 nas publicações para Flash Player 4:
■ O operador de acesso de objetos e arrays ([])
■ O operador ponto (.)
■ Operadores lógicos, operadores de atribuição e operadores de pré-incremento e pós-
incremento/decremento.
■ O operador de módulo (%) e todos os métodos e propriedades da classe Math.
Os elementos de linguagem a seguir não têm suporte nativo do Flash Player 4. O Flash 8 os
exporta como aproximações de séries, criando resultados menos precisos numericamente.
Além disso, devido à inclusão de aproximações de séries no arquivo SWF, esses elementos de
linguagem precisam de mais espaço nos arquivos SWF do Flash Player 4 do que nos arquivos
SWF do Flash Player 5 ou versões posteriores.
■ As ações for, while, do while, break e continue
■ As ações print() e printAsBitmap()
■ A ação switch
Para obter informações adicionais, consulte “Sobre a especificação de versões anteriores do
Flash Player” na página 825.
Para escrever o mesmo caminho de destino em sintaxe de ponto, que é suportada pelo Flash
Player 5 e versões posteriores, use esta sintaxe:
myMovieClip.childMovieClip.myVariable
A sintaxe de barra era mais utilizada com a ação tellTarget, cujo uso também não é mais
recomendado. A ação with agora é mais usada por ser mais compatível com a sintaxe de
ponto. Para obter mais informações, consulte %{função tellTarget}% e %{instrução
with}% em ActionScript 2.0 Language Reference.
Programação orientada a
objeto com o ActionScript 1.0
E
As informações deste apêndice vêm da documentação do Macromedia Flash MX e explicam
como usar o modelo de objetos do ActionScript 1.0 para criar scripts. Elas foram incluídas
aqui pelos seguintes motivos:
■ Se você deseja criar scripts orientados a objeto com suporte para Flash Player 5, use
o ActionScript 1.0.
■ Se você já usa o ActionScript 1.0 para criar scripts orientados a objeto e não está pronto
para migrar para o ActionScript 2.0, use este apêndice para localizar ou verificar as
informações necessárias durante a criação de scripts.
Se você nunca usou o ActionScript para criar scripts orientados a objeto e não precisa ter
como alvo o Flash Player 5, não use as informações deste apêndice, pois a criação de scripts
orientados a objeto com o ActionScript 1.0 está obsoleta. Em vez disso, para obter
informações sobre como usar o ActionScript 2.0, consulte Capítulo 7, “Classes”, na
página 239.
Este capítulo contém as seguintes seções:
Sobre o ActionScript 1.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Criando um objeto personalizado no ActionScript 1.0. . . . . . . . . . . . . . . . . . . . . . . . 831
Atribuindo métodos a um objeto personalizado no ActionScript 1.0 . . . . . . . . . . .832
Definindo métodos manipuladores de eventos no ActionScript 1.0 . . . . . . . . . . . .834
Criando herança no ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .836
Adicionando propriedades getter/setter a objetos no ActionScript 1.0 . . . . . . . . . 837
Usando as propriedades do objeto Function no ActionScript 1.0 . . . . . . . . . . . . . .838
N OT A
829
Sobre o ActionScript 1.0
N OT A
Vários usuários do Flash podem obter grandes benefícios utilizando o ActionScript 2.0,
especialmente com aplicativos complexos. Para obter informações sobre como usar o
ActionScript 2.0, consulte Capítulo 7, “Classes”, na página 239.
Para definir uma classe, crie uma função especial denominada função construtora. (Classes
internas têm funções construtoras internas.) Por exemplo, se você quiser informações sobre
um ciclista no aplicativo, poderá criar uma função construtora, Biker(), com as propriedades
time e distance e o método getSpeed(), que informa a velocidade do ciclista:
function Biker(t, d) {
this.time = t;
this.distance = d;
this.getSpeed = function() {return this.time / this.distance;};
}
Vários usuários do Flash podem obter grandes benefícios utilizando o ActionScript 2.0,
especialmente com aplicativos complexos. Para obter informações sobre como usar o
ActionScript 2.0, consulte Capítulo 7, “Classes”, na página 239.
Depois de definir a função construtora, crie uma instância do objeto. Use o operador new
antes do nome da função construtora e atribua um nome de variável à nova instância. Por
exemplo, o código a seguir usa o operador new para criar um objeto Circle com um raio de 5 e
atribui-lo à variável myCircle:
myCircle = new Circle(5);
NO TA
Vários usuários do Flash podem obter grandes benefícios utilizando o ActionScript 2.0,
especialmente com aplicativos complexos. Para obter informações sobre como usar o
ActionScript 2.0, consulte Capítulo 7, “Classes”, na página 239.
Toda função construtora tem uma propriedade prototype, criada automaticamente quando a
função é definida. A propriedade prototype indica os valores de propriedade padrão para
objetos criados com essa função. Cada nova instância de um objeto tem uma propriedade
__proto__ que faz referência à propriedade prototype da função construtora que a criou.
Portanto, se você atribuir métodos à propriedade prototype de um objeto, eles ficarão
disponíveis para qualquer instância recém-criada desse objeto. É recomendável atribuir um
método à propriedade prototype da função construtora porque ela existe em um local e serve
de referência para novas instâncias do objeto (ou classe). Você pode usar as propriedades
prototype e __proto__ para estender objetos para que o código possa ser reutilizado de uma
forma orientada a objeto. Para obter mais informações, consulte “Criando herança no
ActionScript 1.0” na página 836.
O procedimento a seguir mostra como atribuir um método getArea() a um objeto Circle
personalizado.
Vários usuários do Flash podem obter grandes benefícios utilizando o ActionScript 2.0,
especialmente com aplicativos complexos. Para obter informações sobre como usar o
ActionScript 2.0, consulte Capítulo 7, “Classes”, na página 239.
Você pode criar uma classe do ActionScript para clipes de filme e definir os métodos
manipuladores de eventos no objeto protótipo dessa nova classe. Definir os métodos no
protótipo objeto faz todas as instâncias desse símbolo responderem da mesma forma a esses
eventos.
Você também pode adicionar métodos manipuladores de eventos onClipEvent() ou on() a
uma instância individual para fornecer instruções exclusivas que são executadas apenas
quando o evento da instância ocorre. Os métodos onClipEvent() e on() não substituem o
método manipulador de evento. Os dois eventos fazem com que seus scripts sejam executados.
No entanto, se definir os métodos manipuladores de eventos no objeto protótipo e também
definir um método manipulador de evento para uma instância específica, a definição da
instância substituirá a definição do protótipo.
Essa nova classe é atribuída a todas as instâncias de clipe de filme adicionadas ao aplicativo
pela linha de tempo ou pelos métodos attachMovie() ou duplicateMovieClip(). Para
que esses clipes de filme tenham acesso aos métodos e propriedades do objeto MovieClip
interno, faça com que a nova classe herde tudo da classe MovieClip.
3. Insira códigos como no seguinte exemplo:
// herda da classe MovieClip
myClipClass.prototype = new MovieClip();
5. Selecione Window > Library (Biblioteca) para abrir o painel Library se ele ainda não estiver
aberto.
6. Selecione os símbolos que deseja associar à nova classe e escolha Linkage (Vinculação) no
menu pop-up Library.
7. Na caixa de diálogo Linkage Properties (Propriedades de vinculação), selecione Export for
ActionScript (Exportar para ActionScript).
8. Insira um identificador de vinculação na caixa Identifier (Identificador).
O identificador de vinculação deve ser o mesmo para todos os símbolos que deseja associar
à nova classe. No exemplo do myClipClass, o identificador é theID.
9. Insira o código no painel Actions (Ações), como no seguinte exemplo:
// registra classe
Object.registerClass("theID", myClipClass);
this.attachMovie("theID","myName",1);
Esta etapa registra o símbolo cujo identificador de vinculação é theID com a classe
myClipClass . Todas as instâncias de myClipClass possuem métodos manipuladores de
eventos que se comportam como foram definidos na etapa 4. Eles também se comportam
como todas as instâncias da classe MovieClip, já que a nova classe foi definida para herdar
tudo da classe MovieClip na etapa 3.
O código completo é mostrado no seguinte exemplo:
function myClipClass(){}
myClipClass.prototype.onEnterFrame = function(){
trace("movie clip entered frame");
}
myClipClass.prototype.myfunction = function(){
trace("myfunction called");
}
Vários usuários do Flash podem obter grandes benefícios utilizando o ActionScript 2.0,
especialmente com aplicativos complexos. Para obter informações sobre como usar o
ActionScript 2.0, consulte Capítulo 7, “Classes”, na página 239.
Os clipes de filme não herdam uns dos outros. Para criar herança com clipes de filme, use
Object.registerClass() para atribuir a clipes de filme uma classe diferente de MovieClip.
Vários usuários do Flash podem obter grandes benefícios utilizando o ActionScript 2.0,
especialmente com aplicativos complexos. Para obter informações sobre como usar o
ActionScript 2.0, consulte Capítulo 7, “Classes”, na página 239.
Vários usuários do Flash podem obter grandes benefícios utilizando o ActionScript 2.0,
especialmente com aplicativos complexos. Para obter informações sobre como usar o
ActionScript 2.0, consulte Capítulo 7, “Classes”, na página 239.
Você pode especificar o objeto ao qual a função é aplicada e os valores dos parâmetros passados
para a função usando os métodos call() e apply() do objeto Function. Toda função em
ActionScript é representada por um objeto Function para que todas as funções ofereçam
suporte a call() e apply(). Quando você cria uma classe personalizada usando uma função
construtora ou quando define métodos para uma classe personalizada usando uma função,
pode chamar call() e apply() para a função.
Vários usuários do Flash podem obter grandes benefícios utilizando o ActionScript 2.0,
especialmente com aplicativos complexos. Para obter informações sobre como usar o
ActionScript 2.0, consulte Capítulo 7, “Classes”, na página 239.
Em algumas situações, é possível que você queira que this aponte para algum outro lugar,
como no caso, por exemplo, de ser necessário chamar uma função como um método de um
objeto, mas ela não estiver realmente armazenada como um método desse objeto, como
indicado a seguir:
myObject.myMethod.call(myOtherObject, 1, 2, 3);
Você pode passar o valor null para o parâmetro esteObjeto para chamar uma função como
uma função regular e não como um método de um objeto. Por exemplo, as seguintes
chamadas de função são equivalentes:
Math.sin(Math.PI / 4)
Math.sin.call(null, Math.PI / 4)
Vários usuários do Flash podem obter grandes benefícios utilizando o ActionScript 2.0,
especialmente com aplicativos complexos. Para obter informações sobre como usar o
ActionScript 2.0, consulte Capítulo 7, “Classes”, na página 239.
O método Function.apply() especifica o valor de this para ser usado em qualquer função
chamada pelo ActionScript. Esse método também especifica os parâmetros a serem passados a
qualquer função chamada.
Terminologia F
Como em todas as linguagens de script, o ActionScript usa sua própria terminologia. O
Macromedia Flash também utiliza uma terminologia exclusiva. A lista apresentada a seguir
fornece uma introdução aos termos importantes do ActionScript e aos termos do Flash
referentes à programação com o ActionScript e que são exclusivos para trabalhar no ambiente
de criação do Flash.
Editor do ActionScript é o editor de código no painel Actions e na janela Script O editor do
ActionScript é formado por vários recursos, como a formatação automática, mostrando
caracteres ocultos e codificando com cores partes dos scripts. (Consulte também: janela Script,
painel Actions).
Painel Actions (Ações) é um painel no ambiente de criação do Flash, onde você escreve o
código do ActionScript.
Função anônima é uma função sem nome que faz referência a si própria; você faz referência à
função anônima ao criá-la. Para obter informações e um exemplo, consulte “Criando funções
anônimas e de retorno de chamada” na página 220.
Serrilhado refere-se ao texto serrilhado que não utiliza variações de cor para suavizar as bordas
dentadas, ao contrário do texto sem serrilhado (consulte também Sem serrilhado).
Sem serrilhado refere-se aos caracteres sem serrilhado quando é preciso suavizar o texto, a fim
de que as bordas dos caracteres exibidos na tela pareçam menos dentadas. A opção Anti-
Aliasing (Eliminação de serrilhado) no Flash torna o texto mais legível ao alinhar os contornos
do texto nas fronteiras dos pixels e é eficiente para renderizar fontes menores com nitidez.
Arrays são objetos cujas propriedades são identificadas por números que representam suas
posições na estrutura. Basicamente, um array é uma lista de itens.
Ambiente de criação é a área de trabalho do Flash, incluindo todos os elementos da interface
de usuário. Você cria arquivos FLA ou arquivos de script (na janela Script) usando o ambiente
de criação.
841
Gráficos de bitmap(ou gráficos de varredura) geralmente são imagens foto-realísticas ou
gráficos com um grande volume de detalhes. Cada pixel (ou bit) da imagem contém dados, e
juntos esses bits formam a imagem propriamente dita. Os bitmaps podem ser salvos nos
formatos de arquivo JPEG, BMP ou GIF. Um outro tipo de gráfico, diferente do bitmap, é o
vetorial.
Booleano é um valor true (verdadeiro) ou false (falso).
Armazenamento em cache refere-se a informações reutilizadas no aplicativo ou armazenadas
no computador de modo que possam ser reutilizadas. Por exemplo, se você fizer o download
de uma imagem da Internet, ela será armazenada em cache, de modo que seja possível exibi-la
novamente sem fazer o download dos dados da imagem.
Funções de retorno de chamada são funções anônimas associadas a um determinado
evento. Uma função chama uma função de retorno de chamada quando ocorre um evento
específico, como, por exemplo, após um carregamento (onLoad()) ou uma animação
(onMotionFinished()). Para obter mais informações e exemplos, consulte “Criando funções
anônimas e de retorno de chamada” na página 220.
Caracteres são letras, numerais e pontuação combinados para formar seqüências de
caracteres. Às vezes são chamados glifos.
Classes são tipos de dados que podem ser criados para definir um novo tipo de objeto. Para
definir uma classe, use a palavra-chave class em um arquivo de script externo, e não em um
script escrito no painel Actions (Ações).
Caminho de classe refere-se à lista de pastas na qual o Flash pesquisa definições de classe ou
de interface. Quando você cria um arquivo de classe, precisa salvar o arquivo em um dos
diretórios especificados no caminho de classe ou em um subdiretório dentro dele. Os
caminhos de classe existem no nível global, do aplicativo e do documento.
Constantes são elementos que não se alteram. Por exemplo, a constante Key.TAB sempre tem
o mesmo significado: ela indica a tecla Tab em um teclado. Constantes são úteis para
comparar valores.
Funções construtoras (ou construtores) são funções utilizadas para definir (inicializar) as
propriedades e os métodos de uma classe. Por definição, construtores são funções em uma
definição de classe que têm o mesmo nome da classe. Por exemplo, o código abaixo define
uma classe Circle (Círculo) e implementa uma função construtora:
842 Terminologia
// arquivo Circle.as
class Circle {
private var circumference:Number;
// construtor
function Circle(radius:Number){
this.circumference = 2 * Math.PI * radius;
}
}
O termo construtor também é usado quando você cria (instancia) um objeto com base em uma
classe específica. As instruções a seguir são chamadas das funções construtoras relativas à classe
Array interna e à classe Circle (Círculo) personalizada:
var my_array:Array = new Array();
var my_circle:Circle = new Circle(9);
843
Manipuladores de eventos são eventos especiais gerados quando o usuário clica com o
mouse ou quando os dados terminam de ser carregados. Existem dois tipos de manipuladores
de eventos do ActionScript: métodos manipuladores de eventos e ouvintes de eventos.
(Existem também dois manipuladores de eventos, %{on handler}% e %{onClipEvent
handler}%, que você pode atribuir diretamente a botões e clipes de filme.) Na caixa de
ferramentas Actions, cada objeto do ActionScript com métodos manipuladores de eventos ou
ouvintes de eventos tem uma subcategoria chamada Events (Eventos) ou Listeners (Ouvintes).
Alguns comandos podem ser usados como manipuladores de eventos e como ouvintes de
eventos e são incluídos nas duas subcategorias. Para obter mais informações sobre
gerenciamento de eventos, consulte “Manipulando eventos” na página 347.
Expressões são combinações legais de símbolos do ActionScript que representam um valor.
Uma expressão consiste em operadores e operandos. Por exemplo, na expressão x + 2, x e 2
são operandos e + é um operador.
Recipiente do Flash Player refere-se ao sistema que contém o aplicativo do Flash, como o
aplicativo desktop ou navegador. É possível adicionar o ActionScript e o JavaScript para
facilitar a comunicação entre o recipiente do Flash Player e o arquivo do SWF.
FlashType refere-se à tecnologia avançada de renderização de fontes do Flash 8. Por exemplo,
Alias Text for Readability (Texto serrilhado para legibilidade) utiliza a tecnologia de
renderização FlashType, o mesmo não ocorrendo com Alias Text for Animation (Texto
serrilhado para animação). Para obter informações, consulte“Sobre a renderização de fontes e
texto sem serrilhado” na página 430.
Scrips de quadros são blocos de código adicionados a um quadro em uma linha de tempo.
Funções são blocos de código reutilizáveis que podem receber parâmetros e retornar um
valor. “Sobre funções e métodos” na página 213Para obter mais informações, consulte .
Literais de função são funções sem nome declaradas em uma expressão em vez de em uma
instrução. Os literais são úteis quando é necessário usar uma função temporariamente ou usar
uma função no código no lugar de uma expressão.
IDE refere-se a um "ambiente de desenvolvimento integrado", que é um aplicativo no qual um
desenvolvedor pode codificar, testar e depurar aplicativos em um ambiente interativo. A
ferramenta de criação do Flash é algumas vezes chamada IDE.
Identificadores são nomes usados para indicar uma variável, uma propriedade, um objeto,
uma função ou um método. O primeiro caractere deve ser uma letra, um sublinhado (_) ou
um cifrão ($). Cada caractere seguinte deve ser uma letra, um número, um sublinhado ou um
cifrão. Por exemplo, firstName é o nome de uma variável.
844 Terminologia
Instâncias são objetos que contêm todas as propriedades e métodos de determinada classe.
Por exemplo, todos os arrays são instâncias da classe Array; portanto, você pode usar quaisquer
métodos ou propriedades dessa classe com qualquer instância de um array.
Nomes de instâncias são nomes exclusivos que permitem fazer referência a instâncias que
você criou ou instâncias de clipes de filme e de botões no Stage (Palco). Por exemplo, no
código a seguir, "names" e “studentName” são nomes de instâncias de dois objetos, um array e
uma seqüência de caracteres:
var names:Array = new Array();
var studentName:String = new String();
Use o inspetor Properties (Propriedades) para atribuir nome a instâncias no Stage (Palco). Por
exemplo, um símbolo principal na biblioteca pode ser chamado de counter, e as duas
instâncias desse símbolo no arquivo SWF podem ter os nomes de
instânciasscorePlayer1_mc e scorePlayer2_mc. O código a seguir define uma variável
chamada score dentro de cada instância de clipe de filme por meio de nomes de instâncias:
this.scorePlayer1_mc.score = 0;
this.scorePlayer2_mc.score = 0;
Você pode usar atribuição estrita de tipos de dados ao criar instâncias para que referências de
código apareçam à medida que você digita o código.
Palavras-chave são palavras reservadas que têm significado especial. Por exemplo, var é uma
palavra-chave usada para declarar variáveis locais. Não é possível usar uma palavra-chave como
um identificador. Por exemplo, var não é um nome de variável legal. Para obter uma lista de
palavras-chave, consulte “Sobre palavras-chave” na página 146 e “Sobre palavras reservadas”
na página 147.
Literais representam valores que possuem um tipo específico, como literais numéricos ou
literais de seqüências de caracteres. Os literais não são armazenados em uma variável. Um
literal é um valor que aparece diretamente no código e é um valor constante (inalterável)
dentro dos documentos do Flash. Consulte também literal de função e literal de seqüência de
caracteres.
Métodos são funções associadas a uma classe. Por exemplo, sortOn() é um método interno
associado à classe Array. Você também pode criar funções que funcionem como métodos, para
objetos com base em classes internas ou objetos com base nas classes criadas por você. Por
exemplo, no código abaixo, clear() torna-se um método de um objeto controller já
definido:
function reset(){
this.x_pos = 0;
this.y_pos = 0;
}
845
controller.clear = reset;
controller.clear();
Função com nome é um tipo de função criada geralmente no código do ActionScript para
executar todos os tipos de ações. Para obter informações e um exemplo, consulte “Criando
funções com nome” na página 219.
Código de objeto é a linguagem ActionScript anexada a instâncias. Para adicionar código de
objeto, selecione uma instância no Stage (Palco) e depois crie o código no painel Actions
(Ações). Não é recomendável anexar código a objetos no Stage. Para obter informações sobre
as melhores práticas, consulte “Melhores práticas e convenções de codificação para
ActionScript 2.0” na página 767.
Objetos são coleções de propriedades e métodos; cada objeto tem seu próprio nome e é uma
instância de uma classe específica. Objetos internos são predefinidos na linguagem
ActionScript. Por exemplo, a classe interna Date fornece informações sobre o relógio do
sistema.
Operadores são termos que calculam um novo valor de um ou mais valores. Por exemplo, o
operador de adição (+) soma dois ou mais valores para produzir um novo valor. Os valores
manipulados pelos operadores são denominados operandos.
Parâmetros (também denominados argumentos) são espaços reservados que permitem passar
valores para funções. Por exemplo, a função welcome() a seguir usa os dois valores que recebe
nos parâmetros firstName e hobby:
function welcome(firstName:String, hobby:String):String {
var welcomeText:String = "Hello, " + firstName + ". I see you enjoy " +
hobby +".";
return welcomeText;
}
Pacotes são diretórios que contêm um ou mais arquivos de classes e residem em um diretório
específico do caminho da classe (consulte “Sobre pacotes” na página 242).
846 Terminologia
Scripts presos permitem prender vários scripts de vários objetos e trabalhar simultaneamente
com eles no painel Actions (Ações). Esse recurso funciona melhor com o navegador Script.
Imagens JPEG progressivas são gradualmente construídas e exibidas durante o download a
partir de um servidor. Uma imagem JPEG normal é exibida linha por linha enquanto é feito o
download a partir de um servidor.
Propriedades são atributos que definem um objeto. Por exemplo, length é uma propriedade
de todos os arrays que especifica o número de elementos do array.
Sinais de pontuação são caracteres especiais que ajudam a formar o código do ActionScript.
Há vários sinais de pontuação de linguagem no Flash. Os tipos mais comuns de sinais de
pontuação são ponto-e-vírgula (;), dois-pontos (:), parênteses [()] e chaves ({}). Cada um
desses sinais de pontuação tem um significado especial na linguagem do Flash e ajuda a definir
tipos de dados, concluir instruções ou estruturar o ActionScript.
Script Assist é um novo modo assistido no painel Actions (Ações). O Script Assist facilita a
criação de scripts sem necessidade de conhecimento detalhado de ActionScript. Ele ajuda a
criar scripts por meio da seleção de itens da caixa de ferramentas Actions no painel Actions e
fornece uma interface com campos de texto, botões de opção e caixas de seleção para as
variáveis corretas e outros elementos de linguagem de script. Esse recurso é semelhante ao
modo normal de edições anteriores da ferramenta de criação do Flash.
Painel Script é um painel do painel Actions (Ações) ou da janela Script, e é o local onde é
digitado o código do ActionScript.
Janela Script é um ambiente de edição de códigos onde é possível criar e modificar scripts
externos, como arquivos Flash JavaScript ou ActionScript. Por exemplo, selecione File
(Arquivo) > New (Novo) e selecione ActionScript File (Arquivo do ActionScript) para usar a
janela Script para criar um arquivo de classe.
Instruções são elementos de linguagem que executam ou especificam uma ação. Por exemplo,
a instrução return retorna um resultado como um valor da função na qual é executada. A
instrução if avalia uma condição para determinar a próxima ação que deve ser executada. A
instrução switch cria uma estrutura ramificada para as instruções do ActionScript.
String é um tipo de dados. Consulte “Sobre seqüências de caracteres e a classe String”
na página 477 para obter mais informações.
Literal de seqüência de caracteres é uma seqüência de caracteres delimitados por aspas
retas. Os próprios caracteres são um valor de dados, e não uma referência aos dados. Um literal
de seqüência de caracteres não é um objeto String (Seqüência de caracteres). Para obter mais
informações, consulte “Sobre seqüências de caracteres e a classe String” na página 477.
847
Superfície é um clipe de filme, cujo sinalizador de cache de bitmap está ativo. Para obter
informações sobre cache de bitmap, consulte “Armazenando um clipe de filme em cache”
na página 393.
Sintaxe refere-se à gramática e à ortografia da linguagem de programação utilizada. O
compilador não compreende sintaxe incorreta; portanto, você verá erros ou avisos exibidos no
painel Output (Saída) ao tentar testar o documento no ambiente de teste. Assim, a sintaxe é
uma coleção de regras e diretrizes que ajudam a formar uma linguagem ActionScript correta.
Caminhos de destino são endereços hierárquicos de nomes de instâncias de clipes de filme,
variáveis e objetos em um arquivo SWF. Você pode dar um nome a uma instância de clipe de
filme no inspetor Properties (Propriedades) do clipe de filme. (A linha de tempo principal
sempre tem o nome _root.) Você pode usar um caminho de destino para direcionar uma ação
em um clipe de filme, ou para obter ou definir o valor de uma variável ou propriedade. Por
exemplo, a seguinte instrução é o caminho de destino da propriedade volume do objeto
chamado stereoControl:
stereoControl.volume
Texto equivale a uma ou mais seqüências de caracteres que podem ser exibidas em um campo
de texto ou dentro de um componente de interface de usuário.
Campos de texto são elementos visuais do Stage (Palco) que permitem exibir o texto para um
usuário e que podem ser criados usando a ferramenta Text (Texto) ou usando o código do
ActionScript. O Flash permite definir campos de texto como editáveis (somente leitura),
formatar como HTML, ativar suporte com várias linhas, mascarar senhas ou aplicar uma folha
de estilos CSS ao texto formatado como HTML.
Formatação de texto pode ser aplicada a um campo de texto ou a determinados caracteres
dentro de um campo de texto. Alguns exemplos de opções de formatação de texto que podem
ser aplicadas ao texto são: alinhamento, recuos, negrito, cor, tamanho de fonte, larguras de
margens, itálicos e espaçamento entre letras.
Funções de alto nível são aquelas que não pertencem a nenhuma classe (algumas vezes
chamadas de funções predefinidas ou internas), o que significa que podem ser chamadas sem
um construtor. Exemplos de funções “internas” da linguagem ActionScript de alto nível são
trace() e setInterval();.
Funções definidas pelo usuário são aquelas criadas para serem usadas em aplicativos, em
contraposição às funções de classes internas que executam funções predefinidas. Você mesmo
atribui um nome às funções e adiciona instruções ao bloco de função.
848 Terminologia
Variáveis são identificadores que contêm valores de qualquer tipo de dados. É possível criar,
alterar e atualizar variáveis. Os valores que elas armazenam podem ser recuperados para uso
em scripts. No exemplo a seguir, os identificadores no lado esquerdo do sinal de igual
são variáveis:
var x:Number = 5;
var name:String = "Lolo";
var c_color:Color = new Color(mcinstanceName);
Para obter mais informações sobre variáveis, consulte “Sobre variáveis” na página 91.
Gráficos vetoriais descrevem as imagens através de linhas e curvas, denominadas vetores, que
também incluem propriedades de cor e posição. Cada vetor utiliza cálculos matemáticos, em
vez de bits, para descrever a forma, o que permite seu dimensionamento sem deterioração da
qualidade. Um outro tipo de gráfico é o bitmap, representado por pontos ou pixels.
849
850 Terminologia
Índice
851
e estilos de linha 574 arquivos, carregando 674
linhas e preenchimentos 606 arrastando clipes de filme 377
preenchimentos de gradiente complexos 573 array associativo, sobre 181
sobre 567 array indexado 173, 178
API do aplicativo de desenho arrays
barra de progresso 666 adicionando e removendo elementos 177
usando 666 analogia 172
API External array associativo 182
sobre 696 array associativo usando o construtor Array 184
usando 697 array associativo usando Object 183
aplicativos da Web, conexão contínua 690 associativos 181
argumentos atribuindo valores a 95
Consulte parâmetros criando 95
definição 846 e classe Object 185
em funções com nome 220 e método sortOn() 235
armazenamento de bitmap em cache elementos de 172
armazenando um clipe de filme em cache 393 exemplos de 172, 174
ativando 389 indexado 178
definida 390 iterando uma matriz 180
e máscaras de canal alfa 398 matriz 179
opaqueBackground, propriedade 390 modificando 172, 175
quando evitar 393 para criar objeto 115
quando usar 392 passar por referência 100
scrollRect 390 referência e localização de tamanho 176
sobre 389 sintaxe abreviada 172
superfícies 389 sobre 172
vantagens e desvantagens 391 usando 173
arquitetura baseada em componentes, definida 369 usando a sintaxe abreviada para criar 95
arquivo de classe ASCII, definição 477
diretrizes para organização 788 ASCII, valores 596
estruturando 788 outras teclas 822
arquivos ASO 298 teclas de função 821
excluindo 299 teclas do teclado 818
usando 298 teclas do teclado numérico 820
arquivos de classe externa aspas, em seqüências de caracteres 84
usando os caminhos de classe para localizar 255 associatividade de operadores 188
arquivos de configuração 69 associatividade e precedência de operadores 188
arquivos de diretivas atenuação
definida 736 com código 518
devem receber o nome crossdomain.xml 737 definindo 510
Consulte também segurança sobre 516
arquivos de exemplo, sobre 15 ativar a depuração remota 749
arquivos do Flash 4, abrindo com o Flash 8 826 atribuição de nome, convenções 769
arquivos FLV atribuição estrita de tipos de dados 91
Consulte tambémvídeo atribuição forte de tipos de dados 86, 91
arquivos SWF carregados atribuindo nomes a classes e objetos, melhores práticas
identificando 129 776
removendo 373 atribuindo nomes a interfaces, melhores práticas 778
arquivos XML, atualizando para instalação do Flash 8 atribuindo nomes a pacotes, melhores práticas 777
10
852 Índice
B campo de distância de exemplo de forma adaptável
(ADF) 433
balanço (som), controlando 603 campos de distância de exemplo de forma adaptável
barra de progresso 436
criando com código 654 campos de texto
e API de desenho 666 alterando dimensões 413
para o carregamento de dados 666 alterando posição 412
bitmap aplicando cascading style sheets 452
gráficos 842 carregando texto 415
texto 432 carregando variáveis em 415
BitmapData, classe controlando mídia incorporada 473
aplicando filtros a 532 criando dinamicamente durante a execução 408,
com filtro de mapa de deslocamento 563 410
efeito de ruído 562 definição 848
sobre 561 definindo a espessura 427
usando 562 dynamic 405
Boolean e texto HTML 454
tipo de dados 79 especificando dimensões de imagem 473
booleano evitando conflitos de nome de variável 410
valores 842 exibindo propriedades para depuração 763
Bounce, classe de atenuação 516 fazendo o texto fluir em torno de imagens
incorporadas 461, 465
formatação 444
C formatando com cascading style sheets 447
cache de bitmap HTML, formatação 408
e filtros 530 incorporando arquivos SWF ou de imagem 470
sobre 508 incorporando clipes de filme em 471
cache, definição 842 incorporando imagens clicáveis em 474
cacheAsBitmap, propriedade 390 manipulando 411
caixa de ferramentas Actions (Ações), itens em amarelo nomes de instâncias 409
na 54 nomes de instâncias e de variáveis comparados 409
caixa de mensagem, exibindo 694 preenchendo com texto externo 417
caminho de classe propriedades padrão 446
definida 255 sobre 405
excluir diretório de 257 Consulte tambémTextField, classe; TextFormat,
global 257 classe; e TextField.StyleSheet, classe
modificando 68 capturando pressionamentos de teclas 596
nível de documento 257 caractere de alimentação de formulário 487
pesquisar ordem de 258 caractere de aspas duplas 487
sobre 68, 74 caractere de aspas duplas, em seqüências de caracteres
caminho de destino 486
definição 848 caractere de aspas simples 487
e instâncias aninhadas 127 caractere de aspas simples, em seqüências de caracteres
e referenciando uma instância 126 486
e sintaxe de ponto 125 caractere de barra invertida 487
inserindo 65, 131 caractere de escape 487
usando 225 caractere de nova linha (newline) 487
usando o botão 131 caractere de tabulação 487
caminhos relativos 130 caracteres
adicionando e removendo incorporados 420
Índice 853
definição 842 atribuindo a clipes de filme 399
caracteres especiais 84 atribuindo a uma instância no Flash 295
caracteres incorporados atribuindo um escopo 787
adicionando e removendo 420 caminhos de classe 255
usando com campos de texto 421 chamada de métodos de objetos internos 314
carregamento classes flash.display 308
exibindo arquivos XML 419 classes flash.external 309
mídia externa 620 classes flash.filters 309
carregando dados classes flash.geom 310
do servidor 110 classes flash.net 311
variáveis 111 classes flash.text 311
cascading style sheets classes mx.lang 311
aplicando a campos de texto 452 classes System e TextField 312
aplicando classes de estilo 454 como plantas arquitetônicas 243
atribuindo estilos a marcas HTML internas 454 como tipos de dados 240
carregamento 450 comparadas a interfaces 332
combinando estilos 453 compilador resolvendo referências 258
definindo estilos no ActionScript 451 compilando e exportando 296
e a classe TextField.StyleSheet 449 controlando o acesso de membros 288
exemplo com marcas HTML 455 criando dinâmicas 274
exemplo com marcas XML 458 criando e empacotando 281
formatando texto com 447 criando métodos e propriedades 285
propriedades suportadas 448 criando personalizadas 249
usando para definir novas marcas 458 criando um arquivo de classes 259
chamando métodos 80 criando um exemplo personalizado 278
Character Embedding (Incorporação de caracteres), criando uma instância de 294
caixa de diálogo criando uma nova instância de classe interna 313
usando 425 criando uma subclasse 322
chaves, verificando pares correspondentes 59 definida 313
classe BitmapData documentação 290
usando 631 e arquivos ASO 298
classe ExternalInterface e escopo 277, 299
sobre 696 e funções construtoras 283
usando 697 e herança 319
classe FileReference e polimorfismo 327
criando um aplicativo 676 e variáveis de instância 288
e método download() 675 em comparação com pacotes 243
e segurança 675 encapsulamento 276
sobre 674 excluindo classes internas 315
Classe LoadVars exemplo de herança 322
usando 670 importando 254
verificando o status HTTP 672 importando e empacotando 292
Classe NetStream inicializando propriedades durante a execução 401
e manipulador onMetaData 650 instanciamento 240
classe NetStream internas e de nível superior 302
usando o manipulador onMetaData 650 melhores práticas para criação 279
classe XML, métodos 684 membros de classe 265
classes membros estáticos de classes internas 315
acessando propriedades internas 313 métodos e propriedades 260
atribuição de nome a arquivos de classe 280 métodos getter/setter 270
854 Índice
nível superior 304 _root, propriedade 374
organizando em pacotes 242 efeitos de fade com código 500
pré-carregando 316 excluindo 381
propriedades de 262 executando repetição em filhos 164
propriedades e métodos estáticos 264 filho, definido 369
propriedades e métodos privados 263 funções 371
propriedades e métodos públicos, privados e gerenciando profundidade 385
estáticos 262 incorporando em campos de texto 470
resolvendo referências de classe 258 inicializando propriedades durante a execução 401
sobre internas 241 iniciando e parando 591
substituindo métodos e propriedades 324 listando objetos 761
superclasse 321 listando variáveis 762
trabalhando com internas 312 métodos e funções comparadas 370
trabalhando com personalizadas 252 métodos, listados 371
usando classes personalizadas no Flash 291 métodos, usando para desenhar formas 567
usando métodos getter/setter 271 nome de instância definida 369
vantagem de usar 241 pai, definido 369
Consulte também classes internas propriedade filtros 550
classes dinâmicas 274 propriedades 376
clipes de filme propriedades, inicializando durante a execução 401
adicionando parâmetros 383 removendo 381
ajustando cor 599 tipo de dados 80
alterando cor e brilho 502 usando como máscaras 397
alterando propriedades durante a reprodução 376 Consulte também SWF, arquivos
alterando propriedades no Debugger 753 clipes de filme aninhados definidos 369
anexando a símbolo no Stage (Palco) 381 clipes de filme pai 369
anexando manipuladores on() e onClipEvent() 356 clone(), método
aninhados definidos 369 sobre 560
aplicar filtro de brilho 526 usando 561
arrastando 377 codificação de caracteres 477
ativando com teclado 598 codificando texto 61
atribuindo estados de botão a 361 código
atribuindo uma classe personalizada a 295 etapas, copiando e colando 13
background 396 exibindo números de linha 55, 56
carregando arquivos MP3 em 626 formatação 53, 54
carregando arquivos SWF e JPEG em 621 percorrendo as linhas 757
chamando métodos 371 quebra automática de linha 55, 56
chamando vários métodos 372 selecionando uma linha 755
compartilhando 381 código de objeto, definição 846
controlando 370 códigos de teclas ASCII
criadas dinamicamente, referenciando 128 obtendo 596
criando durante a execução 378 outras teclas 822
criando subclasses 399 teclado numérico 820
criando uma instância vazia 379 teclas alfabéticas e numéricas 818
detectando colisões 604 teclas de função 821
determinando profundidade de 387 coleta de lixo 791
determinando próxima profundidade disponível colisões, detectando 604
386 entre clipes de filme 605
duplicando 381 entre um clipe de filme e um ponto no Stage (Palco)
e instrução with 372 604
Índice 855
com instrução 794 sobre 143
comentários usando 144
dentro de classes 142 contadores, repetindo ação com 162, 163
desordenados 139 contornos de fontes 436
e sinalização da sintaxe por cores 140 controles do teclado
em arquivos de classe 290 e Test Movie 746
escrevendo em arquivos de classe 781 para ativar clipes de filmes 598
finais 142 convenções de atribuição de nome 769
linha única 140 Booleanas 775
melhores práticas 780 classes e objetos 776
sobre 139 funções e métodos 775
várias linhas 140 interfaces 778
comparação, operadores 200 pacotes 242, 777
compartilhando fontes variáveis 51, 772
sobre 429 convenções de codificação
componente FLVPlayback ActionScript 782
buscar ponto de início 648, 649 componentes 778
buscar uma duração especificada 647 convenções tipográficas 13
criando pontos de início para trabalhar com 645 convertendo objetos 116
e o método seek() 647 convertendo tipos de dados 76
e pontos de início 644 cores
usando pontos de início com 645 na caixa de ferramentas Actions (Ações) 54
componentes de texto 405 valores, definindo 599
componentes, convenções de codificação 778 criando objetos 313
comportamento da transição Zoom 511 criando seqüências de caracteres 486
comportamentos CSM
sobre 65 sobre 433
transição Zoom 511 sobre parâmetros 433
comunicando com o Flash Player 692 CSS. Consulte cascading style sheets
concatenando seqüências de caracteres 84 cursores, criando personalizados 594
condições CustomFormatter, classe
escrita 151 sobre 613
condições, sobre 151 usando 613
conexões de soquete
script de exemplo 691
sobre 690 D
configurações de publicação dados
ActionScript 66 definição 75
escolhendo a versão do Flash Player 74 e variáveis 75
modificando 67 organizando em objetos 114
modificando o caminho de classe 68 sobre 75
Conjunto de caracteres universais (UCS - Universal dados carregados, verificando 665
Character Set) 478 dados externos 663, 707
conjuntos de caracteres acesso entre SWFs de domínios diferentes 734, 738
criando conjunto personalizado 426 e mensagens 692
conjuntos de caracteres personalizados, criando 425, e objeto LoadVars 670
426 e objeto XMLSocket 690
constantes e scripts de servidor 668
definição 842 e XML 683
melhores práticas 775
856 Índice
enviando e carregando 664 documentação, recursos adicionais 17
recursos de segurança 727 DOM (Document Object Model, Modelo de objetos
verificando o carregamento 664 de documentos) XML 683
data drawingAPI
barra de carregamento e progresso 666 com classes Tween e TransitionManager 581
vinculando com componentes 607 duplicando clipes de filme 381
de rolagem
e cache de bitmap 508
Debug Player 745 E
Debugger edição do ActionScript
ativar a depuração remota 749 exibindo caracteres ocultos 57
botões no 758 ferramenta Find (Localizar) 58
definindo pontos de interrupção 755 importando e exportando scripts 60
Flash Debug Player 745 números de linha 55
guia Properties 753 prender scripts 63
Lista de observação 752 quebra automática de linha 55
selecionando no menu de contexto 750 realce de sintaxe 54
usando 745 referências de código 51
variáveis 750 teclas de atalho de Escape 56
Delegate, classe verificar sintaxe 59
sobre 366 editor de método de entrada
usando 366 sobre 482
depurando 745 usando 482
com instrução trace 764 Editor do ActionScript 841
de um local remoto 748 efeito de ruído 562
Debug Player 745 efeitos
listando objetos 761 aplicando panorâmica a uma imagem 506
listando variáveis 762 brilho 552
mensagens de erro do compilador 809 brilho e cor 502
propriedades de campo de texto 763 efeitos de fade 500
usando o painel Output 759 escala de cinza 503
desempenho interpolação de brilho 504
cache de bitmap 508 modos de mistura 565
e filtros 533 ruído 562
e taxa de quadros 499 efeitos de fade em objetos 500
desenhando efeitos. Consulte filtros
com código 567 elementos, de um array 172
detectando colisões 604 eliminação de serrilhado personalizada
dicas de ferramenta. Consulte referências de código definição 432
dimensionamento em 9 trechos encapsulamento
ativando 585 sobre 248
noções básicas 583 usando 276
propriedade scale9Grid 585 endereços IP
sobre 583 arquivos de diretivas 737
usando 585 segurança 728
distinção entre maiúsculas e minúsculas enviando informações
e versão do Flash Player 123 em formato XML 664
sobre 122 formato de código URL 664
do..while, loops 170 para arquivos remotos 664
documentação PDF, onde encontrar 15
Índice 857
via TCP/IP 664 expressões condicionais 160
equilíbrio da pontuação, verificando 59 Extensible Markup Language. Consulte XML
erro de falta de memória 533
Escape, teclas de atalho de 56
escopo F
em classes 787 filho
melhores práticas 784 clipes de filme, definidos 369
sobre 130 nó 683
this, palavra-chave 365 filtro de brilho
escrevendo o ActionScript animar 526
com instrução 794 sobre 542
prefixo super 792 usando 542
trace 792 filtro de brilho gradiente
escrevendo sintaxe e instruções sobre 543
ouvinte 806 usando 543
return 805 filtro de chanfro
switch 805 sobre 545
especificação ECMA-262 121 usando 545
estilos filtro de chanfro gradiente
linha 574 aplicando 551
traço e acabamento 574 aplicando a um clipe de filme 551
estilos de acabamento array de cores 548
definindo 575 array de proporções 548
sobre 574 distribuição de cores 548
estilos de acabamento, definindo 574 e preenchimento 547
estilos de linha e preenchimento do clipe de filme 550
alfa 577 e propriedade strength 547
capsStyle e jointStyle 578 e propriedades blurX e blurY 547
cor 577 e propriedades knockout e type 547
dimensionando 578 e realce 550
e API de desenho 574 sobre 547
espessura 576 usando 549
estilos de traço e acabamento 574 valor de proporção e ângulo 550
miterLimit 581 filtro de convolução
parâmetros 576 sobre 554
pixelHinting 577 sobre a aplicação 554
sobre 574 usando 555
estilos de traço 574 filtro de embaçamento
estilos, traço e acabamento 574 animado com a classe Tween 559
evento do usuário 347 sobre 536
eventos usando e animando 536
definição 843 filtro de mapa de deslocamento
definidos 347 aplicando a uma imagem 563
e clipes de filme 399 com classe BitmapData 563
transmitindo 360 sobre 556
exibidores antigos, especificando 825 usando 556
exportando scripts e codificação de idioma 61 filtro de matriz de cores
expressões sobre 552
definição 844 usando 503, 552
manipulando valores em 185
858 Índice
filtro de sombreamento recursos novos e alterados do editor do ActionScript
animando 540 28
aplicando a uma imagem transparente 541 Flash Player, recipiente
e método clone() 560 definição 844
sobre 538 Flash Video
usando 538 Consulte vídeo
filtros FlashType
ajustando propriedades 558 sobre 430
alterando o nível de brilho 553 suporte ao Flash Player 430
animando 559 FlashVars
aplicando a instâncias 532 sobre 415
array 558 usando para exibir texto 416
definindo 526 FlashVars, propriedade
e ActionScript 534 sobre 415
e desempenho 533 FLV, arquivos
e erro de falta de memória 533 carregando arquivos externos durante a execução
e manipulação de erros 533 635
e transparência 534 configurando o servidor para FLV 652
e uso da memória 533 criando uma barra de progresso 659
filtro de brilho 526 criando uma faixa FLV 636
girando e inclinando 531 e Macintosh 653
girando, inclinando e dimensionando 532 metadados 650
manipulando com código 557 navegando com código 647
modificando propriedades 530 pontos de início 640, 641
noções básicas sobre pacotes 528 pré-carregando 639
obtendo e definindo 530 pré-carregando vídeo externo 639
ruído 562 trabalhando com pontos de início 643
Flash 8, recursos novos e alterados do ActionScript 19 vídeo externo 633
Flash Player folhas de estilos. Consulte cascading style sheets
classes, sobre 303 fontes
comunicando com 692 adicionando e removendo 420
configurações de publicação 74 compartilhando 429
dimensionando arquivo SWF para 693 definição 420
e ActionScript 798 sobre 420
exibição normal de menu 693 valores-limite 436
exibindo em tela cheia 693 fontes de dispositivo
exibindo ou esmaecendo o menu de contexto 693 definição 432, 843
métodos 696 mascarando 398
obtendo a versão mais recente 765 fontes incorporadas
padrões de codificação 798 incorporando um símbolo de fonte 423
versão de depuração 746 usando com a classe TextField 427
Flash Player 4 for, loops 166
criando conteúdo para 826 exemplo 180
Flash Player 7 for..in, loops 167
novo modelo de segurança 729, 736, 742 formatação de texto
portando scripts existentes 708 definição 848
Flash Player 8 sobre 439
elementos de linguagem novos e alterados 22 formatadores personalizados
elementos de linguagem obsoletos 28 sobre 612
usando 612
Índice 859
formatando código 53, 54 sintaxe de função com nome 214
formatando texto sobre 213
usando 440 tipos de 215
formato de código URL, enviando informações 664 usando no Flash 227
formato MIME, padrão 669 usando uma função com nome 219
fscommand(), função usando variáveis em 230
comandos e argumentos 693 funções com nome 220
comunicando com o Director 695 funções com nomes
usando 692 definição 846
função funções construtoras
bloco de função 219 criando 223
função anônima definição 842
criando 220 exemplo 830
definida 841 funções de conversão e tipos de dados 76
usando 222 funções de nível superior
função loadMovie() 665 definição 848
função loadVariables() 665 funções de retorno de chamada
funções criando 221
aninhadas 234 definição 842
assíncronos 664 funções definidas pelo usuário
atribuindo nome 226 criando 225
bloco de função 220 definição 848
chamando funções de nível superior 218 funções internas 217
como caixa preta 214 funções personalizadas 213
comparando com nome e anônimas 228
constructor 830
construtoras 223 G
conversão 76 getAscii(), método 596
criando e chamando 227 getURL(), método 592
criando funções anônimas 220 global, variáveis 102
criando funções com nome 219 glyphRange, nó, sobre 425
definição 844 gráficos vetoriais 849
definindo 224
definindo globais e de timeline 224
em comparação com métodos 236 H
em um arquivo de classe 229 herança
especificando e chamando funções definidas pelo e programação orientada a objeto (OOP) 247
usuário 225 e subclasses 320
exemplo 846 exemplo 322
formato padrão para funções com nome 219 sobre 319
internas e de nível superior 217 hitTest(), método 604
literal de função 222 HTML
melhores práticas 795 atribuindo estilos a marcas internas 454
nível superior 216 campo de texto 408
para controlar clipes de filme 371 exemplo de uso com estilos 455
passando parâmetros para 231 marcas entre aspas 462
personalizadas 213 marcas suportadas 462
retornando valores de 233 usando a marca <img> para fazer o texto fluir 461,
retorno de chamada 221 465, 470
reutilizando 227
860 Índice
usando cascading style sheets para definir marcas e programação orientada a objeto (OOP) 246
458 referenciando 126
usando em campos de texto 461 instrução return 805
HTTP, protocolo instrução try..catch..finally, escrevendo 158, 806
com métodos do ActionScript 664 instruções
comunicando com scripts de servidor 668 compostas 150
HTTPS, protocolo 664 compostos 804
condicionais 152
condicional 802
I definição 120, 847
ícones diretrizes para escrever 149
acima do painel Script 40 for 804
no Debugger 758 if 152
IDE (Integrated Development Environment, Ambiente if..else 153
de desenvolvimento integrado), definição 844 if..else if 154
identificadores definidos 844 importando 245
idiomas, usando vários em scripts 61 instruções trace 764
igualdade, operadores 200 sobre 149
imagem em escala de cinza 503 switch 156
imagem JPEG progressiva, definição 847 try..catch..finally 158, 806
imagens while e do while 805
aplicando modos de mistura 565 with 794
carregando em clipes de filme 375 instruções compostas 150
Consulte também mídia externa escrevendo 804
incorporando em campos de texto 470 instruções condicionais
IME (Input Method Editor, Editor de método de escrevendo 802
entrada) instruções for, escrevendo 804
sobre 482 instruções if..else if, escrevendo 154
usando 482 instruções if..else, escrevendo 153
import instruções switch
sobre a instrução 528 convenções 805
usando caractere curinga 529 usando 156
várias classes de um pacote 528 instruções trace, escrevendo o ActionScript 792
importando interatividade em arquivos SWF
arquivos de classe 254 criando 589
scripts e codificação de idioma 61 técnicas para 593
indo para um URL 592 interfaces
informações, transferindo entre arquivos SWF 664 atribuindo nome 334
inicialização, escrevendo o ActionScript 790 criando 335
inicializando propriedades de clipe de filme 401 criando como tipo de dados 337
instanciamento definindo e implementando 334
de objetos 313 e programação orientada a objeto (OOP) 247
definida 240 exemplo 340
instâncias 500 exemplo de interface complexa 342
aninhadas, referenciando 127 noções básicas de herança e 339
aplicando filtros a 532 sobre 331
definição 845 interpolações
definida 313 adicionando com comportamentos 511
dinâmicas, referenciando 128 adicionando com o ActionScript 513
interrompendo (percorrendo) código 757
Índice 861
interrompendo clipes de filme 591 usando 162
while 169
J
janela Script M
codificação em 39 Macromedia Director, comunicando com 695
opções de menu 42 manipulação de erros e filtros 533
sobre 36, 38 manipuladores. Consulte manipuladores de eventos
JavaScript manipulando números 82
e ActionScript 121 marcas de ID3 630
e Netscape 695 máscaras 397
enviando mensagens para 694 e fontes de dispositivo 398
instrução alert 764 e máscaras de canal alfa 398
padrão internacional 121 escrevendo scripts para criar 581
JPEG, arquivos traços ignorados 397, 567
carregando em clipes de filme 375, 621 máscaras de canal alfa 398
incorporando em campos de texto 470 matrizes
sobre 178
usando um loop for 180
L matrizes, sobre 178
layout de texto 439 MediaPlayback, componente
liberando scripts no painel Actions (Ações) 64 usando pontos de início com 646
linhas 574 melhores práticas
Linkage Properties (Propriedades de vinculação), caixa atribuindo nome a variáveis 772
de diálogo 381, 399 Booleanas, atribuindo nomes 775
List Objects (Listar Objetos), comando 761 classes e objetos, atribuindo nomes 776
List Variables (Listar Variáveis), comando 762 comentários 780
literais de função comentários em classes 781
definição 844 convenções de codificação 769
literais, definição 845 escopo 784
literal de array 178 funções 795
literal de função funções e métodos, atribuindo nomes 775
redefinindo 223 interfaces, atribuindo nomes 778
sobre 222 nomes a constantes, atribuindo 775
literal de objeto 184 pacotes, atribuindo nomes 777
literal de seqüência de caracteres 847 membros (métodos e propriedades)
LiveDocs, sobre 16 públicos, privados e estáticos 262
LoadVars, classe membros de classe 246, 315
carregando variáveis de arquivo de texto 418 sobre 246
usando para exibir texto 417 membros estáticos 315
Locale, classe membros estáticos. Consulte membros de classe
sobre 480 mensagens de erro 809
usando 480 metadados
loops sobre 650
aninhados 171 usando 650
criando e terminando 165 métodos
do..while 170 assíncronos 664
for 166 atribuindo nome 237
for..in 167 de objetos, chamando 314
862 Índice
definição 845 sobre 564
definida 235 modos de mistura.Consulte modos de mistura
e arrays 235 modulação de traço contínua 433
em comparação com funções 236 mouse, ponteiro do. Consulte cursores
para controlar clipes de filme 371 MovieClip, classe
private 263 ajustando a propriedade filters 558
públicos 262 e propriedade scale9Grid 585
sobre 213, 235 métodos de desenho 567
static 264 propriedade blendMode 564
tipos de 215 propriedade filters 530
métodos de desenho moviename_DoFSCommand, função 694
Consulte também API de desenho MP3, arquivos
métodos getter carregamento 626, 627
sobre 270 carregando em clipes de filme 626
usando 271 criando uma barra de progresso 657
métodos manipuladores de eventos lendo marcas de ID3 630
anexação a objetos 359 marcas de ID3 630
anexando a botões ou clipes de filme 355 pré-carregando 628, 639
atribuindo funções a 350
definição 844
definidos 347 N
definidos por classes do ActionScript 348 navegação
e manipuladores on() e onClipEvent() 355 controlando 589
escopo 362 indo para quadro ou cena 591
no ActionScript 2.0 365 Navegador Script 37
verificando dados XML 665 Netscape, métodos JavaScript suportados 695
métodos setter níveis
sobre 270 carregando 373
usando 271 níveis, identificando a profundidade 129
mídia externa 619 nome totalmente qualificado
carregando arquivos MP3 657 definindo 528
carregando arquivos SWF e de imagem 655 usando 528
carregando arquivos SWF e JPEG 621 nomes de domínio e segurança 728
carregando imagens e arquivos SWF 621 nomes de instância
componente ProgressBar 624 e caminhos de destino 125
criando animações da barra de progresso 654 nomes de instâncias
e a timeline raiz 625 comparados com nomes de variáveis 409
motivos para usar 619 definição 845
MP3, arquivos 626 definida 369
pré-carregando 639, 654 nós 683
reproduzindo arquivos FLV 633 null, tipo de dados 81
sobre o carregamento 620 números de linha em código, exibindo 55, 56
modelo de evento números, manipulando com métodos 82
para manipuladores on() e onClipEvent() 355
para métodos manipuladores de eventos 349
para ouvintes de eventos 351 O
modo Script Assist objeto LoadVars, criando 670
sobre 62 objeto transmissor 351
modos de mistura objeto XMLSocket
aplicando 565
Índice 863
loadPolicyFile 740 obsoletos 815
métodos 691 operandos 186
usando 690 pós-fixados 196
verificando dados 665 precedência e associatividade 188
objetos relacionais 200
acessando propriedades 313 relacionais e de igualdade 200
chamando métodos 314 sobre 185
criando 95, 114, 313 unários 197
criando no Flash 114 usando com seqüências de caracteres 192
definição 846 usando no Flash 210
efeito fade-out 500 operadores de acesso de array, verificando pares
executando repetição em filhos de 164 correspondentes 59
organizando dados em arrays 115 operadores Flash 4 obsoletos 815
padrões de codificação 783 operadores relacionais 200
tipo de dados 83 operandos 186
objetos ouvintes 351 ordem de execução (operador)
cancelando o registro 352 associatividade de operadores 188
obtendo a posição do ponteiro do mouse 595 precedência de operadores 188
obtendo informações de arquivos remotos 664 ordem de operação 567
on() e onClipEvent(), manipuladores 355 organização de scripts
anexando a clipes de filme 356 anexação a objetos 783
escopo 362 convenções de codificação 782
onEnterFrame, e taxa de quadros 499 organizando scripts
opaqueBackground, propriedade ActionScript 1.0 e ActionScript 2.0 73
definida 390 origens externas, conectando o Flash com 663, 707
usando 396 Output (Saída), painel 759
opção Pin Script (Prender script) no painel Actions conteúdo, copiando 760
(Ações) 64 e instrução trace 764
opções de renderização de texto 432 exibindo 760
opções de sinalização da sintaxe por cores, definindo no List Objects (Listar Objetos), comando 761
painel Actions (Ações) 55 List Variables (Listar Variáveis), comando 762
operador condicional 160 opções 760
operadores ouvintes de eventos 351
aditivos 198 classes que podem transmitir 351
associatividade 188 escopo 362
combinando com valores 185
comparação 193
condicionais 160, 200, 210 P
de atribuição 187, 204 pacotes
de atribuição, usando 204 atribuindo nome 242
de igualdade 200 definição 846
de ponto e acesso de array 194 em comparação com classes 243
definição 846 importando 245
deslocamento bit a bit 207 sobre 242
expressões matemáticas 185 trabalhando com 244, 528
lógicos 205, 206 padrão de design Singleton 267
lógicos bit a bit 208 padrões de design
manipulando valores 187 encapsulamento 276
multiplicativos 197 Singleton 267
numéricos 198
864 Índice
palavra-chave extends 321 prendendo scripts
sintaxe 321 definição 847
sobre 321 na Timeline 63
palavra-chave interface 333 prendendo um script 64
palavras reservadas pressionamentos de teclas, capturando 596
Consulte também palavras-chave profundidade
lista 147 definida 385
nomes de classe interna 148 determinando instância em 387
outras recomendações 149 determinando para clipes de filme 387
palavras reservadas futuras 148 determinando próxima disponível 386
sobre 147 gerenciando 385
palavras-chave programação orientada a objeto 246
_root 131 Programação orientada a objeto (OOP)
definição 845 criando classes personalizadas 249
extends 321 design 276
interface 333 e encapsulamento 248
lista 147 e herança 247
sobre 143 e interfaces 247
this 130 e objetos 246
usando 146 e polimorfismo 249
parâmetros 219, 846 instâncias e membros de classe 246
parênteses, verificando pares correspondentes 59 sobre 240, 246
percorrendo as linhas de código 757 Programação orientada a objeto. Consulte Programação
polimorfismo orientada a objeto (OOP)
sobre 249 projetores, executando aplicativos em 693
usando 327 Properties, guia do Debugger 753
ponteiro. Consulte cursores propriedade FlashVars
ponto de registro e imagens carregadas 375 usando 109
pontos de início propriedades
criando 645 de clipes de filme 376
exibindo 643 de objetos, acessando 313
navegação, evento e ActionScript 641 definição 847
rastreando 641 inicializando durante a execução 401
trabalhando com 643 private 263
usando 640 public 262
pontos de interrupção static 264
definindo no Debugger 755 propriedades de objetos
e arquivos externos 755 atribuindo valores a 313
sobre 755
XML, arquivo 756
pontos de interrupção, definindo e removendo Q
na janela Script 755 quebra automática de linha em código, ativando 55,
no painel Actions (Ações) 755 56
pontos finais 611
posição do mouse, obtendo 595
práticas recomendadas R
ActionScript 1 e ActionScript 2.0 73 propriedade _root e clipes de filme carregados 374
preferência Default Encoding 61 recuo no código, ativando 54
prefixo super 792 recursos adicionais 14
prefixos, super 792
Índice 865
recursos on-line 17 prendendo no lugar 63
referência scripts de quadro 33
e escopo 130 sobre eventos 32
referenciando testando 745
conteúdo carregado 128 scripts de quadro
referências de código 47 sobre 33
ativando 47, 51, 53 scripts de quadros
especificando configurações para 48 definição 844
exibindo manualmente 50 scripts do servidor
sobre 47 criando 680
usando 48 formato XML 685
removendo linguagens 664
arquivos SWF carregados 373 scrollRect, propriedade 390
clipes de filme 381 segurança
renderização de fontes acesso a dados entre domínios 734
métodos 431 compatibilidade do Flash Player 708
opções 432 e arquivos de diretivas 736
sobre 430 e portando scripts para o Flash Player 7 729, 736,
repetindo ações, usando loops 162 742
repetindo instruções 162, 163 entre domínios 727
reproduzindo clipes de filme 591 loadPolicyFile 738, 740
RGBA (RGB com alfa) 552 sem serrilhado
rolagem definição 841
texto 475 para animação e legibilidade 432
senhas e depuração remota 748
seqüências de caracteres 84
S analisando 488
scale-9 comparando 488
sobre 583 comparando com outros tipos de dados 490
scale-9. Consulte dimensionamento em 9 trechos convertendo e concatenando 491
Script Assist, modo convertendo maiúsculas/minúsculas 492
definição 847 criando 486
Script, janela criando um array de subseqüências de caracteres
definição 847 493
sobre o arquivo XML de pontos de interrupção 756 definição 478, 847
Script, painel determinando o comprimento 488
botões acima 40 encontrando a posição do caractere 495
definição 847 encontrando a subseqüência de caracteres 494
scripts examinando caracteres 489
atalhos de teclado para scripts presos 64 forçando comparações de tipos 491
corrigindo problemas de exibição de texto 61 repetindo em 489
criando para manipular eventos 35 retornando subseqüências de caracteres 494
depurando 745 sobre 477
eventos de clipe 33 usando 486
eventos de teclado 33 seqüências de caracteres. Consulte seqüências de
importando e exportando 61 caracteres
onde criar 31 seqüências de escape 84
organizando códigos 34 serrilhado, definição 841
portando para o Flash Player 7 708 Servidor Web IIS 6.0 653
servidores, abrindo conexão contínua 690
866 Índice
setInterval carregando e descarregando 373
e taxa de quadros 499 carregando em clipes de filme 621
usando 501 controlando no Flash Player 696
setRGB, método 599 criando controles de som 601
símbolos de fonte, incorporando 423 escalando para o Flash Player 693
sintaxe incorporando em campos de texto 470
de barra 131 indo para quadro ou cena 591
distinção entre maiúsculas e minúsculas 123, 124 inserindo em página da Web 592
verificando 59 mantendo o tamanho original 693
sintaxe de barra transferindo informações entre 664
não suportada no ActionScript 2.0 131 Consulte também clipes de filme
sobre 131
usando 828
sintaxe de ponto (notação de ponto) 125 T
sintaxe do ouvinte 806 tabelas de fontes
sintaxe pós-dois-pontos, definição 87 criando 437
sistema definindo 436
evento, definido 347 valores-limite 436
requisitos, para o ActionScript 2.0 9 taxa de quadros
sites com a classe Tween 521
depurando 748 e onEnterFrame 499
remotos, comunicando com 664 escolhendo 499
remotos, conexão contínua 690 sobre 499
solucionando problemas. Consulte depurando TCP/IP, conexão
sons com objeto XMLSocket 691
anexando à Timeline 601 enviando informações 664
Consulte também mídia externa tecla Tab e Test Movie 746
controlando 601 teclado
controle de balanço 603 atalhos para scripts presos 64
Stage (Palco), anexando símbolos a 381 valores de códigos de teclas ASCII 818
String, classe teclado numérico, valores de códigos de teclas ASCII
concat(), método 493 820
e métodos substr() and substring() 494 teclas de função, valores de códigos de teclas ASCII
length, propriedade 488, 491 821
método charAt() 489 tempo de compilação, definido 13
método toString() 491 tempo de execução, definido 13
sobre 477, 485 terminologia, ActionScript 841
split(), método 493 Test Movie
toLowerCase() e toUpperCase(), métodos 492 e controles do teclado 746
Strings (Seqüências de caracteres), painel 479 e Unicode 746
subclasses testando. Consulte depurando
criando 321 TextField, classe
criando para clipes de filme 399 criando texto de rolagem 475
exemplo 322 usando 406
subclasses, sobre 320 TextField, métodos, usando 427
superclasse 321 TextField.StyleSheet, classe 447
superfícies criando estilos de texto 451
cache de bitmap 848 e cascading style sheets 449
definida 389 e propriedade TextField.styleSheet 447, 452
SWF, arquivos
Índice 867
TextFormat, classe definição 76, 843
sobre 439 determinando o tipo 90
usando 444 e valores 245
texto MovieClip 80
atribuindo a campo de texto durante a execução null 81
407 Number 82
carregando e exibindo 416, 417, 419 Object 83
codificando 61 primitivos 77
definição 848 String 84
rolagem 475 undefined 85
terminologia 403 void 85
usando a marca <img> para fazer o texto fluir em traços
torno das imagens 465 definindo estilos 574
Consulte também campos de texto definindo parâmetros 576
texto de entrada 405 transferindo variáveis entre filme e servidor 670
texto dinâmico 405 transições
texto estático 405 adicionando com comportamentos 511
texto sem serrilhado adicionando com o ActionScript 513
criando tabela 437 definindo 512
definição, propriedade 440 Transition, classe
definindo a propriedade antiAliasType 433 animando o nível de brilho 553
espessura 440 TransitionManager, classe
limitações 431 com a classe Tween 524
modificando definição e espessura 440 com API de desenho 581
sobre 430 e atenuação 510
suporte 431 sobre 509
suporte ao Flash Player 430 usando 513
usando 433 transparência, e máscaras 398
valor avançado 433 Tween, classe
valor normal 433 animando filtros de embaçamento 559
this, palavra-chave 130, 617 animando o nível de brilho 553
como prefixo 790 com a classe TransitionManager 524
e escopo 130 com API de desenho 581
em classes 277 definindo a duração de quadros 520
escopo 277 e atenuação 510
usando 786 efeitos de fade em objetos com 519
tipo de dados complexo (valor de dados) 77 importando 518
tipo de dados MovieClip, definição 80 manipulador de eventos onMotionFinished 523
tipo de dados primitivo (valor de dados) 77 método continueTo() 522, 524
tipo de dados Void 85 método yoyo() 523, 524
tipo MIME 652 para ativar a animação concluída 521
tipos de ajustes à grade, usando 442 propriedade _alpha 524
tipos de dados sobre 509, 517
anotações 91 usando 513, 518
atribuindo 87
atribuindo automaticamente 85
básicos 76 U
Boolean 79 UCS (Universal Character Set, Conjunto de caracteres
complexos 77 universais), definição 478
convertendo 76
868 Índice
undefined, tipo de dados 85 valores padrão 93
Unicode variáveis de URL, sobre 106
código de caracteres 477 variáveis globais 102
definição 478 variável de timeline, sobre 103
e o comando Test Movie 746 variável local, sobre 104
suporte 61 vários idiomas, usando em scripts 61
UTF-16, padrão de codificação 478 verificação de tipo
UTF-8 (Unicode) 61, 478 definição 89
dinâmica 90
exemplo 89
V verificando
valores dados carregados 665
e tipos de dados 245 sintaxe e pontuação 59
manipulando em expressões 185 vídeo
Variables (Variáveis), guia do Debugger 750 adicionando a funcionalidade de busca 647
variáveis buscar ponto de início 648, 649
alterando o valor 94 buscar uma duração especificada 647
atribuindo nome 51 configurando o servidor para FLV 652
atribuindo valores 93 criando arquivos FLV 633
carregando 106, 110 criando um objeto de vídeo 634
carregando do arquivo de texto externo 418 criando uma barra de progresso para carregar FLV
carregando em campos de texto 415 659
codificadas em URL 106 criando uma faixa 636
comparando indefinidas e definidas 98 e Macintosh 653
convertendo em XML 685 metadados 650
declarando 93 navegando em um arquivo FLV 647
definição 91, 849 pontos de início 640
definindo através de um caminho 129 pré-carregando 639
diretrizes e regras de atribuição de nome 96 rastreando pontos de início 641
e escopo 101 reproduzindo arquivos FLV durante a execução 635
e guia Debugger Variables (Variáveis do depurador) sobre 632
750 sobre arquivos FLV externos 633
e lista de observação do Debugger 752 trabalhando com pontos de início 643
e operadores 96 usando o manipulador onMetaData 650
enviando para URL 592 Vídeo FLV. Consulte vídeo
evitando conflitos de nome 410 vídeo, alternativa para importação 633
instância 288 View Options (Opções de exibição), menu pop-up 55,
locais 104 56, 57
modificando no Debugger 751 vinculação
passando de HTML 416 convenções de codificação 778
passando por referência 100 identificador 381, 399
passando valores de uma seqüência de caracteres de vinculação de dados durante a execução
URL 106 com CheckBox 611
timeline 103 criando uma vinculação bidirecional 610
transferindo entre clipe de filme e servidor 670 sobre 607
usando 99 vinculação de dados, com o ActionScript 607
usando em um aplicativo 97 vinculações
usando em um projeto 111 criando com o ActionScript 608
usando FlashVars para passar 109 criando uma vinculação bidirecional 610
criando uma vinculação unidirecional 608
Índice 869
vinculando clipes de filme 381
vinculando componentes com o ActionScript 615
volume, criando controle deslizante 602
W
Watch (Observação), guia do Debugger 752
while, loops 169
X
XLIFF, arquivos 480
XML 683
carregando e exibindo texto 419
conversão de variáveis de exemplo 684
DOM 683
em scripts do servidor 685
enviando informações com métodos XML 664
enviando informações via soquete TCP/IP 664
exemplo de uso com estilos 458
hierarquia 683
XML Localization Interchange File Format (XLIFF)
480
870 Índice