Você está na página 1de 870

Aprendendo ActionScript 2.

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 so marcas comerciais registradas ou marcas comerciais da Macromedia, Inc. e podem estar registradas nos Estados Unidos ou em outras jurisdies, inclusive internacionais. Outros nomes de produtos, logotipos, designs, ttulos, palavras ou frases mencionados nesta publicao podem ser marcas comerciais, marcas de servio ou nomes comerciais da Macromedia, Inc. ou de outras entidades e podem estar registrados em certas jurisdies, inclusive internacionais. Informaes de terceiros Este guia contm links para sites da Web de terceiros que no esto sob o controle da Macromedia. Nesses casos, a Macromedia no responsvel pelo contedo 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 convenincia, e a incluso de um link no significa que a Macromedia apia ou aceita qualquer responsabilidade pelo contedo apresentado nos sites de terceiros. Tecnologia de compactao e descompactao de voz licenciada da Nellymoser, Inc. (www.nellymoser.com). Tecnologia Sorenson Spark de compactao e descompactao de vdeo licenciada da Sorenson Media, Inc. Navegador Opera Copyright 1995-2002 Opera Software ASA e seus fornecedores. Todos os direitos reservados. O vdeo Macromedia Flash 8 possui tecnologia de vdeo 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 pases. Copyright 2005 Macromedia, Inc. Todos os direitos reservados. Este manual no pode ser copiado, fotocopiado, reproduzido, traduzido ou convertido em nenhum formato eletrnico ou que possa ser lido por mquina, por inteiro ou em parte, sem o consentimento prvio por escrito da Macromedia, Inc. No obstante o precedente, o proprietrio ou usurio autorizado de uma cpia vlida do software com que este manual foi fornecido pode imprimir uma cpia deste manual a partir de uma verso eletrnica com a finalidade nica de ele prprio ou um usurio autorizado aprender a usar este software, desde que nenhuma parte deste manual seja impressa, reproduzida, distribuda, revendida ou transmitida para qualquer outro fim, incluindo, sem limitao, fins comerciais, como vendas de cpias desta documentao ou fornecimento de servios de suporte pr-pagos. Agradecimentos Gerenciamento de projetos: Sheila McGinn Criao do texto: Jen deHaan; Peter deHaan, Joey Lott Editora geral: Rosana Francescato Editora chefe: Lisa Stanziano Edio: Linda Adler, Geta Carlson, Evelyn Eldridge, John Hammett, Mary Kraemer, Noreen Maher, Jessie Wood, Anne Szabla Gerenciamento de produo: Patrice ONeill, Kristin Conradi, Yuko Yagi Projeto de mdia e produo: 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 edio: Setembro de 2005 Macromedia, Inc. 601 Townsend St. San Francisco, CA 94103

Contedo

Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Pblico-alvo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Requisitos de sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Atualizando arquivos XML para Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Sobre a documentao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Recursos adicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Captulo 1: Novidades do ActionScript no Flash 8 . . . . . . . . . . . . 19 Novidades do ActionScript 2.0 e do Flash 8 . . . . . . . . . . . . . . . . . . . . . . 19 Alteraes no modelo de segurana para arquivos SWF instalados localmente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Captulo 2: Escrevendo e editando o ActionScript 2.0 . . . . . . . . 31 Sobre o ActionScript e eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Organizando o cdigo ActionScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Usando o painel Actions e a janela Script. . . . . . . . . . . . . . . . . . . . . . . . 36 Sobre o painel Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37 Sobre a janela Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Sobre a codificao no painel Actions e na janela Script . . . . . . . . . . 39 Sobre recursos do painel Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Sobre comportamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Sobre as configuraes de publicao do ActionScript . . . . . . . . . . . 66 Captulo 3: Sobre o ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . 71 O que ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 Sobre a opo entre o ActionScript 1.0 e o ActionScript 2.0 . . . . . . .73 Noes bsicas do ActionScript e do Flash Player . . . . . . . . . . . . . . . .74

Captulo 4: Dados e tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . 75 Sobre dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Sobre tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Sobre variveis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Organizando dados em objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 Sobre a converso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116 Captulo 5: Fundamentos da sintaxe e da linguagem . . . . . . . . 119 Sobre sintaxe, instrues e expresses . . . . . . . . . . . . . . . . . . . . . . . . . 120 Sobre sintaxe de ponto e caminhos de destino . . . . . . . . . . . . . . . . . . 124 Sobre pontuadores de linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Sobre constantes e palavras-chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Sobre instrues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Sobre arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Sobre operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Captulo 6: Funes e mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Sobre funes e mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Noes bsicas sobre mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235 Captulo 7: Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Sobre a programao 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 smbolos no Flash. . . . . . . . . . . . . . . . . . . . . 295 Compilando e exportando classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296 Noes bsicas sobre classes e escopo . . . . . . . . . . . . . . . . . . . . . . . 299 Sobre classes de nvel superior e internas . . . . . . . . . . . . . . . . . . . . . . 302 Sobre como trabalhar com classes internas . . . . . . . . . . . . . . . . . . . . . 312 Captulo 8: Herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Sobre herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Sobre a criao de subclasses no Flash . . . . . . . . . . . . . . . . . . . . . . . . 321 Usando o polimorfismo em um aplicativo . . . . . . . . . . . . . . . . . . . . . . . 327

Contedo

Captulo 9: Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Sobre interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331 Criando interfaces como tipos de dados. . . . . . . . . . . . . . . . . . . . . . . . 337 Noes bsicas sobre herana e interfaces . . . . . . . . . . . . . . . . . . . . . 339 Exemplo: Usando interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Exemplo: Criando uma interface complexa . . . . . . . . . . . . . . . . . . . . . 342 Captulo 10: Manipulando eventos . . . . . . . . . . . . . . . . . . . . . . . 347 Usando mtodos manipuladores de eventos . . . . . . . . . . . . . . . . . . . . 348 Usando ouvintes de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .351 Usando ouvintes de eventos com componentes . . . . . . . . . . . . . . . . 353 Usando manipuladores de eventos de boto e de clipe de filme. . . 355 Transmitindo eventos de instncias de componentes . . . . . . . . . . . . 360 Criando clipes de filme com estados de boto . . . . . . . . . . . . . . . . . . .361 Escopo do manipulador de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Escopo da palavra-chave this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 Usando a classe Delegate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 Captulo 11: Trabalhando com clipes de filme . . . . . . . . . . . . . . 369 Sobre o controle de clipes de filme com o ActionScript . . . . . . . . . . 370 Chamando vrios mtodos em um nico clipe de filme. . . . . . . . . . . 372 Carregando e descarregando arquivos SWF . . . . . . . . . . . . . . . . . . . 373 Alterando a posio e a aparncia de um clipe de filme . . . . . . . . . . 376 Arrastando clipes de filme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Criando clipes de filme durante a execuo . . . . . . . . . . . . . . . . . . . . . 378 Adicionando parmetros 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 mscaras . . . . . . . . . . . . . . . . . . . . . . . . 397 Manipulando eventos de clipes de filme . . . . . . . . . . . . . . . . . . . . . . . . 399 Atribuindo uma classe a um smbolo de clipe de filme . . . . . . . . . . . . 399 Inicializando as propriedades de classe . . . . . . . . . . . . . . . . . . . . . . . . .401 Captulo 12: Trabalhando com texto e seqncias de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Sobre campos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Sobre o carregamento de texto e variveis em campos de texto . . .415 Usando fontes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 Sobre a renderizao de fontes e texto sem serrilhado. . . . . . . . . . . 430

Contedo

Sobre o layout e a formatao de texto . . . . . . . . . . . . . . . . . . . . . . . . 439 Formatando texto com estilos CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . .447 Usando texto em formato HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Exemplo: Criando texto de rolagem . . . . . . . . . . . . . . . . . . . . . . . . . . . .475 Sobre seqncias de caracteres e a classe String. . . . . . . . . . . . . . . . 477 Captulo 13: Animao, filtros e desenhos . . . . . . . . . . . . . . . . . 497 Scripts de animao com o ActionScript 2.0 . . . . . . . . . . . . . . . . . . 498 Sobre cache de bitmap, rolagem e desempenho . . . . . . . . . . . . . . . 508 Sobre as classes Tween e TransitionManager . . . . . . . . . . . . . . . . . 509 Usando efeitos de filtro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .526 Trabalhando com filtros usando ActionScript . . . . . . . . . . . . . . . . . . .534 Manipulando efeitos de filtro com cdigo . . . . . . . . . . . . . . . . . . . . . . .557 Criando bitmaps com a classe BitmapData . . . . . . . . . . . . . . . . . . . . . 561 Modos de mistura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .564 Sobre a ordem de operao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 Desenhando com o ActionScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 Noes bsicas sobre dimensionamento e guias de trecho . . . . . . .583 Captulo 14: Criando interao com o ActionScript . . . . . . . . . 589 Sobre eventos e interao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 Controlando a reproduo de arquivos SWF . . . . . . . . . . . . . . . . . . . 590 Criando interatividade e efeitos visuais. . . . . . . . . . . . . . . . . . . . . . . . . 593 Criando vinculaes de dados durante a execuo com o ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .607 Desconstruindo um script de exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . 616 Captulo 15: Trabalhando com imagens, som e vdeo . . . . . . . . 619 Sobre o carregamento e o trabalho com mdia externa . . . . . . . . . . 620 Carregando arquivos SWF e de imagem externos . . . . . . . . . . . . . . . 621 Sobre o carregamento e o uso de arquivos MP3 externos . . . . . . . .626 Atribuindo vinculao a recursos da biblioteca. . . . . . . . . . . . . . . . . . . 631 Sobre o uso de vdeo FLV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .632 Sobre a criao de animaes do progresso para arquivos de mdia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .654

Contedo

Captulo 16: Trabalhando com dados externos . . . . . . . . . . . . . 663 Enviando e carregando variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 Captulo 17: Noes bsicas de segurana . . . . . . . . . . . . . . . . 707 Sobre compatibilidade com os modelos de segurana anteriores do Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 Sobre segurana do arquivo local e o Flash Player . . . . . . . . . . . . . . 709 Sobre domnios, segurana entre domnios 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 Captulo 18: Depurando aplicativos . . . . . . . . . . . . . . . . . . . . . . 745 Depurando scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 Usando o painel Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 Captulo 19: Melhores prticas e convenes de codificao para ActionScript 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .767 Convenes de atribuio de nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando de comentrios no cdigo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Convenes de codificao do ActionScript . . . . . . . . . . . . . . . . . . . . Otimizao do ActionScript e do Flash Player . . . . . . . . . . . . . . . . . . Formatando a sintaxe do ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . 769 779 782 798 799

Apndice A: Mensagens de erro . . . . . . . . . . . . . . . . . . . . . . . . . 809 Apndice B: Operadores Flash 4 obsoletos . . . . . . . . . . . . . . . . 815 Apndice C: Teclas do teclado e valores de cdigos de teclas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817 Apndice D: Criando scripts para verses anteriores do Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825 Sobre a especificao de verses anteriores do Flash Player . . . . 825 Usando o Flash 8 para criar contedo para o Flash Player 4 . . . . . 826

Contedo

Apndice E: Programao 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 mtodos a um objeto personalizado no ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .832 Definindo mtodos manipuladores de eventos no ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .834 Criando herana 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 Apndice F: Terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841 ndice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851

Contedo

Introduo
O Macromedia Flash Basic 8 e o Macromedia Flash Professional 8 so as ferramentas de criao padro profissionais para a produo de experincias de grande impacto na Web. O ActionScript a linguagem utilizada para adicionar interatividade aos aplicativos Flash, sejam os aplicativos arquivos SWF animados simples ou aplicativos de Internet avanados mais complexos. Para usar o Flash, no necessrio o ActionScript, mas, se voc desejar fornecer interatividade bsica ou complexa com o usurio, trabalhar com objetos diferentes daqueles contidos no Flash (como botes e clipes de filme) ou ento transformar um arquivo SWF em uma experincia de usurio mais eficiente, dever usar o ActionScript. Para obter mais informaes, consulte os tpicos a seguir:
Pblico-alvo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Atualizando arquivos XML para Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Requisitos de sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Sobre a documentao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Recursos adicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Pblico-alvo
Este manual pressupe que voc j tenha instalado o Flash Basic 8 ou o Flash Professional 8 e saiba como usar a interface de usurio. preciso que saiba posicionar objetos no Stage e manipul-los no ambiente de criao do Flash. Se j tiver usado uma linguagem de criao, o ActionScript lhe parecer familiar. No entanto, se for iniciante em programao, saiba que os fundamentos do ActionScript so fceis de aprender. Voc pode comear com comandos simples e criar mais complexidade com o tempo. Pode adicionar muita interatividade aos seus arquivos sem precisar aprender (ou escrever) muito cdigo.

Requisitos de sistema
O ActionScript 2.0 no tem qualquer requisito de sistema alm do Flash 8 .

Este manual pressupe que voc esteja utilizando as configuraes de publicao padro para os arquivos do Flash: Flash Player 8 e ActionScript 2.0. Se voc alterar qualquer uma dessas configuraes, as explicaes e exemplos de cdigo apresentados na documentao podero no funcionar corretamente. Caso desenvolva aplicativos para verses anteriores do Flash Player, consulte o Apndice D, Criando scripts para verses anteriores do Flash Player, na pgina 825.

Atualizando arquivos XML para Flash


importante que estejam sempre instalados os arquivos XML para Flash mais recentes. A Macromedia algumas vezes apresenta recursos em verses com ponto (verses menores) do Flash Player. Quando uma verso dessas se encontrar disponvel, atualize sua verso do Flash para obter os arquivos XML mais recentes. Caso contrrio, o compilador do Flash 8 poder gerar erros caso voc use novas propriedades ou mtodos indisponveis na verso do Flash Player que veio com a instalao do Flash. Por exemplo, o Flash Player 7 (7.0.19.0) continha um novo mtodo para o objeto System , System.security.loadPolicyFile. Para acessar esse mtodo, use o instalador Player Updater (Atualizador de player) para atualizar todos os players instalados com o Flash. Caso contrrio, o compilador do Flash exibir erros. Lembre-se de que possvel instalar um Player Updater que seja de uma ou mais verses maiores mais recentes que a sua do Flash. Fazendo isso, obter os arquivos XML necessrios, mas no dever receber mensagens de erro do compilador quando publicar verses mais antigas do Flash Player. Algumas vezes, novos mtodos ou propriedades encontram-se disponveis para verses mais antigas, e ter os arquivos XML mais recentes minimiza os erros de compilao quando voc tenta acessar mtodos ou propriedades mais antigos.

Sobre a documentao
Este manual oferece uma viso geral da sintaxe do ActionScript e informaes sobre como uslo 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 informaes, consulte os seguintes tpicos:

Viso geral do manual Aprendendo ActionScript 2.0 na pgina 11 Sobre os arquivos de exemplo na pgina 15 Termos usados neste documento na pgina 13 Copiar e colar cdigo na pgina 13

10

Introduo

Viso geral do manual Aprendendo ActionScript 2.0


A lista a seguir resume o contedo deste manual:

O Captulo 1, Novidades do ActionScript no Flash 8, descreve recursos que so novos no ActionScript, alteraes no compilador e no depurador e o novo modelo de programao para a linguagem ActionScript 2.0. O Captulo 2, Escrevendo e editando o ActionScript 2.0, descreve recursos do editor do ActionScript dentro do Flash que facilitam a escrita de cdigo. O Captulo 3, Sobre o ActionScript, descreve o que a linguagem ActionScript e detalha como escolher qual verso utilizar. O Captulo 4, Dados e tipos de dados, descreve a terminologia e os conceitos bsicos sobre dados, tipos de dados e variveis. Esses conceitos sero usados em todo o manual. O Captulo 5, Fundamentos da sintaxe e da linguagem, descreve a terminologia e os conceitos bsicos da linguagem ActionScript. Esses conceitos sero usados em todo o manual. O Captulo 6, Funes e mtodos, descreve como escrever diferentes tipos de funes e mtodos e como us-los no seu aplicativo. O Captulo 7, Classes, descreve como criar classes e objetos personalizados no ActionScript. Esse captulo tambm lista as classes internas do ActionScript e oferece uma viso geral de como utiliz-las para acessar recursos avanados do ActionScript. O Captulo 8, Herana, descreve a herana na linguagem ActionScript e como estender classes internas ou personalizadas. O Captulo 9, Interfaces, descreve como criar interfaces e trabalhar com elas no ActionScript. O Captulo 10, Manipulando eventos, descreve vrias formas de manipular eventos: mtodos manipuladores de eventos, ouvintes de eventos e manipuladores de eventos de boto e de clipe de filme. O Captulo 11, Trabalhando com clipes de filme, descreve clipes de filme e o AcionScript que voc pode usar para crontrol-los. O Captulo 12, Trabalhando com texto e seqncias de caracteres, descreve os diferentes modos como voc pode controlar o texto e as seqncias de caracteres no Flash e inclui informaes sobre formatao de texto e o FlashType (renderizao de texto avanada, como texto sem serrilhado). O Captulo 13, Animao, filtros e desenhos, descreve como criar animao e imagens baseadas em cdigo, adicionar filtros a objetos e desenhar usando o ActionScript.

Sobre a documentao

11

O Captulo 14, Criando interao com o ActionScript, descreve alguns modos simples de criar aplicativos mais interativos, incluindo o controle quando os arquivos SWF so executados e a criao de ponteiros personalizados e de controles de som. O Captulo 15, Trabalhando com imagens, som e vdeo, descreve como importar arquivos de mdia externos, como imagens de bitmap, arquivos MP3, arquivos Flash Video (FLV) e outros arquivos SWF, nos aplicativos Flash. Esse captulo tambm oferece uma viso geral de como trabalhar com o vdeo nos aplicativos e como criar animaes para o carregamento da barra de progresso. O Captulo 16, Trabalhando com dados externos, descreve como processar dados de fontes externas usando scripts de servidor ou de cliente nos aplicativos. Esse captulo descreve como integrar os dados com os aplicativos. O Captulo 17, Noes bsicas de segurana, explica a segurana no Flash Player, na medida em que se relaciona com o trabalho com arquivos SWF localmente no disco rgido. Esse captulo tambm explica questes de segurana entre domnios e como carregar dados de servidores ou atravs de domnios. O Captulo 18, Depurando aplicativos, descreve o depurador do ActionScript dentro do Flash, que facilita a escrita de aplicativos. O Captulo 19, Melhores prticas e convenes de codificao para ActionScript 2.0, explica as melhores prticas para usar o Flash e para escrever o ActionScript. Esse captulo tambm lista convenes de codificao padronizadas, como variveis de atribuio de nome e outras convenes. O Apndice A, Mensagens de erro, lista as mensagens de erro que o compilador do Flash pode gerar. O Apndice B, Operadores Flash 4 obsoletos, lista todos os operadores obsoletos do Flash 4 e sua associatividade. O Apndice C, Teclas do teclado e valores de cdigos de teclas, lista todas as teclas de um teclado padro e os valores de cdigos de teclas ASCII correspondentes usados para identificar as teclas no ActionScript. O Apndice D, Criando scripts para verses anteriores do Flash Player, fornece diretrizes para ajud-lo a criar scripts sintaticamente corretos para a verso do Flash Player desejada. O Apndice E, Programao orientada a objeto com o ActionScript 1.0, fornece informaes sobre o uso do modelo de objeto ActionScript 1.0 para escrver scripts. O Apndice F, Terminologia, lista a terminologia comumente usada ao trabalhar com a linguagem ActionScript e fornece descries para os termos.

Este manual explica como usar a linguagem ActionScript. Para obter informaes sobre os elementos de linguagem propriamente ditos, consulte o ActionScript 2.0 Language Reference.

12

Introduo

Convenes tipogrficas
Este manual usa as seguintes convenes tipogrficas:

Fonte Code indica

cdigo do ActionScript.

Fonte Code negrito, normalmente em um procedimento, indica cdigo que voc precisa modificar ou adicionar a um cdigo j adicionado ao arquivo FLA. Em alguns casos, pode ser usado para realar o cdigo a ser observado.

Texto em negrito indica dados que voc precisa digitar na interface de usurio, como nome de arquivo ou nome de instncia. Texto em itlico indica um novo termo definido no texto que se segue. Em um caminho de arquivo, pode indicar um valor que deve ser substitudo (por exemplo, por um nome de diretrio no seu prprio disco rgido).

Termos usados neste documento


Os seguintes termos so usados neste manual:

Voc refere-se ao desenvolvedor que escreve um script ou aplicativo. O usurio refere-se pessoa que executar os scripts e aplicativos. Tempo de compilao o momento em que voc publica, exporta, testa ou depura o documento. Tempo de execuo o momento em que o script executado no Flash Player.

Termos do ActionScript como mtodo e objeto so definidos no Apndice F, Terminologia, na pgina 841.

Copiar e colar cdigo


Quando voc colar o ActionScript do painel Help (Ajuda) para o FLA ou o arquivo do ActionScript, preste ateno aos caracteres especiais. So caracteres especiais as aspas especiais (tambm chamadas de aspas curvas ou aspas inglesas). Esses caracteres no so interpretados pelo editor do ActionScript, ento o cdigo lana um erro quando voc tenta compil-lo no Flash.

Sobre a documentao

13

Voc pode identificar se os caracteres de aspas so especiais quando eles no so codificados por cores de forma correta. Ou seja, se nenhuma seqncia 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) lana um erro e permite que voc saiba que h um tipo errado (marcas de aspas especiais ou curvas) de caracteres no seu cdigo.
N OT A

Voc tambm pode encontrar aspas especiais se colar o ActionScript de outros locais, como de uma pgina da Web ou um documento do Microsoft Word.

Cuidado com quebras de linha ao copiar e colar cdigo. Ao colar o seu cdigo de alguns locais, a linha de cdigo poder se quebrar em um local inapropriado. Certifique-se de que a codificao de cores da sua sintaxe esteja correta no editor do ActionScript se achar que as quebras de linha representam um problema. Compare o cdigo do painel Actions (Aes) com o do painel Help para ver se correspondem. Procure ativar o Word Wrap (quebra automtica de linha) no editor do ActionScript para ajudar a solucionar quebras de linha excedentes no cdigo (selecione View (Exibir) > Word Wrap (quebra automtica de linha) na janela Script ou Word Wrap no menu pop-up do painel Actions.)

Recursos adicionais
Alm deste manual sobre o ActionScript, existem outros sobre outros tpicos 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 sumrio padro. Clique no boto Clear (Limpar) para ver os manuais disponveis; para obter mais informaes, consulte Onde encontrar documentao sobre outros assuntos na pgina 17. Para obter mais informaes sobre outros recursos disponveis, consulte os seguintes tpicos: Sobre os arquivos de exemplo na pgina 15 Onde encontrar arquivos PDF ou documentao impressa na pgina 15 Sobre o LiveDocs na pgina 16 Recursos on-line adicionais na pgina 17 Onde encontrar documentao sobre outros assuntos na pgina 17

14

Introduo

Sobre os arquivos de exemplo


H vrios arquivos de exemplo baseados no ActionScript que so instalados com o Flash. Esses arquivos de exemplo mostram como o cdigo funciona em um arquivo FLA; geralmente servem como uma ferramenta de aprendizado bem til. Os captulos deste manual muitas vezes fazem referncia a esses arquivos, mas recomendamos que voc consulte tambm a pasta de arquivos de exemplo do seu disco rgido. Os arquivos de exemplo incluem arquivos FLA de aplicativo que usam funes 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 avanados 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 rgido.

No Windows, navegue at a unidade de inicializao\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 so teis os seguintes arquivos de exemplo com foco em componentes, pois eles contm vrios cdigos ActionScript. Eles tambm podem ser encontrados na pasta Samples do disco rgido:

No Windows, navegue at a unidade de inicializao\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 tambm pode encontrar arquivos de exemplo adicionais para download na Internet. A pgina da Web a seguir contm links e descries de arquivos de exemplo adicionais: www.macromedia.com/go/flash_samples/.

Onde encontrar arquivos PDF ou documentao impressa


Caso prefira ler a documentao em formato impresso, as verses PDF de cada manual encontram-se disponveis para download. V at www.macromedia.com/support/ documentation/ e selecione o produto em que est interessado. Voc pode exibir ou fazer o download do PDF ou acessar o link da verso LiveDocs do manual.

Recursos adicionais

15

Muitas vezes voc tambm pode adquirir a documentao impressa. Para obter informaes atualizadas, v at o site de suporte da documentao e selecione Flash Basic 8 ou Flash Professional 8.

Sobre o LiveDocs
Voc pode acessar a documentao no site LiveDocs ou pelo painel Help. O site LiveDocs contm todas as pginas de ajuda do Flash e pode conter comentrios que esclaream, atualizem ou corrijam partes da documentao. Clique em View Comments (Exibir comentrios) em LiveDocs na parte inferior de uma pgina do painel Help para exibir a pgina equivalente no site LiveDocs. V at http://livedocs.macromedia.com para ver uma lista de toda a documentao disponvel no formato LiveDocs. Escritores tcnicos monitoram o site LiveDocs. Uma das vantagens do LiveDocs ver comentrios que esclarecem a documentao ou corrigir erros ou problemas que surgem aps o lanamento de um software. No no LiveDocs que voc faz solicitaes de ajuda, como perguntas sobre seu cdigo que no funciona, comentrios sobre problemas com software ou instalao ou perguntas sobre como criar algo com o Flash. Nele voc fornece informaes sobre a documentao (por exemplo, voc aponta uma frase ou pargrafo que requer esclarecimento). Quando voc clica no boto para adicionar um comentrio sobre o LiveDocs, h diversos pontos sobre os tipos de comentrios que so aceitveis no sistema. Leia essas diretrizes atentamente para que seu comentrio no seja removido do site. Se tiver alguma dvida sobr eo Flash, faa sua pergunta nos fruns da Web da Macromedia: www.macromedia.com/support/forums/. Os fruns da Web so o melhor local para fazer perguntas, pois h vrios funcionrios da Macromedia l, voluntrios da equipe Macromedia, gerentes e membros de grupos de usurio da Macromedia e at escritores tcnicos que monitoram esses fruns. Engenheiros no 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 formulrio em www.macromedia.com/go/wish. Se voc relatar o bug ou a solicitao de aprimoramento no LiveDocs, eles no sero adicionados de forma oficial ao banco de dados de bugs. Use o formulrio apropriado se quiser que um engenheiro d ateno ao bug reportado ou sua solicitao. Lembre-se de dar ateno aos caracteres especiais e s quebras de linha quando colar da Web, incluindo do LiveDocs. A Macromedia vem se esforando para remover todos os caracteres especiais dos exemplos de cdigo, mas, se voc tiver dificuldades para colar o cdigo, consulte Copiar e colar cdigo na pgina 13.

16

Introduo

Recursos on-line adicionais


Existem vrios recursos on-line que oferecem vrias instrues, ajuda e orientao para facilitar o uso do Macromedia Flash 8. Consulte com freqncia os seguintes sites para obter atualizaes: O site The Macromedia Developer Center (www.macromedia.com/devnet) atualizado regularmente com as informaes mais recentes sobre o Flash, alm de oferecer aconselhamentos de usurios experientes, tpicos avanados, exemplos, dicas, tutoriais (incluindo tutoriais com vrias partes) e outras atualizaes. Visite com freqncia o site da Web para saber das ltimas novidades sobre o Flash e como obter o mximo do programa. O site The Macromedia Flash Support Center (www.macromedia.com/support/flash) fornece TechNotes (Notas Tcnicas), atualizaes de documentao e links para recursos adicionais na comunidade Flash. O site The Macromedia Weblogs (http://weblogs.macromedia.com) fornece uma lista dos weblogs (tambm chamados de blogs) de funcionrios e da comunidade Macromedia .
Os fruns da Web da Macromedia (http://webforums.macromedia.com) oferecem vrios fruns para perguntas especficas sobre o Flash, seus aplicativos ou a linguagem ActionScript. Os fruns so monitorados por voluntrios da equipe Macromedia e muitas vezes so visitados por funcionrios de l tambm. Se no souber a quem recorrer ou como resolver um problema, comece por um frum do Flash.

O site The Macromedia Community (www.macromedia.com/community) hospeda regularmente Macrochats, uma srie de apresentaes ao vivo sobre uma variedade de tpicos feitas por funcionrios ou membros da comunidade Macromedia. Consulte regulamente o site procura de atualizaes e para registrar-se nos Macrochats.

Onde encontrar documentao sobre outros assuntos


Os manuais a seguir oferecem informaes adicionais sobre assuntos comumente associados ao ActionScript 2.0:

Para obter informaes sobre os elementos que compem a linguagem ActionScript, consulte o ActionScript 2.0 Language Reference. Para obter informaes sobre como trabalhar no ambiente de criao do Flash, consulte o How to Use Help (Como usar a Ajuda). Para obter informaes sobre como trabalhar com componentes, consulte o Using Components (Usando componentes).

Recursos adicionais

17

18

Introduo

CAPTULO 1

Novidades do ActionScript no Flash 8


O Macromedia Flash Basic 8 e o Macromedia Flash Professional 8 oferecem vrios aprimoramentos que facilitam a criao de scripts mais eficientes com uso da linguagem ActionScript. Os novos recursos, analisados neste captulo, incluem novos elementos de linguagem (consulte Acrscimos linguagem ActionScript na pgina 22), ferramentas de edio aprimoradas (consulte Alteraes de edio do ActionScript na pgina 28), alteraes no modelo de segurana e outros aprimoramentos do ActionScript relacionados ferramenta de criao. Para obter mais informaes, consulte os seguintes tpicos:
Novidades do ActionScript 2.0 e do Flash 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Alteraes no modelo de segurana para arquivos SWF instalados localmente . 29

Novidades do ActionScript 2.0 e do Flash 8


A linguagem ActionScript cresceu e desenvolveu-se desde sua introduo, h vrios anos. Com cada nova verso do Flash, mais palavras-chave, objetos, mtodos e outros elementos foram adicionados linguagem. Existem tambm aprimoramentos do ActionScript relacionados aos ambientes de criao do Flash 8. O Flash Basic 8 e o Flash Professional 8 introduzem vrios novos elementos de linguagem para recursos expressivos, como filtros e modos de mistura, alm do desenvolvimento de aplicativos, como integrao do JavaScript (ExternalInterface) e entrada e sada de arquivo (FileReference e FileReferenceList). Esta seo fornece uma viso geral dos elementos e classes da linguagem ActionScript que so novos ou foram alterados no Flash 8 e aprimoramentos do ActionScript relacionados ferramenta de criao. Para obter uma lista de adies especficas ao ActionScript 2.0, consulte Acrscimos linguagem ActionScript na pgina 22. Para usar qualquer dos novos elementos da linguagem nos seus scripts, tenha em mente o Flash Player 8 (o padro) quando publicar seus documentos.

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 exibio de caracteres ocultos nos scripts. Para obter mais informaes, consulte Exibindo caracteres ocultos na pgina 57. As opes de depurao agora encontram-se disponveis na janela Script, assim como no painel Actions, para arquivos do ActionScript. O diretrio Configuration que inclui arquivos XML e arquivos de classes est reorganizado. Para obter detalhes, consulte Arquivos de configurao instalados com o Flash 8 na pgina 69. possvel definir uma preferncia para recarregar arquivos de script modificados ao trabalhar em um aplicativo, o que ajuda a evitar o trabalho com verses mais antigas de arquivos de script e a substituio de arquivos de script mais novos. Para obter mais informaes, consulte Sobre as preferncias do ActionScript na pgina 44. O recurso da janela Script encontra-se disponvel 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 (Assistncia de script), semelhante ao Normal Mode (Modo Normal) em edies anteriores do Flash, ajuda voc a codificar sem que precise ter noes de sintaxe. Para obter mais informaes sobre o Script Assist, consulte Sobre o Script Assist na pgina 62. possvel carregar novos tipos de arquivos de imagem durante a execuo, o que inclui imagens JPEG progressivas e arquivos GIF e PNG no-animados. Se voc carregar um arquivo animado, o primeiro quadro da animao ser exibido. possvel atribuir identificadores de vinculao 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 execuo por meio do cache de uma representao de bitmap de suas instncias. Voc pode usar o ActionScript para acessar essa propriedade. Para obter mais informaes, consulte Sobre cache de bitmap, rolagem e desempenho na pgina 508.

20

Novidades do ActionScript no Flash 8

O dimensionamento em 9 trechos permite o dimensionamento de instncias de clipe de filme sem expanso dos traos que contornam o clipe de filme. Voc pode usar o cdigo ActionScript para acessar esse recurso no Flash Basic 8 e no Flash Professional 8 ou na ferramenta de criao do Flash 8. Para obter mais informaes, consulte Trabalhando com dimensionamento de 9 trechos no ActionScript na pgina 585. Para obter informaes sobre como acessar o dimensionamento em 9 trechos na ferramenta de criao, consulte Sobre dimensionamento em 9 trechos e smbolos de clipe de filme na pgina 91 em Usando o Flash. Agora voc pode adicionar informaes de metadados para os arquivos FLA na caixa de dilogo Publish Settings (Configuraes de publicao). Pode adicionar um nome e uma descrio ao arquivo FLA usando a caixa de dilogo para ajudar a aumentar a visibilidade da pesquisa on-line. O painel Strings (Seqncias de caracteres) est aprimorado e agora inclui suporte multilinha no campo String e um arquivo de linguagem XML. Para obter mais informaes, consulte Sobre o painel Strings na pgina 479. Um novo coletor de lixo faz parte do Flash Player, que usa um coletor incremental para melhorar o desempenho. O fluxo de trabalho para a criao de aplicativos acessveis est aprimorado. No Flash Player 8 no h mais necessidade de os desenvolvedores adicionarem todos os objetos ao ndice de tabulao para que o contedo seja lido corretamente por um leitor de tela. Para obter mais informaes sobre o ndice de tabulao, consulte tabIndex (Button.tabIndex property), tabIndex (MovieClip.tabIndex property) e tabIndex (TextField.tabIndex property) em ActionScript 2.0 Language Reference. O Flash Player aumentou a segurana dos arquivos locais; agora h mais segurana quando os arquivos SWF so executados no disco rgido. Para obter informaes sobre segurana de arquivos locais, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709. Usando o cdigo ActionScript, voc pode usar a API Drawing (API de desenho) para controlar o estilo de linhas dos traos desenhados. Para obter informaes sobre novos estilos de linha, consulte Usando estilos de linha na pgina 574. Usando o cdigo ActionScript, voc poder usar a API Drawing para criar gradientes mais complexos com os quais preencher as formas. Para obter informaes sobre preenchimentos de gradiente, consulte Usando preenchimentos de gradiente complexos na pgina 573. Voc pode usar o cdigo ActionScript para aplicar muitos filtros a objetos no Stage (como instncias de clipe de filme). Para obter informaes sobre filtros e o ActionScript, consulte Trabalhando com filtros usando ActionScript na pgina 534.

Novidades do ActionScript 2.0 e do Flash 8

21

Para fazer o upload dos arquivos para um servidor, use as APIs FileReference e FileReferenceList. Para obter mais informaes, consulte Sobre upload e download de arquivos na pgina 674. Voc pode usar o cdigo ActionScript para acessar meios novos e avanados de aplicar e manipular cores. Para obter mais informaes, consulte Definindo valores de cores na pgina 599 e ColorTransform (flash.geom.ColorTransform) em ActionScript 2.0 Language Reference. Foram feitos diversos aprimoramentos no texto, incluindo novas opes, propriedades e parmetros nas classes TextField e TextFormat. Para obter mais informaes, consulte TextField e TextFormat em ActionScript 2.0 Language Reference. Para acessar os recursos avanados de eliminao de serrilhado (FlashType), use o cdigo ActionScript. Para obter mais informaes, consulte Sobre a renderizao de fontes e texto sem serrilhado na pgina 430. Quando testar o aplicativo, voc poder excluir os arquivos ASO. Selecione Control (Controlar) > Delete ASO files (Excluir arquivos ASO) ou Control > Delete ASO files e Test Movie (Testar filme) na ferramenta de criao. Para obter informaes, consulte Usando arquivos ASO na pgina 298.

Para obter uma lista de classes, elementos de linguagem, mtodos e propriedades especficas adicionadas ao ActionScript 2.0 no Flash 8, consulte Acrscimos linguagem ActionScript na pgina 22.

Acrscimos linguagem ActionScript


Esta seo lista acrscimos aos elementos e classes da linguagem ActionScript novos ou alterados no Flash 8. As classes e os elementos de linguagem a seguir so novos acrscimos ao Flash Player 8 ou passaram a ter suporte recentemente nesse programa. As classes a seguir foram adicionadas ao ActionScript 2.0 no Flash 8:

A classe BevelFilter (do pacote flash.filters) permite a adio de efeitos de chanfro a objetos. A classe BitmapData (do pacote flash.display) permite a criao e a manipulao de imagens de bitmap transparentes ou opacas dimensionadas arbitrariamente. A classe BitmapFilter (do pacote flash.display) uma classe base para efeitos de filtro. A classe BlurFilter permite a aplicao de embaamentos a objetos no Flash. A classe ColorMatrixFilter (do pacote flash.filters) permite a aplicao de transformaes a cores ARGB e valores alfa. A classe ColorTransform (do pacote flash.geom) permite o ajuste de valores de cores em clipes de filme. A classe Color obsoleta em relao a esta classe.

22

Novidades do ActionScript no Flash 8

A classe ConvolutionFilter (do pacote flash.filters) permite a aplicao de efeitos de filtro de toro de matriz. A classe DisplacementMapFilter (do pacote flash.filters) permite o uso de valores em pixels de um objeto BitmapData para o deslocamento de um objeto. A classe DropShadowFilter (do pacote flash.filters) permite a adio de sombreamentos a objetos. A classe ExternalInterface (do pacote flash.external) permite que voc se comunique usando o ActionScript com o recipiente do Flash Player (o sistema que contm o aplicativo Flash, como um navegador com JavaScript, ou o aplicativo desktop). A classe FileReference (do pacote flash.net ) permite o upload e o download de arquivos entre o computador do usurio e um servidor. A classe FileReferenceList (do pacote flash.net) permite a seleo de um ou mais arquivos para upload. A classe GlowFilter (do pacote flash.filters) permite a adio de efeitos de brilho a objetos. A classe GradientBevelFilter (do pacote flash.filters) permite a adio de chanfros gradientes a objetos. A classe GradientGlowFilter (do pacote flash.filters) permite a adio de efeitos de brilho gradiente a objetos. A classe IME (da classe System) permite a manipulao do IME (Input Method Editor, Editor de mtodo de entrada) do sistema operacional no Flash Player. A classe Locale (do pacote mx.lang) permite o controle do modo de exibio de texto multilnge em um arquivo SWF. A classe Matrix (do pacote flash.geom) representa uma matriz de transformao que determina como mapear pontos de um espao de coordenada para o outro. O objeto Point (do pacote flash.geom) representa um local em um sistema de coordenadas bidimensional, onde x representa o eixo horizontal e y representa o eixo vertical. A classe Rectangle (do pacote flash.geom) permite a criao e a modificao de objetos Rectangle. A classe TextRenderer (do pacote flash.text) oferece funcionalidade para fontes incorporadas sem serrilhado. A classe Transform (do pacote flash.geom) coleta dados sobre transformaes de cores e manipulaes de coordenadas aplicadas a uma instncia MovieClip.
N O TA

No Flash 8 foi adicionado suporte oficial para a classe AsBroadcaster.

Novidades do ActionScript 2.0 e do Flash 8

23

Os novos elementos, mtodos e funes da linguagem adicionados a classes existentes no ActionScript incluem:

A funo global showRedrawRegions permite que o player do depurador indique as regies da tela que esto sendo redesenhadas (ou seja, regies problemticas que esto sendo atualizadas). A funo faz o player mostrar o que foi redesenhado, mas no permite que voc controle as regies de redesenho. A propriedade blendMode da classe Button, que define o modo de mistura para a instncia do boto. A propriedade cacheAsBitmap da classe Button, que permite o cache do objeto como representao interna de bitmap da instncia. A propriedade filters da classe Button, que um array indexado que contm cada objeto filtro associado ao boto. A propriedade scale9Grid da classe Button, que a regio retangular que define nove regies de dimensionamento para a instncia. A propriedade hasIME da classe System.capabilities, que indica se o sistema possui um IME instalado. A propriedade getUTCYear da classe Date, que retorna o ano dessa data, de acordo com a hora universal. A constante ALT da classe Key. O mtodo isAccessible() da classe Key retorna um valor booleano que indica se a ltima tecla pressionada pode ser acessada por outros arquivos SWF, dependendo das restries de segurana. O manipulador de eventos onHTTPStatus da classe LoadVars retorna o cdigo de status retornado do servidor (por exemplo, o valor 404 para pgina no encontrada). Para obter mais informaes, consulte onHTTPStatus (LoadVars.onHTTPStatus handler) em ActionScript 2.0 Language Reference. O mtodo attachBitmap() da classe MovieClip, que anexa uma imagem de bitmap a um clipe de filme. Para obter mais informaes, consulte BitmapData (flash.display.BitmapData) em ActionScript 2.0 Language Reference. O mtodo beginBitmapFill() da classe MovieClip, que preenche um clipe de filme com uma imagem de bitmap. Os parmetros spreadMethod, interpolationMethod e focalPointRatio do mtodo beginGradientFill() da classe MovieClip. Esse mtodo preenche uma rea de desenho com uma imagem de bitmap, e o bitmap pode ser repetido ou colocado lado a lado para preencher a rea.

24

Novidades do ActionScript no Flash 8

A propriedade blendMode da classe MovieClip, que permite a definio do modo de mistura para a instncia. A propriedade cacheAsBitmap da classe MovieClip, que permite o cache do objeto como uma representao interna de bitmap da instncia. A propriedade filters da classe MovieClip, que um array indexado que contm cada objeto filtro associado no momento instncia. O mtodo getRect() da classe MovieClip, que retorna propriedades que so os valores de coordenada mnimo e mximo da instncia especificada. O mtodo lineGradientStyle() da classe MovieClip, que especifica um estilo de linha gradiente que o Flash usa quando desenha um caminho. Os parmetros pixelHinting, noScale, capsStyle, jointStyle e miterLimit do mtodo lineStyle() da classe MovieClip. Esses parmetros especificam tipos de estilos de linha que voc pode usar ao desenhar linhas. A propriedade opaqueBackground da classe MovieClip, que define a cor de fundo opaca (no transparente) do clipe de filme como a cor que o valor hexadecimal RGB especifica. A propriedade scale9Grid da classe MovieClip, que a regio retangular que define nove regies de dimensionamento para a instncia. A propriedade scrollRect da classe MovieClip, que permite que voc role rapidamente o contedo do clipe de filme e que a janela exiba um contedo maior. A propriedade transform da classe MovieClip, que permite configuraes em relao aos limites de matriz, transformao de cores e pixels de um clipe de filme. Para obter mais informaes, consulte Transform (flash.geom.Transform) em ActionScript 2.0 Language Reference. O parmetro status da classe MovieClipLoader. O manipulador de eventos onLoadComplete retorna o cdigo de status retornado do servidor (por exemplo, o valor 404 para pgina no encontrada). Para obter mais informaes, consulte onLoadComplete (MovieClipLoader.onLoadComplete event listener) em ActionScript 2.0 Language Reference. O manipulador de eventos onLoadError da classe MovieClipLoader chamado quando um arquivo carregado com MovieClipLoader.loadClip() no pode ser carregado. O parmetro secure do mtodo SharedObject.getLocal() determina se o acesso a esse objeto compartilhado se restringe a arquivos SWF transmitidos por uma conexo HTTPS. Para obter mais informaes, consulte getLocal (SharedObject.getLocal method) em ActionScript 2.0 Language Reference. A constante ID3 da classe Sound.

Novidades do ActionScript 2.0 e do Flash 8

25

A propriedade sandboxType da classe System.security indica o tipo de sandbox de segurana em que o arquivo SWF de chamada est operando. Para obter mais informaes, consulte sandboxType (security.sandboxType property) em ActionScript 2.0 Language Reference. O mtodo parse() da classe TextField.StyleSheet. A propriedade antiAliasType da classe TextField, que define o tipo de eliminao de serrilhado utilizada na instncia TextField. A propriedade filters da classe TextField, que um array indexado que contm cada objeto filtro associado no momento instncia TextField. A propriedade gridFitType da classe TextField, que define o tipo de ajuste grade usado na instncia. Para obter informaes sobre ajuste grade e TextField.gridFitType, consulte gridFitType (TextField.gridFitType property) em ActionScript 2.0 Language Reference. A propriedade sharpness da classe TextField, que estabelece a definio das bordas de glifo para a instncia TextField. Se usar essa propriedade, ter de definir o mtodo antiAliasType() como avanado. A propriedade thickness da classe TextField, que define a espessura das bordas de glifo na instncia TextField. Se usar essa propriedade, ter de definir o mtodo antiAliasType() como avanado. O valor justify da propriedade align da classe TextFormat, que permite a justificao de um pargrafo especfico. A propriedade indent da classe TextFormat, que permite o uso de valores negativos. A propriedade kerning da classe TextFormat, que permite a ativao ou desativao do kerning para o objeto TextFormat. A propriedade leading da classe TextFormat, que permite o uso de entrelinhamento negativo, ou seja, que o espao entre as linhas seja inferior altura do texto. Isso permite que voc coloque linhas de texto juntas nos aplicativos. A propriedade letterSpacing da classe TextFormat, que permite a especificao da quantidade de espao distribuda uniformemente entre os caracteres. A propriedade _alpha da classe Video, que a quantidade especificada de transparncia para o objeto vdeo. A propriedade _height da classe Video, que indica a altura da instncia do vdeo. A propriedade _name da classe Video, que indica o nome de instncia do vdeo. A propriedade _parent da classe Video, que indica a instncia ou objeto de clipe de vdeo que contm a instncia do vdeo.

26

Novidades do ActionScript no Flash 8

A propriedade _rotation da classe Video, que permite a definio do valor de rotao da instncia do vdeo em graus. A propriedade _visible da classe Video, que permite a definio da visibilidade de uma instncia de vdeo. A propriedade _width da classe Video, que permite a definio da largura da instncia do vdeo. A propriedade _x da classe Video, que permite a definio da coordenada x da instncia do vdeo. A propriedade _xmouse da classe Video, que permite a definio da coordenada x da posio do ponteiro do mouse. A propriedade _xscale da classe Video, que permite a definio do percentual de dimensionamento horizontal da instncia do vdeo. A propriedade _y da classe Video, que permite a definio da coordenada y da instncia do vdeo. A propriedade _ymouse da classe Video, quer permite a definio da coordenada y da posio do ponteiro do mouse. A propriedade _yscale da classe Video, que permite a definio do percentual de dimensionamento vertical da instncia do vdeo. O manipulador de eventos onHTTPStatus da classe XML retorna o cdigo de status retornado do servidor (por exemplo, o valor 404 para pgina no encontrada). Para obter mais informaes, consulte onHTTPStatus (XML.onHTTPStatus handler) em ActionScript 2.0 Language Reference. A propriedade localName da classe XMLNode, que retorna o nome completo do objeto n XML (incluindo o prefixo e o nome local). A propriedade namespaceURI da classe XMLNode, que l o URI do namespace para o qual o prefixo do n XML resolve. Para obter mais informaes, consulte namespaceURI (XMLNode.namespaceURI property) em ActionScript 2.0 Language Reference. A propriedade prefix da classe XMLNode, que l o prefixo do nome do n. O mtodo getNamespaceForPrefix() da classe XMLNode, que retorna o URI do namespace associado ao prefixo especificado para o n. O mtodo getPrefixForNamespace da classe XMLNode, que retorna o prefixo associado a um URI de namespace especificado para o n.

Novidades do ActionScript 2.0 e do Flash 8

27

Sobre elementos de linguagem obsoletos


Alguns elementos de linguagem esto obsoletos no Flash Player 8. Para obter uma lista dos elementos de linguagem obsoletos e alternativas para uso no Flash Player 8, consulte as sees a seguir do ActionScript 2.0 Language Reference:

Deprecated Class summary Deprecated Function summary Deprecated Property summary Deprecated Operator summary

Alteraes de edio do ActionScript


O editor do ActionScript no painel Actions e na janela Script foi atualizado de vrias maneiras para ficar mais eficiente e fcil de usar do que nas verses anteriores da ferramenta. Essas alteraes so resumidas nesta seo. Agora voc pode usar o menu pop-up Options (Opes) dos painis Script, Debugger (Depurador) e Output (Sada) para exibir ou ocultar caracteres quando escrever arquivos de script no painel Actions ou na janela Script. Para obter informaes sobre esse recurso, consulte Exibindo caracteres ocultos na pgina 57.
View hidden characters (Exibir caracteres ocultos)

Nas verses anteriores do Flash, voc podia trabalhar no painel Actions tanto no modo normal, em que voc preenchia opes e parmetros para criar cdigo, quanto no modo especialista, em que voc adicionava comandos diretamente ao painel Script. Essas opes no estavam disponveis no Flash MX 2004 e no Flash MX Professional 2004. No entanto, no Flash Basic 8 e no Flash Professional 8, voc pode trabalhar no modo Script Assist, que semelhante ao modo normal e muito mais eficiente que ele. Para obter informaes sobre o modo Script Assist, consulte Captulo 13, Criando ActionScript com o Script Assist em Usando o Flash. Para ver um tutorial sobre o Script Assist, consulte o Captulo 13, Criando um evento startDrag/stopDrag com o Script Assist do manual Usando o Flash.
Script assist added to Actions panel (Script assist adicionado ao painel Actions)

28

Novidades do ActionScript no Flash 8

Reload modified files (Recarregar arquivos modificados)

Voc pode recarregar os arquivos de script modificados quando trabalhar em um aplicativo. exibida uma mensagem de aviso, solicitando o recarregamento dos arquivos de script modificados associados ao aplicativo em que voc est trabalhando. Esse recurso especialmente vantajoso para equipes que trabalham simultaneamente em aplicativos. Ele ajuda a evitar o trabalho com scripts desatualizados ou que verses mais recentes de um script acabem sendo substitudas. Se um arquivo de script tiver sido movido ou excludo, uma mensagem de aviso ser exibida e solicitar o salvamento dos arquivos conforme necessrio. Para obter mais informaes, consulte Sobre as preferncias do ActionScript na pgina 44.

Alteraes no modelo de segurana para arquivos SWF instalados localmente


O Flash Player 8 possui um modelo de segurana novo e aperfeioado por meio do qual os aplicativos Flash e os arquivos SWF de um computador local podem se comunicar com a Internet e o sistema de arquivos local, em vez de serem executados de um servidor remoto da Web. Ao desenvolver um aplicativo Flash, voc precisa indicar se um arquivo SWF pode se comunicar com uma rede ou com um sistema de arquivos local.
N OT A

Nesta descrio, um arquivo SWF local um arquivo SWF instalado localmente no computador de um usurio (e no disponibilizado a partir de um site) e no inclui arquivos de projetor (EXE).

Nas verses 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 definies de segurana. No Flash Player 8, um arquivo SWF no pode fazer conexes com o sistema de arquivos local e a rede (como a Internet) no mesmo aplicativo sem fazer uma configurao de segurana. Isso para sua segurana. Dessa forma, um arquivo SWF no pode ler arquivos no seu disco rgido e depois enviar o contedo deles pela Internet. A restrio de segurana afeta todo o contedo implantado localmente, seja um contedo herdado (um arquivo FLA criado em uma verso anterior do Flash) ou criado no Flash 8. Usando o Flash MX 2004 ou uma ferramenta de criao anterior, voc pode testar um aplicativo Flash que seja executado localmente e tambm acesse a Internet. No Flash Player 8, esse aplicativo agora solicita permisso ao usurio para se comunicar com a Internet.

Alteraes no modelo de segurana para arquivos SWF instalados localmente

29

Quando voc testa um arquivo no disco rgido, so necessrias vrias etapas para determinar se ele um documento local confivel (seguro) ou um documento potencialmente no-confivel (sem segurana). Se voc criar o arquivo no ambiente de criao do Flash (por exemplo, quando selecionar Control > Test Movie), seu arquivo ser considerado confivel, pois ele se encontra no ambiente de teste. No Flash Player 7 e anteriores, os arquivos SWF locais tinham permisses para acessar o sistema de arquivos local e a rede. No Flash Player 8, os arquivos SWF locais podem ter trs nveis de permisso:

Access the local file system only (Acessar somente o sistema de arquivos local), o nvel padro. O arquivo SWF local pode ser lido no sistema de arquivos local e em caminhos de rede de conveno universal de atribuio de nomes (UNC, Universal Naming Convention) e no pode se comunicar com a Internet. Access the network only (Acessar somente a rede). O arquivo SWF local pode acessar somente a rede (como a Internet) e no o sistema de arquivos local onde o arquivo SWF est instalado. Access to both the local file system and the network (Acessar o sistemas de arquivos local e a rede). O arquivo SWF local pode ser lido no sistema de arquivos local onde o arquivo est instalado, pode ser lido em qualquer servidor que lhe conceda permisso (e gravar nele) e pode criar vrios scripts para outros arquivos SWF na rede ou no sistema de arquivos local que lhe conceda permisso.

Para obter mais detalhes sobre cada nvel de permisso, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709. H tambm pequenas alteraes em System.security.allowDomain e aprimoramentos em System.security.allowInsecureDomain. Para obter mais informaes sobre segurana de arquivos locais, consulte o Captulo 17, Noes bsicas de segurana.

30

Novidades do ActionScript no Flash 8

CAPTULO 2

Escrevendo e editando o ActionScript 2.0


Ao escrever o cdigo ActionScript no Macromedia Flash Basic 8 ou no Macromedia Flash Professional 8, use o painel Actions (Aes) ou a janela Script. O painel Actions e a janela Script contm um editor de cdigo completo (o editor do ActionScript) que inclui referncias de cdigo e sinalizao por cores, formatao de cdigo, realce de sintaxe, verificao de sintaxe, depurao, nmeros de linha, quebra automtica de linha e suporte a Unicode em duas exibies diferentes. Para obter mais informaes sobre o editor do ActionScript, consulte Usando o painel Actions e a janela Script na pgina 36. Use um dos dois mtodos para escrever o cdigo ActionScript no Flash. Voc pode criar scripts que faam parte de seu documento do Flash (ou seja, scripts incorporados ao arquivo FLA) ou criar scripts externos (scripts ou classes armazenadas em arquivos externos). No possvel 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 contm o editor do ActionScript em um painel Script e ferramentas de suporte para facilitar a criao de scripts. Essas ferramentas incluem a caixa de ferramentas Actions (Aes) que oferece um acesso rpido aos elementos bsicos da linguagem ActionScript; o navegador Script que ajuda na navegao por todos os scripts do documento; e o modo Script Assist (Assistncia de script) que solicita os elementos necessrios para a criao de scripts. Para obter mais informaes sobre o painel Actions, consulte Sobre o painel Actions na pgina 37. Para obter mais informaes sobre o Script Assist, consulte Sobre o Script Assist na pgina 62. Quando precisar criar um script externo, use o editor do ActionScript na janela Script para criar um novo arquivo do ActionScript. (Voc tambm 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 assistncia a cdigo, como referncias de cdigo e sinalizao por cores, verificao de sintaxe etc., da mesma forma que no painel Actions. Para obter mais informaes sobre a janela Script, consulte Sobre a janela Script na pgina 38.

31

O Flash oferece assistncia adicional a scripts atravs de comportamentos. Os comportamentos so funes predefinidas do ActionScript que voc pode anexar a objetos no documento do Flash sem precisar criar o cdigo ActionScript. Para obter mais informaes sobre comportamentos, consulte Sobre comportamentos na pgina 65. Para obter mais informaes sobre como manipular eventos, consulte as seguintes sees:
Sobre o ActionScript e eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Organizando o cdigo ActionScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Usando o painel Actions e a janela Script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Sobre o painel Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Sobre a janela Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Sobre a codificao no painel Actions e na janela Script . . . . . . . . . . . . . . . . . . . . . . 39 Sobre recursos do painel Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Sobre comportamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Sobre as configuraes de publicao do ActionScript . . . . . . . . . . . . . . . . . . . . . . . 66

Sobre o ActionScript e eventos


No Macromedia Flash Basic 8 e no Macromedia Flash Professional 8, o cdigo ActionScript executado quando ocorre um evento: por exemplo, quando um clipe de filme carregado, quando um quadro-chave inserido na timeline ou quando o usurio clica em um boto. Os eventos podem ser ativados pelo usurio ou pelo sistema. Os usurios clicam em botes do mouse e pressionam teclas; o sistema ativa eventos quando condies especficas so atendidas ou quando processos so concludos (o arquivo SWF carregado, a timeline alcana um determinado quadro, um elemento grfico conclui o download etc.). Quando ocorre um evento, voc cria um manipulador de eventos para responder ao evento com uma ao. Compreender quando e onde ocorrero os eventos o ajudar a determinar como e onde voc responder a eles com uma ao e quais ferramentas do ActionScript utilizar em cada caso. Para obter mais informaes, consulte Sobre a criao de scripts para manipular eventos na pgina 35. Os eventos podem ser agrupados em vrias categorias: eventos de mouse e teclado, que ocorrem quando o usurio interage com seu aplicativo Flash atravs do mouse e do teclado; eventos de clipe, que ocorrem em clipes de filme; e eventos de quadro, que ocorrem em quadros na timeline. Para obter informaes sobre os tipos de scripts que podem ser criados para manipular eventos, consulte Sobre a criao de scripts para manipular eventos na pgina 35.

32

Escrevendo e editando o ActionScript 2.0

Eventos de mouse e teclado


Quando o usurio interage com seu aplicativo ou arquivo SWF, ele ativa eventos de mouse e teclado. Por exemplo, quando ele rola sobre um boto, ocorre o evento Button.onRollOver ou on(rollOver); quando ele clica em um boto, o evento Button.onRelease ativado; se uma tecla do teclado for pressionada, o evento on(keyPress) ocorrer. Voc pode criar um cdigo em um quadro ou anexar scripts a uma instncia para manipular esses eventos e adicionar toda a interatividade desejada.

Eventos de clipe
Em um clipe de filme, voc pode reagir a diversos eventos de clipe ativados quando o usurio 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 usurio entrar na cena ou permitir que os movimentos do mouse do usurio reposicionem elementos na cena.

Eventos de quadro
Em uma timeline principal ou de clipe de filme, um evento de sistema ocorre quando a reproduo entra em um quadro-chave conhecido como evento de quadro. Os eventos de quadro so teis para ativar aes baseadas na passagem de tempo (que se movem pela timeline) ou para interagir com elementos visveis no momento no Stage. Quando voc adiciona um script a um quadro-chave, ele executado quando o quadro-chave alcanado durante uma reproduo. Os script anexados a um quadro so chamados scripts de quadro. Uma das utilizaes mais comuns dos scripts de quadro interromper a reproduo quando um determinado quadro-chave alcanado. Isso feito com a funo stop(). Selecione um quadro-chave e adicione a funo stop() como um elemento de script no painel Actions.

Ao interromper arquivo SWF em um quadro-chave especfico, voc precisar executar uma ao. Voc pode, por exemplo, usar um script de quadro para atualizar dinamicamente o valor de um rtulo, gerenciar a interao dos elementos no Stage etc.

Sobre o ActionScript e eventos

33

Organizando o cdigo ActionScript


possvel anexar scripts a quadros-chave e instncias de objeto (clipes de filme, botes e outros smbolos). Entretanto, se o seu cdigo ActionScript for distribudo por vrios quadroschave e instncias de objeto, a depurao de seu aplicativo ficar muito mais difcil. Tambm ser difcil compartilhar o cdigo com diferentes aplicativos Flash. Portanto, importante que voc siga as prticas recomendadas de codificao ao criar o ActionScript no Flash. Em vez de anexar scripts aos elementos, como quadros-chave, clipes de filme e botes, responda aos eventos chamando as funes residentes em um local central. Um dos mtodos consiste em anexar o ActionScript incorporado ao primeiro ou ao segundo quadro da timeline, sempre que possvel, para que voc no precise pesquisar o arquivo FLA a fim de localizar todo o cdigo. Uma prtica comum envolve a criao de uma camada denominada actions e a incluso do cdigo ActionScript nessa camada.

Ao anexar todos os scripts a elementos individuais, voc incorpora todo o cdigo ao arquivo FLA. Se o compartilhamento de seu cdigo 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 criao de um arquivo externo torna o seu cdigo mais modular e bem organizado. medida que seu projeto for se desenvolvendo, essa convenincia ter cada vez mais utilidade do que voc imagina. Um arquivo externo ajudar na depurao e tambm no gerenciamento do controle de origem caso voc esteja trabalhando em um projeto junto com outros desenvolvedores. Para usar o cdigo ActionScript contido em um arquivo externo do AS, crie um script no arquivo FLA e use a instruo #include para acessar o cdigo armazenado externamente, como mostrado no exemplo a seguir:
#include "../core/Functions.as"

34

Escrevendo e editando o ActionScript 2.0

Tambm possvel usar o ActionScript 2.0 para criar classes personalizadas. Armazene as classes personalizadas em arquivos externos do AS e use instrues import em um script para exportar as classes para o arquivo SWF, em vez de usar instrues #include. Para obter mais informaes sobre como criar arquivos de classe, consulte Criando arquivos de classes personalizados na pgina 249 e Sobre a importao de arquivos de classes na pgina 254 que tratam da importao desses arquivos. Voc tambm pode usar componentes (clipes de filme predefinidos) para compartilhar cdigo e funcionalidade, como scripts e elementos de UI.
NO T A

O cdigo do ActionScript em arquivos externos compilado em um arquivo SWF quando voc publica, exporta, testa ou depura um arquivo FLA. Portanto, se voc fizer qualquer alterao em um arquivo externo, ser preciso salv-lo e recompilar os arquivos FLA que o utilizam.

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 organizao do cdigo e, principalmente, pelas prticas recomendadas de codificao. Para obter mais informaes sobre convenes e prticas recomendadas de codificao, consulte Convenes de codificao do ActionScript na pgina 782. Outros problemas relacionados a fluxo de trabalho e organizao de cdigo devero ser considerados quando voc usar comportamentos, que so funes predefinidas do ActionScript (consulte Sobre comportamentos na pgina 65).

Sobre a criao de scripts para manipular eventos


A criao de cdigo para eventos pode ser categorizada em dois grupos principais: eventos que ocorrem na timeline (em quadros-chave) e eventos que ocorrem em instncias de objeto (clipes de filme, botes e componentes). A interatividade de seu aplicativo ou arquivo SWF pode ser distribuda pelos vrios elementos de seu projeto; voc tambm pode optar por adicionar scripts diretamente a esses elementos. Entretanto, a Macromedia recomenda a no adio direta de scripts a esses elementos (quadros-chave e objetos). Nesse caso, voc deve responder aos eventos chamando as funes residentes em um local central, conforme descrito em Organizando o cdigo ActionScript.

Organizando o cdigo ActionScript

35

Usando o painel Actions e a janela Script


Para criar scripts em um arquivo FLA, insira o ActionScript diretamente no painel Actions. Para criar scripts externos a serem includos ou importados para o seu aplicativo, voc pode usar a janela Script (File [Arquivo] > New [Novo] e selecionar ActionScript File [Arquivo do ActionScript]) ou o seu editor de texto preferido. A utilizao do painel Actions ou da janela Script equivale ao uso dos recursos do editor do ActionScript para criar, formatar e editar o cdigo. O painel Actions e a janela Script possuem o painel Script (onde o cdigo digitado) e a caixa de ferramentas Actions. O painel Actions oferece mais alguns recursos de assistncia a cdigo do que a janela Script. O Flash oferece esses recursos no painel Actions por eles serem especialmente teis no contexto de edio do ActionScript em um arquivo FLA.
Para exibir o painel Actions, siga um destes procedimentos:

Selecione Window (Janela) > Actions (Aes). Pressione F9.

Para exibir a janela Script, siga um destes procedimentos:

Para comear a escrever um novo script, selecione File (Arquivo) > New (Novo) e ActionScript File (Arquivo do ActionScript). Para abrir um script existente, selecione File > Open (Abrir) e abra um arquivo do AS. Para editar um script j aberto, clique na guia do documento que exibe o nome do script. Sobre o painel Actions na pgina 37 Sobre a janela Script na pgina 38

Para obter mais informaes, consulte os tpicos a seguir:


36

Escrevendo e editando o ActionScript 2.0

Sobre o painel Actions


Use o painel Actions para criar o ActionScript em um documento do Flash (arquivo FLA). O painel consiste em trs painis, e cada um deles oferece suporte criao e ao gerenciamento de scripts.
Actions (Aes), caixa Navegador Script de ferramentas Script, painel Menu pop-up

Caixa de ferramentas Actions Use esta caixa de ferramentas para pesquisar uma lista categrica de elementos da linguagem ActionScript (funes, 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 tambm pode adicionar elementos de linguagem aos scripts usando o boto Add (+) (Adicionar) localizado na barra de ferramentas do painel Actions. Para obter mais informaes, consulte Sobre as barras de ferramentas do painel Actions e da janela Script na pgina 40. Navegador Script

Exibe uma lista hierrquica de elementos do Flash (clipes de filme, quadros e botes) 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 reproduo passar para essa posio na timeline. Se voc clicar duas vezes em um item do navegador Script, o script ficar preso (travado no lugar). Para obter mais informaes, consulte Prendendo scripts no painel Actions na pgina 63.

Sobre o painel Actions

37

Painel Script

No painel Script, voc digita seu cdigo. O painel fornece ferramentas para a criao de scripts em um editor completo (o editor do ActionScript) que inclui verificao e formatao de sintaxe, referncias de cdigo, sinalizao por cores, depurao e outros recursos que simplificam a criao. Para obter mais informaes, consulte Usando o painel Actions e a janela Script na pgina 36. Para obter informaes sobre cada boto da barra de ferramentas do painel Actions, consulte Sobre a codificao no painel Actions e na janela Script na pgina 39. Para obter mais informaes sobre os recursos do painel Actions, consulte os seguintes tpicos:

Sobre as barras de ferramentas do painel Actions e da janela Script na pgina 40 Sobre as opes de edio do ActionScript na pgina 42 Sobre as referncias de cdigo no Flash na pgina 47 Formatando cdigo na pgina 53 Usando o realce de sintaxe na pgina 54 Usando nmeros de linha e quebra automtica de linha na pgina 55 Usando teclas de atalho de Escape na pgina 56 Exibindo caracteres ocultos na pgina 57 Usando a ferramenta Find na pgina 58 Verificando sintaxe e pontuao na pgina 59 Importando e exportando scripts na pgina 60

Sobre a janela Script


Voc pode criar e editar o ActionScript na janela Script ao criar um novo arquivo do ActionScript, do Flash Communication ou do Flash JavaScript. Use a janela Script para criar e editar arquivos de script externos. A janela oferece suporte sinalizao da sintaxe por cores, a referncias de cdigo e a outras opes de editor. Nessa janela, possvel criar um ActionScript externo, a comunicao do ActionScript e arquivos do Flash JavaScript. Dependendo do tipo de arquivo de script externo criado, a caixa de ferramentas Actions fornecer uma lista completa dos elementos de linguagem disponveis para cada um deles. Ao usar a janela Script, voc perceber que alguns dos outros recursos de assistncia a cdigo, como o navegador Script, o modo Script Assist e os comportamentos, no estaro disponveis. Isso ocorre porque esses recursos so teis apenas no contexto de criao de um documento do Flash, e no de criao de um arquivo de script externo.

38

Escrevendo e editando o ActionScript 2.0

Voc tambm observar que vrias opes disponveis no painel Actions no esto disponveis na janela Script. A janela Script oferece suporte s seguintes opes de editor: caixa de ferramentas Actions, recursos localizar e substituir, verificao de sintaxe, formatao automtica, referncias de cdigo e opes de depurao (somente arquivos do ActionScript). Alm disso, ela oferece suporte exibio de nmeros de linha, caracteres ocultos e quebra automtica de linha.
Para exibir a janela Script:
1. 2.

Selecione File (Arquivo) > New (Novo). Selecione o tipo de arquivo externo que deseja criar (arquivo do ActionScript, arquivo do Flash Communication ou arquivo do Flash JavaScript).

possvel abrir vrios arquivos externos ao mesmo tempo; os nomes dos arquivos so exibidos em guias na parte superior da janela Script. Para obter mais informaes sobre os recursos da janela Script, consulte os seguintes tpicos:

Sobre as barras de ferramentas do painel Actions e da janela Script na pgina 40 Sobre as opes de edio do ActionScript na pgina 42 Sobre as referncias de cdigo no Flash na pgina 47 Formatando cdigo na pgina 53 Usando o realce de sintaxe na pgina 54 Usando nmeros de linha e quebra automtica de linha na pgina 55 Usando teclas de atalho de Escape na pgina 56 Exibindo caracteres ocultos na pgina 57 Usando a ferramenta Find na pgina 58 Verificando sintaxe e pontuao na pgina 59 Importando e exportando scripts na pgina 60

Sobre a codificao no painel Actions e na janela Script


O painel Script, local de edio do cdigo, o principal elemento do painel Actions e da janela Script. O painel Actions e a janela Script oferecem recursos bsicos de assistncia a cdigo e de edio de script, como referncias de cdigo, sinalizao por cores, formatao automtica etc. Os recursos que ajudam na edio do cdigo podem ser acessados na barra de ferramentas do painel Actions ou da janela Script, atravs do sistema de menu e no prprio painel Script.

Sobre a codificao no painel Actions e na janela Script

39

Os tpicos a seguir apresentam os vrios recursos do editor do ActionScript (painel Actions e janela Script):

Sobre as barras de ferramentas do painel Actions e da janela Script na pgina 40 Sobre as opes de edio do ActionScript na pgina 42 Sobre as preferncias do ActionScript na pgina 44 Sobre as referncias de cdigo no Flash na pgina 47 Formatando cdigo na pgina 53 Usando o realce de sintaxe na pgina 54 Usando nmeros de linha e quebra automtica de linha na pgina 55 Usando teclas de atalho de Escape na pgina 56 Exibindo caracteres ocultos na pgina 57 Usando a ferramenta Find na pgina 58 Verificando sintaxe e pontuao na pgina 59 Importando e exportando scripts na pgina 60

Para obter os recursos especficos apenas do painel Actions, por exemplo, prender o script e navegador Script, consulte Sobre recursos do painel Actions na pgina 62.

Sobre as barras de ferramentas do painel Actions e da janela Script


As barras de ferramentas do painel Actions e da janela Script contm links para os recursos de assistncia a cdigo que ajudam a simplificar e agilizar a codificao no ActionScript. Elas sero diferentes caso voc utilize o editor do ActionScript no painel Actions ou no painel Script. A imagem a seguir exibe os recursos localizados na barra de ferramentas do painel Actions. As opes marcadas esto disponveis apenas no painel Actions.
Add a new item to the script (Adicionar um novo item ao script) Find (Localizar) Debug Options (Opes de depurao)* Insert target path (Inserir caminho de destino)* Script Assist * Menu pop-up*

Show Code Hint (Mostrar referncia de cdigo) Auto Format (Formatao automtica) Check Syntax (Verificar sintaxe)

Referncia

* Somente no painel Actions

40

Escrevendo e editando o ActionScript 2.0

Os recursos localizados na barra de ferramentas sero discutidos em detalhes em Usando o painel Actions e a janela Script na pgina 36. Veja a seguir um breve resumo dos botes disponveis nas barras de ferramentas do painel Actions e da janela Script.
NO TA

Algumas opes a seguir esto localizadas apenas no painel Actions. Esses recursos esto 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 tambm existentes na caixa de ferramentas do ActionScript. A seleo de um item na lista categorizada de elementos de linguagem adiciona-o ao script. Find (Localizar) Localize e substitua qualquer texto no cdigo ActionScript. Para obter mais informaes, consulte Usando a ferramenta Find na pgina 58. Insert target path (Inserir caminho de destino)

Somente no painel Actions. Ajuda na configurao de um caminho de destino relativo ou absoluto de uma ao no script. Para obter mais informaes, consulte Inserindo caminhos de destino na pgina 65.

Check Syntax (Verificar sintaxe)

Verifique erros na sintaxe do script atual. Os erros de sintaxe so listados no painel Output (Sada). Para obter mais informaes, consulte Verificando sintaxe e pontuao na pgina 59.

Formate seu script para uma sintaxe de codificao apropriada e para melhorar a legibilidade. Voc pode definir as preferncias de formatao automtica na caixa de dilogo Preferences (Preferncias), disponvel no menu Edit (Editar) ou no menu pop-up do painel Actions. Para obter mais informaes, consulte Formatando cdigo na pgina 53.
Auto Format (Formatao automtica) Show Code Hint (Mostrar referncia de cdigo)

Se tiver desativado a referncia de cdigo automtica, voc poder usar o comando Show Code Hint para exibir manualmente uma referncia de cdigo relativa linha de cdigo na qual estiver trabalhando. Para obter mais informaes, consulte Sobre o Script Assist na pgina 62.

Debug Options (Opes de depurao) Defina e remova pontos de interrupo no script, para que, ao depurar seu documento do Flash, voc possa parar e, em seguida, percorrer o script linha por linha. As opes de depurao agora esto disponveis na janela Script e tambm no painel Actions, mas somente para arquivos do ActionScript. Essa opo est desativada para arquivos do ActionScript Communication e do Flash JavaScript. Para obter mais informaes sobre como depurar documentos do Flash, consulte Depurando scripts na pgina 745. Para obter informaes sobre como definir e remover pontos de interrupo, consulte Definindo e removendo pontos de interrupo na pgina 755.

Sobre a codificao no painel Actions e na janela Script

41

Script Assist Somente no painel Actions. No modo Script Assist, voc solicitado a inserir os elementos necessrios criao de scripts. Para obter mais informaes, consulte Sobre o Script Assist na pgina 62. Reference (Referncia)

Exiba um tpico da Ajuda de referncia para o elemento da linguagem ActionScript selecionado no painel Script. Por exemplo, se voc clicar em uma instruo import e, em seguida, clicar em Reference, o tpico da Ajuda relativo import ser exibido no painel Help (Ajuda).

Menu pop-up Somente no painel Actions. Contm os vrios comandos e preferncias que se aplicam ao painel Actions ou janela Script. Por exemplo, voc pode definir nmeros de linha e quebra automtica de linha no editor do ActionScript; acessar as preferncias do ActionScript e importar ou exportar scripts. Para obter mais informaes, consulte Sobre as opes de edio do ActionScript na pgina 42.

Sobre as opes de edio do ActionScript


A janela Script e o painel Actions oferecem vrios recursos de assistncia a cdigo ferramentas que facilitam bastante a criao e a manuteno de scripts. Essas opes de ferramenta esto disponveis na barra de ferramentas do painel Actions ou da janela Script e no menu pop-up do painel Actions. Durante a edio do ActionScript na janela Script, essas opes estaro disponveis na barra de ferramentas e no sistema de menu do Flash. O painel Actions oferece mais opes do que as disponveis na janela Script. Isso ocorre porque essas opes adicionais so teis no contexto de criao do ActionScript incorporado a um documento do Flash e no na criao de arquivos externos do ActionScript. Para obter informaes sobre quais dessas opes esto disponveis na janela Script, consulte Sobre a janela Script na pgina 38. As opes disponveis na janela Script e no painel Actions so discutidas em Sobre as barras de ferramentas do painel Actions e da janela Script na pgina 40. As opes a seguir esto disponveis no menu pop-up do painel Actions e em diversos menus da janela Script.
N OT A 42

Algumas opes a seguir esto localizadas apenas no painel Actions. Esses recursos esto marcados como Somente no painel Actions. Reload code hints (Recarregar referncias de cdigo) Somente no painel Actions. Se personalizar o modo Script Assist criando mtodos personalizados, voc poder recarregar as referncias de cdigo sem reiniciar o Flash 8.

Escrevendo e editando o ActionScript 2.0

Pin script (Prender script) Somente no painel Actions. Prende (trava no lugar) o script exibido no momento no painel Script. Para obter mais informaes, consulte Prendendo scripts no painel Actions na pgina 63. Close script (Fechar script)

Somente no painel Actions. Fecha o script aberto no Somente no painel Actions. Fecha todos os

momento.
Close all scripts (Fechar todos os scripts)

scripts abertos no momento.


Go to line (Ir para linha)

Localiza e reala a linha especificada no painel Script.

Find and replace (Localizar e substituir) Localiza e substitui qualquer texto contido nos scripts do painel Script. Para obter mais informaes, consulte Usando a ferramenta Find na pgina 58.

Repete a ao de busca para a ltima seqncia de caracteres de pesquisa digitada na ferramenta Find. Para obter mais informaes, consulte Usando a ferramenta Find na pgina 58.
Find again (Localizar novamente) Import script (Importar script) Permite importar um arquivo de script (ActionScript) para o painel Script. Para obter mais informaes, consulte Importar e exportar preferncias na pgina 61. Export script (Exportar script)

Exporta o script atual para um arquivo externo do ActionScript (AS). Para obter mais informaes, consulte Importar e exportar preferncias na pgina 61.

Insira rapidamente elementos de linguagem e estruturas de sintaxe comuns nos scripts. Por exemplo, quando voc pressionar Esc+g+p no painel Script, a funo gotoAndPlay() ser inserida no script. Quando voc seleciona a opo Esc Shortcut Keys no menu pop-up do painel Actions, todas as teclas de atalho disponveis de Escape so exibidas na caixa de ferramentas Actions. Para obter mais informaes, consulte Usando teclas de atalho de Escape na pgina 56.
Esc shortcut keys (Teclas de atalho de Esc)

Exiba os caracteres ocultos em seu script que podem ser espaos, tabulaes e quebras de linha. Para obter mais informaes, consulte Exibindo caracteres ocultos na pgina 57.
Hidden characters (Caracteres ocultos) Line numbers (Nmeros de linha)

Exibe nmeros de linha no painel Script. Para obter mais informaes, consulte Usando nmeros de linha e quebra automtica de linha na pgina 55.

Preferences (Preferncias) Somente no painel Actions. Exibe a caixa de dilogo de preferncias do ActionScript. Para obter mais informaes, consulte Sobre as preferncias do ActionScript na pgina 44.

Sobre a codificao no painel Actions e na janela Script

43

Word wrap (Quebra automtica de linha) Para quebrar as linhas do script que excedem o tamanho atual da janela Script, selecione Word Wrap (Quebra automtica de linha) no menu pop-up do painel Actions. Quando voc usar a janela Script, selecione Word Wrap no menu View (Exibir). Para obter mais informaes, consulte Usando nmeros de linha e quebra automtica de linha na pgina 55. Group Actions with (Agrupar aes com) Somente no painel Actions. Permite agrupar o painel Actions (que inclui a caixa de ferramentas Actions e o navegador Script) com outros painis dentro do ambiente de criao do Flash.

O menu pop-up do painel Actions tambm inclui os comandos Print (Imprimir), Help (Ajuda) e comandos de redimensionamento de painel.

Sobre as preferncias do ActionScript


A edio de um cdigo no painel Actions ou na janela Script permite definir e modificar um nico conjunto de preferncias. Por exemplo, voc pode controlar o recuo automtico, as referncias de cdigo e a sinalizao por cores, alm de vrios outros recursos bsicos de edio de cdigo.
Para acessar as preferncias do ActionScript:
1.

Para acessar as preferncias do ActionScript em um arquivo FLA atravs do painel Actions, selecione Preferences (Preferncias) no menu pop-up ou Edit (Editar) > Preferences (Preferncias) (Windows) ou Flash > Preferences (Macintosh) e clique em ActionScript na lista Category (Categoria). Para acessar as preferncias do ActionScript na janela Script, selecione Edit > Preferences e clique em ActionScript (Windows) ou escolha Flash > Preferences e clique em ActionScript (Macintosh).

2.

44

Escrevendo e editando o ActionScript 2.0

A imagem a seguir mostra as configuraes do ActionScript que podem ser alteradas no Flash 8.

Voc pode definir as seguintes preferncias:


Automatic indentation (Recuo automtico) Quando o recuo automtico estiver ativado, o texto digitado aps um parntese de abertura [(] ou uma chave de abertura ({) ser recuado automaticamente conforme a configurao Tab Size (Tamanho da tabulao) nas preferncias do ActionScript. Para obter mais informaes, consulte Formatando cdigo na pgina 53. Tab size (Tamanho da tabulao) Especifica o nmero de caracteres segundo o qual a linha ser deslocada quando o recuo automtico estiver ativado. Code hints (Referncias de cdigo)

Permite referncias de cdigo no painel Script. Para obter mais informaes sobre como usar referncias de cdigo, consulte Sobre as referncias de cdigo no Flash na pgina 47. Especifica o atraso (em segundos) antes da exibio das referncias de Especifica a fonte usada no painel Script.

Delay (Atraso)

cdigo.
Font (Fonte)

Sobre a codificao no painel Actions e na janela Script

45

Use dynamic font mapping (Usar mapeamento dinmico de fontes)

Executa uma verificao para assegurar que a famlia de fontes selecionada possui os glifos necessrios para renderizar cada caractere. Caso no haja os glifos necessrios, o Flash substituir uma famlia de fontes contendo os caracteres necessrios. Para obter mais informaes, consulte Formatando cdigo na pgina 53.

Encoding (Codificao)

Especifica a codificao de caracteres usada quando voc abre, salva, importa e exporta arquivos do ActionScript. Para obter mais informaes, consulte Importando e exportando scripts na pgina 60. Permite que voc selecione o momento de exibio de avisos sobre a modificao, a movimentao ou a excluso de um arquivo de script. Selecione Always (Sempre), Never (Nunca) ou Prompt.
Always (Sempre) Nenhum aviso exibido quando uma alterao detectada e o arquivo automaticamente recarregado. Never (Nunca)

Reload modified files (Recarregar arquivos modificados)

Nenhum aviso exibido quando uma alterao detectada e o arquivo permanece no estado atual.

Prompt (Padro) Um aviso exibido quando uma alterao detectada e voc pode optar por recarregar ou no o arquivo.

Quando voc criar aplicativos que envolvam arquivos de script externos, esse recurso ajudar a evitar a substituio de um script modificado por um membro da equipe desde a abertura do aplicativo ou a publicao do aplicativo com verses antigas de scripts. Os avisos permitem fechar automaticamente um script e reabrir a verso mais atual modificada.
Syntax colors (Cores da sintaxe)

Especifica as cores da sinalizao por cores nos scripts. Com o recurso de sinalizao por cores ativado, possvel selecionar as cores para exibio no painel Script.

Language (Idioma) Abre a caixa de dilogo ActionScript Settings (Configuraes do ActionScript). Para obter mais informaes, consulte Modificando o caminho de classe na pgina 68.

46

Escrevendo e editando o ActionScript 2.0

Sobre as referncias de cdigo no Flash


No painel Actions ou na janela Script, possvel usar vrios recursos para ajudar na criao de um cdigo sintaticamente correto. As referncias de cdigo ajudam a criar um cdigo com rapidez e preciso. As referncias de cdigo incluem dicas de ferramenta contendo a sintaxe correta e menus que permitem selecionar nomes de mtodo e de propriedade. As sees a seguir mostram como criar um cdigo que utiliza esses recursos.

Sobre a ativao de referncias de cdigo na pgina 47 Usando referncias de cdigo na pgina 48 Sobre a atribuio de tipo a objetos para ativar referncias de cdigo na pgina 51 Sobre o uso de sufixos para ativar referncias de cdigo na pgina 51 Sobre o uso de comentrios para ativar referncias de cdigo na pgina 53

Sobre a ativao de referncias de cdigo


Quando voc trabalha no painel Actions ou na janela Script, o Flash pode detectar a ao que est sendo inserida e exibir uma referncia de cdigo. Os dois estilos diferentes de referncia de cdigo so uma dica de ferramenta que contm a sintaxe completa da ao e um menu pop-up que lista possveis nomes de mtodo ou de propriedade (algumas vezes usado como uma forma de concluso do cdigo). Um menu pop-up exibido para parmetros, propriedades e eventos quando voc usa a atribuio de tipo estrita ou nomeao para objetos, conforme discutido no restante desta seo. As referncias de cdigo algumas vezes sero exibidas se voc clicar duas vezes em um item na caixa de ferramentas Actions ou clicar em Add (+) na barra de ferramentas do painel Actions ou da janela Script para adicionar aes ao painel Script. Para obter informaes sobre como usar referncias de cdigo quando elas aparecerem, consulte Usando referncias de cdigo na pgina 48.
N OT A

A exibio das referncias de cdigo ativada automaticamente para classes nativas que no exigem a criao de uma instncia da classe e a atribuio de nome a ele, como Math, Key, Mouse etc.

Para assegurar a ativao das referncias de cdigo, necessrio que as opes de Code Hints (Referncias de cdigo) estejam selecionadas na caixa de dilogo Preferences do ActionScript. Para obter mais informaes, consulte Sobre o painel Actions na pgina 37.

Sobre a codificao no painel Actions e na janela Script

47

Usando referncias de cdigo


As referncias de cdigo so ativadas por padro. Ao definir preferncias, possvel desativar referncias de cdigo ou determinar a rapidez com que elas so exibidas. Quando as referncias de cdigo esto desativadas nas preferncias, ainda possvel exibir uma referncia de cdigo para um comando especfico.
Para especificar configuraes de referncias de cdigo automticas, siga um destes procedimentos:

No painel Actions ou na janela Script, selecione Edit > Preferences (Windows) ou Flash > Preferences (Macintosh), clique em ActionScript na lista Category e ative ou desative Code Hints. No painel Actions, selecione Preferences no menu pop-up (na parte superior direita do painel) e ative ou desative Code Hints nas preferncias do ActionScript.

Se voc ativar as referncias de cdigo, poder tambm especificar um atraso, em segundos, antes que elas apaream. Por exemplo, se voc no estiver familiarizado com o ActionScript, poder preferir no usar atrasos, para que as referncias de cdigo sempre apaream imediatamente. No entanto, se voc geralmente souber o que quer digitar e s precisar das referncias de cdigo ao usar elementos de linguagem desconhecidos, poder especificar um atraso para que elas no apaream quando no desejar us-las.
Para especificar um atraso para as referncias de cdigo:
1.

No painel Actions ou na janela Script, selecione Edit > Preferences (Windows) ou Flash > Preferences (Macintosh) no menu principal. Clique em ActionScript na lista Category. Use o controle deslizante para selecionar o tempo de atraso. Esse tempo definido em segundos.

2. 3.

Para trabalhar com referncias de cdigo no estilo de dica de ferramenta:


1.

Para exibir a referncia de cdigo, digite um parntese de abertura [(] aps um elemento que exija parnteses (por exemplo, aps o nome de um mtodo, um comando, como if ou do..while etc.

48

Escrevendo e editando o ActionScript 2.0

A referncia de cdigo ser exibida.

2.

Digite um valor para o parmetro. Se houver mais de um parmetro, separe os valores por vrgulas. Para funes ou instrues, por exemplo, for loop, separe os parmetros por ponto-e-vrgula. Os comandos superpostos (funes ou mtodos que podem ser chamados com conjuntos diferentes de parmetros), como gotoAndPlay() ou for, exibem um indicador que permite selecionar o parmetro a ser definido. Clique nos pequenos botes de seta ou pressione Control+seta para a esquerda e Control+seta para a direita para selecionar o parmetro.

3.

Para desconsiderar a referncia de cdigo, siga um destes procedimentos:


Para trabalhar com referncias de cdigo no estilo de menu:


1.

Para exibir a referncia de cdigo, digite um ponto aps o nome da varivel ou objeto.

NO TA

Se nenhuma referncia de cdigo for exibida, verifique se voc no desativou Code Hints nas preferncias do ActionScript (Edit > Preferences (Windows) ou Flash > Preferences (Macintosh)) e clique em ActionScript na lista Category). Para exibir referncias de cdigo para uma varivel ou um objeto criado, verifique se voc atribuiu nome varivel ou ao objeto corretamente (consulte Sobre o uso de sufixos para ativar referncias de cdigo na pgina 51) ou se usou a atribuio de tipo estrita para a varivel ou o objeto (consulte Sobre a atribuio de tipo a objetos para ativar referncias de cdigo na pgina 51).

Digite um parntese de fechamento [)]. Clique fora da instruo. Pressione Escape.

Sobre a codificao no painel Actions e na janela Script

49

O menu de referncias de cdigo exibido.

2. 3. 4.

Para percorrer as referncias de cdigo, use as teclas de seta para cima e de seta para baixo. Para selecionar um item no menu, pressione Enter ou Tab ou clique duas vezes no item. Para desconsiderar a referncia de cdigo, siga um destes procedimentos:

Para exibir manualmente uma referncia de cdigo:


1.

Clique em um local no cdigo onde possvel exibir as referncias de cdigo, como nos seguintes locais:

2.

Siga um destes procedimentos:

N OT A 50

Se nenhuma referncia de cdigo for exibida, verifique se voc no desativou as referncias de cdigo nas preferncias do ActionScript (Edit > Preferences (Windows) ou Flash > Preferences (Macintosh)) e clique em ActionScript na lista Category). Para exibir referncias de cdigo para uma varivel ou um objeto criado, verifique se voc atribuiu nome varivel ou ao objeto corretamente (consulte Sobre o uso de sufixos para ativar referncias de cdigo na pgina 51) ou se usou a atribuio de tipo estrita para a varivel ou o objeto (consulte Sobre a atribuio de tipo a objetos para ativar referncias de cdigo na pgina 51).

Selecione um dos itens de menu. Clique acima ou abaixo da janela de menu. Digite um parntese de fechamento [)] se j tiver digitado um parntese de abertura [(]. Pressione Escape.

Aps o ponto (.) que segue uma instruo ou um comando, onde uma propriedade ou um mtodo deve ser digitado Entre parnteses [()] em um nome de mtodo Clique em Show Code Hint (Mostrar referncia de cdigo) na barra de ferramentas do painel Actions ou da janela Script. Pressione Control+Barra de espaos (Windows) ou Command+Barra de espaos (Macintosh). Se estiver trabalhando no painel Actions, selecione Show Code Hint no menu pop-up.

Escrevendo e editando o ActionScript 2.0

Sobre a atribuio de tipo a objetos para ativar referncias de cdigo


Com o ActionScript 2.0, voc pode usar a atribuio de tipo estrita para uma varivel que tem como base uma classe interna, como Button, Array etc. Nesse caso, o painel Script exibir referncias de cdigo para a varivel. Por exemplo, suponha que voc defina o seguinte cdigo:
var names:Array = new Array(); names.

Assim que voc digita o ponto (.), o Flash exibe uma lista de mtodos e propriedades disponveis para objetos Array em um menu pop-up, porque voc digitou a varivel como se fosse um array. Para obter mais informaes sobre como atribuir tipos de dados, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85. Para obter informaes sobre como usar referncias de cdigo quando elas aparecerem, consulte Usando referncias de cdigo na pgina 48.

Sobre o uso de sufixos para ativar referncias de cdigo


Se voc usa o ActionScript 1 ou deseja exibir referncias de cdigo para objetos criados por voc sem atribuir um tipo estritamente a eles (consulte Sobre a atribuio de tipo a objetos para ativar referncias de cdigo na pgina 51), adicione um sufixo especial ao nome de cada objeto ao cri-lo. Por exemplo, os sufixos que ativam referncias de cdigo para a classe Array e a classe Camera so, respectivamente, _array e _cam. Por exemplo, se digitar o seguinte cdigo
var my_array = new Array(); var my_cam = Camera.get();

voc poder digitar um dos elementos a seguir (o nome de varivel seguido por um ponto):
my_array. my_cam.

Referncias de cdigo sero exibidas para os objetos Array e Camera. Para objetos que aparecem no Stage, use o sufixo na caixa de texto Instance Name (Nome de instncia) no inspetor Properties (Propriedades). Por exemplo, para exibir referncias de cdigo de objetos MovieClip, use o inspetor Properties para atribuir nomes de instncia com o sufixo _mc a todos os objetos MovieClip. Assim, sempre que voc digitar o nome da instncia seguido por um ponto, as referncias de cdigo aparecero. Embora no sejam necessrios sufixos para ativar as referncias de cdigo quando voc usar a atribuio de tipo estrita a um objeto, us-los de forma consistente ajudar a entender seu cdigo.

Sobre a codificao no painel Actions e na janela Script

51

A tabela abaixo lista os sufixos necessrios para o suporte a referncias de cdigo automticas:
Tipo de objeto
Array Button Camera (Cmera) Color ContextMenu ContextMenuItem Date Error LoadVars LocalConnection

Sufixo da varivel
_array _btn _cam _color _cm _cmi _date _err _lv _lc

Microphone (Microfone) _mic MovieClip MovieClipLoader PrintJob NetConnection NetStream SharedObject Sound String TextField TextFormat Video XML XMLNode XMLSocket _mc _mcl _pj _nc _ns _so _sound _str _txt _fmt _video _xml _xmlnode _xmlsocket

Para obter informaes sobre como usar referncias de cdigo quando elas aparecerem, consulte Usando referncias de cdigo na pgina 48.

52

Escrevendo e editando o ActionScript 2.0

Sobre o uso de comentrios para ativar referncias de cdigo


Voc tambm pode usar os comentrios do ActionScript a fim de especificar a classe de um objeto para referncias de cdigo. O exemplo a seguir informa ao ActionScript que a classe da instncia theObject Object e assim por diante. Se voc digitar mc e ponto aps esses comentrios, sero exibidas as referncias de cdigo com a lista de mtodos e propriedades de MovieClip. Se voc digitar theArray e ponto, ser exibido um menu com uma lista de mtodos e propriedades de Array.
// Object theObject; // Array theArray; // MovieClip theMc;

Entretanto, a Macromedia recomenda que voc utilize a atribuio estrita de tipos de dados (consulte Sobre a atribuio de tipo a objetos para ativar referncias de cdigo na pgina 51) ou sufixos (consulte Sobre o uso de sufixos para ativar referncias de cdigo na pgina 51) em vez dessa tcnica, porque eles ativam automaticamente as referncias de cdigo e tornam o cdigo mais compreensvel. Para obter mais informaes sobre como usar referncias de cdigo, consulte Usando referncias de cdigo na pgina 48.

Formatando cdigo
Voc pode especificar configuraes para determinar se o cdigo ser formatado e recuado automtica ou manualmente. Voc tambm pode optar por usar o mapeamento dinmico de fontes, que assegura o uso de fontes corretas durante o trabalho com texto multilnge.
Para definir opes de formato:
1.

No painel Actions, selecione Preferences no menu pop-up (na parte superior direita do painel). Na caixa de dilogo Preferences, selecione Auto Format (Formatao automtica). Como alternativa, na janela Script, selecione Edit > Preferences (Windows) ou Flash > Preferences (Macintosh). Na caixa de dilogo Preferences, selecione Auto Format.

2.

Selecione uma das opes de Auto Format. Para verificar o efeito de cada seleo, observe o painel Preview (Visualizar).

Depois de definir as opes de Auto Format, as configuraes sero aplicadas automaticamente ao cdigo que voc escrever, e no ao cdigo existente; voc dever aplicar suas configuraes manualmente ao cdigo existente. Formate manualmente o cdigo que foi formatado com configuraes diferentes, importado de outro editor etc.

Sobre a codificao no painel Actions e na janela Script

53

Para formatar o cdigo de acordo com as configuraes de Auto Format, siga um destes procedimentos:

Clique no boto Auto Format na barra de ferramentas do painel Actions ou da janela Script. No painel Actions, selecione Auto Format no menu pop-up. Pressione Control+Shift+F (Windows) ou Command+Shift+F (Macintosh). Na janela Script, selecione Tools (Ferramentas) > Auto Format (Formatao automtica).

Para usar o mapeamento dinmico de fontes:

Para ativar ou desativar o mapeamento dinmico de fontes, marque ou desmarque Use dynamic font mapping (Usar mapeamento dinmico de fontes) na caixa de dilogo Preferences. Por padro, o mapeamento dinmico de fontes est desativado para melhorar o desempenho durante a edio de scripts. Se estiver trabalhando com texto multilnge, ative o mapeamento dinmico de fontes para assegurar o uso das fontes corretas.

Para usar o recuo automtico:

Para ativar ou desativar o recuo automtico, marque ou desmarque Automatic indentation (Recuo automtico) na caixa de dilogo Preferences. Quando o recuo automtico estiver ativado, o texto digitado aps um parntese de abertura [(] ou uma chave de abertura ({) ser recuado automaticamente conforme a configurao Tab Size (Tamanho da tabulao) nas preferncias do ActionScript. Nos scripts, selecione uma linha e pressione Tab para recu-la. Para remover o recuo, selecione a linha e pressione Shift+Tab.

Usando o realce de sintaxe


No ActionScript, assim como em qualquer linguagem, a sintaxe a maneira como os elementos so reunidos para terem significado. Se for usada uma sintaxe incorreta do ActionScript, os scripts no funcionaro. Quando voc escreve scripts no Flash Basic 8 e no Flash Professional 8, os comandos no suportados pela verso do exibidor especificado aparecero em amarelo na caixa de ferramentas Actions. Por exemplo, se a verso do arquivo SWF do Flash Player estiver definida como Flash 7, o ActionScript que s suportado pelo Flash Player 8 aparecer em amarelo na caixa de ferramentas Actions. (Para obter informaes sobre como definir a verso do arquivo SWF do Flash Player, consulte Captulo 17, Definindo opes de publicao para o formato de arquivo SWF do Flash em Using Flash (Usando o Flash).

54

Escrevendo e editando o ActionScript 2.0

Tambm possvel definir uma preferncia para que o Flash destaque com cores partes dos scripts enquanto voc os escreve a fim de realar erros de digitao. Por exemplo, imagine que voc definiu a preferncia de sinalizao da sintaxe por cores para que as palavras-chave apaream em azul-escuro. Ao criar o cdigo, se voc digitar var, a palavra var aparecer em azul. Entretanto, se, por engano, voc digitar vae, a palavra vae continuar na cor preta, indicando que houve erro de digitao. Para obter informaes sobre palavras-chave, consulte Sobre palavras-chave na pgina 146.
Para definir preferncias de sinalizao de sintaxe por cores enquanto digita, siga um destes procedimentos:

Selecione Edit > Preferences (Windows) ou Flash > Preferences (Macintosh), clique em ActionScript na lista Category e especifique as configuraes Syntax coloring (Sinalizao de sintaxe por cores). No painel Actions, selecione Preferences no menu pop-up (na parte superior direita do painel) e especifique as configuraes Syntax coloring nas preferncias do ActionScript. Com o ponteiro do mouse focalizado no painel Script, pressione Control-U (Windows) ou Command-U (Macintosh).

possvel alterar as configuraes de cor para palavras-chave, comentrios, identificadores e seqncias de caracteres. Para obter informaes sobre identificadores e seqncias de caracteres, consulte Terminologia na pgina 841 e Tipo de dados String na pgina 83. Para obter informaes sobre comentrios, consulte Sobre comentrios na pgina 139.

Usando nmeros de linha e quebra automtica de linha


Voc pode optar por exibir nmeros de linha e quebrar as linhas longas de cdigo. Geralmente, voc dever ativar os nmeros de linha e a quebra automtica de linha para facilitar a edio do cdigo. Os nmeros de linha facilitam a anlise do cdigo e a rolagem por ele durante sua edio ou modificao. A quebra automtica de linha ajuda a evitar a rolagem horizontalmente por longas linhas de cdigo (principalmente durante o trabalho no ambiente de criao ou em baixas resolues de tela).
Para ativar ou desativar nmeros de linha, siga um destes procedimentos:

No painel Actions, selecione Line Numbers (Nmeros de linha) no menu pop-up. Na janela Script, selecione Tools > Line Numbers. Pressione Control+Shift+L (Windows) ou Command+Shift+L (Macintosh).

Sobre a codificao no painel Actions e na janela Script

55

Para ativar ou desativar a quebra automtica de linha, siga um destes procedimentos:


No painel Actions, selecione Word Wrap (Quebra automtica de linha) no menu pop-up. Na janela Script, selecione Tools > Word Wrap. Pressione Control+Shift+W (Windows) ou Command+Shift+W (Macintosh).

Usando teclas de atalho de Escape


Voc pode adicionar vrios elementos a um script usando as teclas de atalho de Escape (pressionando a tecla Escape e, em seguida, duas outras teclas).
NO T A 56

Esses atalhos so 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 cdigo a seguir ser inserido no seu script:
do { } while ();

O ponto de insero inserido imediatamente aps a palavra while, para que voc possa comear a digitar sua condio. Da mesma forma, se voc pressionar Escape+c+h, o cdigo a seguir ser inserido no script, e o ponto de insero ser posicionado entre os parnteses [()], para que voc possa comear a digitar a condio:
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.

Escrevendo e editando o ActionScript 2.0

Para exibir ou ocultar as teclas de atalho de Escape:

No menu pop-up do painel Actions, marque ou desmarque Esc Shortcut Keys (Teclas de atalho de Esc). As teclas de atalho de Escape so exibidas ao lado dos elementos na caixa de ferramentas do ActionScript.

Exibindo caracteres ocultos


Quando voc cria e formata o cdigo do ActionScript, insere espaos, tabulaes e quebras de linha no script. Eles obviamente so teis e necessrios organizao visual do cdigo. Entretanto, o compilador do Flash gera erros quando encontra espaos de bytes duplos que no fazem parte de um valor de seqncia de caracteres. A exibio de caracteres ocultos no painel Script permite ver e remover esses espaos. Os smbolos a seguir so usados para exibir cada caractere oculto:
espao de um byte espao de bytes duplos tabulao quebra de linha . l >>

Para exibir caracteres ocultos, siga um destes procedimentos :


Selecione Hidden Characters (Caracteres ocultos) no menu pop-up. Pressione Control+Shift+8 (Windows) ou Command+Shift+8 (Macintosh).

Sobre a codificao no painel Actions e na janela Script

57

O painel Script ter esta aparncia quando forem exibidos caracteres ocultos:

Usando a ferramenta Find


A ferramenta Find (Localizar) permite localizar e, opcionalmente, substituir uma seqncia de caracteres nos scripts. Voc pode substituir a primeira ocorrncia, ou todas, do texto no script. Tambm pode fazer a correspondncia de maisculas e minsculas do texto.
Para localizar um texto no script:
1.

Na barra de ferramentas do painel Actions ou da janela Script, selecione a ferramenta Find ou pressione Control+F (Windows) ou Command+F (Macintosh). Digite a seqncia de caracteres de pesquisa que deseja localizar no script. Clique em Find Next (Localizar prximo). Se o texto ou os caracteres estiverem presentes no script, as palavras ou os caracteres sero realados no painel Script.

2. 3.

Para localizar e substituir um texto no script:


1.

Na barra de ferramentas do painel Actions ou da janela Script, clique na ferramenta Find ou pressione Control+F (Windows) ou Command+F (Macintosh). Digite a seqncia de caracteres de pesquisa que deseja localizar e substituir no script. Na caixa de texto Replace (Substituir), digite a nova seqncia de caracteres. Clique em Find Next. Se a seqncia de caracteres estiver presente no script, ela ser realada.

2. 3. 4.

58

Escrevendo e editando o ActionScript 2.0

5.

Clique em Replace (Substituir) para substituir a seqncia de caracteres ou em Replace All (Substituir todos) para substituir todas as ocorrncias da seqncia.

Aps digitar uma seqncia de caracteres de pesquisa na ferramenta Find, voc poder repetir a pesquisa selecionando Find Again (Localizar novamente) no menu pop-up.

Verificando sintaxe e pontuao


Para determinar se o cdigo escrito tem o desempenho planejado, publique ou teste o arquivo. Entretanto, voc pode verificar rapidamente o cdigo do ActionScript sem sair do arquivo FLA. Os erros de sintaxe so listados no painel Output (Sada). Voc tambm pode verificar se um conjunto de parnteses, chaves ou colchetes em torno de um bloco de cdigo est equilibrado. O script atual verificado quando voc verifica a sintaxe. Se o script atual chamar classes do ActionScript 2.0, elas sero compiladas e sua sintaxe tambm ser verificada. Outros scripts possivelmente existentes no arquivo FLA no sero verificados.
Para verificar a sintaxe, siga um destes procedimentos:

Clique em Check Syntax (Verificar sintaxe) na barra de ferramentas do painel Actions ou da janela Script. No painel Actions, selecione Check Syntax no menu pop-up. Selecione o painel Script (para que ele tenha o foco) e pressione Control+T (Windows) ou Command+T (Macintosh).
N OT A

Se voc clicar em Check Syntax em um arquivo de classe externo do ActionScript 2.0 na janela Script window, o caminho de classe global afetar esse processo. Algumas vezes, voc ir gerar erros mesmo que o caminho de classe global esteja definido corretamente pelo fato de o compilador no saber que essa classe est sendo compilada. Para obter mais informaes sobre como compilar classes, consulte Compilando e exportando classes na pgina 296.

Para verificar o equilbrio da pontuao, siga um destes procedimentos:


Clique entre chaves ({}), colchetes ([]) ou parnteses (()) no script. Pressione Control+' (aspas simples) no Windows ou Command+' (aspas simples) no Macintosh para realar o texto entre chaves, colchetes ou parnteses. O realce ajuda a verificar se a pontuao de abertura possui a pontuao de fechamento correspondente.

Sobre a codificao no painel Actions e na janela Script

59

Importando e exportando scripts


Voc pode importar um script para o painel Actions ou para a janela Script e exportar os scripts para arquivos externos do ActionScript. Os dois procedimentos podem ser teis para o compartilhamento do cdigo entre diferentes aplicativos Flash e vrias equipes de desenvolvimento.
Para importar um arquivo externo do AS:

Para importar um script externo para um script no qual esteja trabalhando no painel Script, coloque o ponto de insero no local em que deseja posicionar a primeira linha do script externo e, em seguida, siga um destes procedimentos:

No painel Actions, selecione Import Script (Importar script) no menu pop-up ou pressione Control+Shift+I (Windows) ou Command+Shift+I (Macintosh). Na janela Script, selecione Import Script no menu File (Arquivo) ou pressione Control+Shift+I (Windows) ou Command+Shift+I (Macintosh).

Voc pode exportar um script do painel Actions. Quando a janela Script usada, a exportao desnecessria j que voc pode salvar o arquivo do AS.
Para exportar um script do painel Actions:
1.

Selecione o script para exportao e escolha Export Script (Exportar script) no menu popup ou pressione Control+Shift+X (Windows) ou Command+Shift+X (Macintosh). A caixa de dilogo Save As (Salvar como) exibida. Salve o arquivo do ActionScript (AS).

2.

O Flash oferece suporte a vrios formatos de codificao de caracteres diferentes (incluindo Unicode) e voc pode especificar o formato a ser usado ao importar e exportar scripts. Para obter mais informaes, consulte Importando e exportando scripts na pgina 60 e Importar e exportar preferncias na pgina 61.

60

Escrevendo e editando o ActionScript 2.0

Suporte a Unicode para ActionScript


O Flash 8 oferece suporte codificao de texto Unicode para o ActionScript. Isso significa que possvel incluir texto em diferentes idiomas em um arquivo do ActionScript. Por exemplo, voc pode incluir texto em ingls, japons e francs no mesmo arquivo.
AT E N O

Quando voc usa um aplicativo em um idioma que no est em ingls em um sistema em ingls, o comando Test Movie (Testar filme) (consulte Depurando scripts na pgina 745) falha quando qualquer parte do caminho do arquivo SWF possui caracteres que no podem ser representados usando o esquema de codificao MBCS (Multibyte Character Sets, conjuntos de caracteres de vrios bytes). Por exemplo, caminhos em japons, que funcionam em um sistema em japons, no funcionaro em um sistema em ingls. Todas as reas do aplicativo que usarem o exibidor externo estaro sujeitas a esta limitao.

Importar e exportar preferncias


Voc pode definir as preferncias do ActionScript para especificar o tipo de codificao a ser usada na importao ou exportao de arquivos do ActionScript. Voc pode selecionar UTF-8 Encoding (Codificao UTF-8) ou Default Encoding (Codificao padro). UTF-8 o formato Unicode de 8 bits; Default Encoding a forma de codificao suportada pelo idioma utilizado por seu sistema, tambm chamada pgina de cdigo tradicional. Em geral, ao importar ou exportar arquivos do ActionScript em formato UTF-8, use a preferncia UTF-8. Se voc estiver importando ou exportando arquivos na pgina de cdigo tradicional do sistema, dever usar a preferncia Default Encoding. Se o texto dos scripts no tiver a aparncia esperada quando voc abrir ou importar um arquivo, altere a preferncia de codificao de importao. Se receber uma mensagem de aviso ao exportar arquivos do ActionScript, voc poder alterar a preferncia de codificao de exportao ou desativar o aviso nas preferncias do ActionScript.
Para selecionar opes de codificao de texto para importao ou exportao de arquivos do ActionScript:
1.

Na caixa de dilogo Preferences (Edit > Preferences (Windows) ou Flash > Preferences (Macintosh)), clique em ActionScript na lista Category. Em Editing Options (Opes de edio), siga uma ou ambas as instrues:

2.

Em Open/Import (Abrir/importar), selecione UTF-8 Encoding para abrir ou importar usando a codificao Unicode ou selecione Default Encoding para abrir ou importar usando a forma de codificao do idioma usado no momento por seu sistema.

Sobre a codificao no painel Actions e na janela Script

61

Em Save/Export (Salvar/exportar), selecione UTF-8 Encoding para salvar ou exportar usando a codificao Unicode ou selecione Default Encoding para salvar ou exportar usando a forma de codificao de idioma usada no momento por seu sistema.

Para ativar ou desativar o aviso de codificao de exportao:


1.

No sistema de menu do Flash, selecione Edit > Preferences (Windows) ou Flash > Preferences (Macintosh) e clique em Warnings (Avisos) na lista Category. Marque ou desmarque Warn on encoding conflicts when exporting ActionScript files (Avisar em conflitos de codificao ao exportar arquivos do ActionScript).

2.

Sobre recursos do painel Actions


Os recursos a seguir esto disponveis apenas no painel Actions. Eles no esto disponveis na janela Script. Embora o painel Actions tenha todos os recursos da janela Script, essa janela usada para uma funcionalidade diferente. O painel Actions deve oferecer suporte a algumas funcionalidades relacionadas ao arquivo FLA, que sero abordadas posteriormente nas prximas sees. Para obter informaes sobre os recursos disponveis na janela Script e no painel Actions, consulte as sees em Sobre a codificao no painel Actions e na janela Script na pgina 39. Para obter informaes sobre os recursos disponveis apenas no painel Actions, consulte estas sees:

Sobre o Script Assist na pgina 62 Prendendo scripts no painel Actions na pgina 63 Inserindo caminhos de destino na pgina 65

Sobre o Script Assist


O Script Assist solicita a insero dos elementos de um script, ajudando a adicionar mais facilmente uma interatividade simples ao aplicativo ou arquivo do Flash SWF. O modo Script Assist ideal para usurios que no esto familiarizados com a escrita de seus prprios scripts ou que simplesmente apreciam a convenincia oferecida pela ferramenta. Usado em conjunto com o painel Actions, o Script Assist solicita a seleo de opes e a insero de parmetros. Por exemplo, em vez de criar um novo script, voc pode selecionar um elemento de linguagem na caixa de ferramentas Actions (ou o comando Add (+) na barra de ferramentas), arrast-lo para o painel Script e usar o Script Assist para ajudar na concluso do script.

62

Escrevendo e editando o ActionScript 2.0

No exemplo a seguir, a funo gotoAndPlay foi adicionada ao painel Script. O Script Assist exibe todos os prompts necessrios utilizao dessa funo do ActionScript neste caso, o nome da cena, o tipo e o nmero do quadro.

Prendendo scripts no painel Actions


Se voc no centralizar o cdigo de um arquivo FLA em um local (discutido em Organizando o cdigo ActionScript na pgina 34) ou se estiver usando comportamentos (consulte Sobre comportamentos na pgina 65), voc poder prender vrios scripts no painel Actions para facilitar a passagem por eles. Prender um script significa que voc mantm o local do cdigo aberto no painel Actions e clica facilmente entre cada script aberto. Na figura a seguir, o script associado ao local atual na timeline est no Frame (Quadro) 1 da camada denominada Cleanup (Limpeza). (A guia na extremidade esquerda sempre segue sua localizao na timeline). Esse script tambm est preso (ele mostrado na guia mais direita). Dois outros scripts esto presos: um no Frame 1 e o outro no Frame 15 da camada Intro (Introduo). Voc pode mover-se entre os scripts presos clicando nas guias ou usando atalhos de teclado, como Control+Shift+. (ponto). Mover-se por scripts presos no altera sua posio atual na timeline. Como voc pode ver na figura a seguir, vrios scripts esto abertos no painel Actions e voc pode clicar em cada guia para mover-se entre eles.

Para prender um script:


1.

DICA

Se o contedo no painel Script no 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.

Posicione o ponteiro do mouse na Timeline para que o script aparea em uma guia na parte inferior esquerda do painel Script no painel Actions.

Sobre recursos do painel Actions

63

2.

Siga um destes procedimentos:


Clique no cone de tachinha direita da guia. Clique com o boto direito do mouse (Windows) ou, pressionando Control, clique (Macintosh) na guia e selecione Pin Script (Prender script). Selecione Pin Script (Prender script) no menu pop-up (na parte superior direita do painel Actions). Com o ponteiro do mouse focalizado no painel Script, pressione Control+= (sinal de igual) no Windows ou Command+= no Macintosh.

Para liberar um ou mais scripts, siga um destes procedimentos:

Se um script preso aparecer em uma guia na parte inferior esquerda do painel Script no painel Actions, clique no cone de tachinha direita da guia. Clique com o boto direito (Windows) ou, pressionando Control, clique (Macintosh) em uma guia e selecione Close Script (Fechar script) ou Close All Scripts (Fechar todos os scripts). Selecione Close Script (Fechar script) ou Close All Scripts (Fechar todos os scripts) no menu pop-up (na parte superior direita do painel Actions). Com o ponteiro do mouse focalizado no painel Script, pressione Control+- (sinal de menos) no Windows ou Command+- no Macintosh.

Para usar atalhos de teclado com scripts presos:

possvel usar os seguintes atalhos de teclado para trabalhar com scripts presos:
Ao
Prender script Liberar script Mover o foco para a guia da direita Mover o foco para a guia da esquerda Liberar todos os scripts

tecla de atalho no Windows


Control+= (sinal de igual) Control+- (sinal de menos) Control+Shift+. (ponto) Control+Shift+, (vrgula) Control+Shift+- (menos)

tecla de atalho no Macintosh


Command+= Command+Command+Shift+. Command+Shift+, Command+Shift+-

64

Escrevendo e editando o ActionScript 2.0

Inserindo caminhos de destino


Vrias aes criadas no script afetaro clipes de filme, botes e outras instncias de smbolos. Para aplicar aes a instncias em uma timeline, defina um caminho de destino o endereo da instncia que voc deseja especificar como destino. Voc pode definir um caminho de destino absoluto ou relativo. A ferramenta Target Path (Caminho de destino), disponvel no painel Actions, solicita que voc insira o caminho de destino da ao selecionada no script.
Para inserir um caminho de destino:
1. 2.

Selecione e posicione o ponteiro em uma ao no script. Clique em Target Path na barra de ferramentas do painel Actions. A caixa de dilogo Insert Target Path (Inserir caminho de destino) exibida. Siga um destes procedimentos:

3.

Insira manualmente o caminho da instncia de destino. Selecione o destino na lista de destinos disponveis.

4. 5.

Selecione a opo de caminho Absolute (Absoluto) ou Relative (Relativo). Clique em OK. O caminho anexado ao.

Sobre comportamentos
Os comportamentos so funes predefinidas do ActionScript que voc pode anexar a objetos no documento do Flash sem precisar criar o cdigo ActionScript. Eles oferecem uma funcionalidade predefinida do ActionScript, como navegao por quadros, carregamento de arquivos SWF e JPEGs externos, controle da ordem de empilhamento dos clipes de filme, alm de uma funcionalidade que permite arrastar clipes de filme. Os comportamentos podem ser usados de modo conveniente na criao 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 situaes.

Sobre comportamentos

65

Eles somente esto disponveis quando voc trabalha em um documento do Flash, e no em um arquivo de script externo. Em geral, voc seleciona um objeto de ativao em seu documento, um clipe de filme ou um boto, seleciona o boto Add (Adicionar) no painel Behaviors (Comportamentos) para exibir os comportamentos disponveis e, em seguida, seleciona o comportamento desejado, como mostrado no exemplo a seguir:

O comportamento adicionado ao objeto e exibido no painel Actions.

Sobre as configuraes de publicao do ActionScript


Voc pode editar o ActionScript de duas maneiras. Voc pode editar o ActionScript incorporado a um documento do Flash usando o painel Actions. Voc tambm pode editar o ActionScript localizado em um arquivo de script separado, externo ao documento do Flash, usando a janela Script. Como o painel Actions e a janela Script so basicamente duas exibies diferentes que utilizam o mesmo editor do ActionScript, as configuraes e as preferncias do ActionScript no Flash aplicam-se a ambos. Edite as configuraes de publicao do documento do Flash para alterar a verso do ActionScript que ser usada na publicao do documento. Voc tambm pode definir o caminho de classe do documento atual, ignorando o caminho de classe global do ActionScript. Para obter mais informaes sobre como modificar as configuraes de publicao do ActionScript, consulte Modificando as configuraes de publicao do ActionScript na pgina 67. Para obter mais informaes sobre como definir um caminho de classe em nvel de documento ou no nvel global, consulte Modificando o caminho de classe na pgina 68.

66

Escrevendo e editando o ActionScript 2.0

Modificando as configuraes de publicao do ActionScript


Por padro, quando voc publica um documento do Flash, a verso do ActionScript definida como 2.0 e o caminho de classe herdado da configurao do caminho de classe global. Se precisar alterar a verso do ActionScript ou especificar um caminho de classe em nvel de documento, edite as configuraes de publicao.
Para alterar a verso do ActionScript:
1.

Selecione File (Arquivo) > Publish Settings (Configuraes de publicao) e clique na guia Flash.

2.

Selecione a verso do ActionScript no menu pop-up. O ActionScript 2.0 est selecionado por padro. Se criar seus scripts no ActionScript 1.0, em vez de no 2.0, altere essa configurao antes de publicar seu documento do Flash.

O compilador do ActionScript 2.0 compila todo o cdigo ActionScript 1.0, exceto: a sintaxe de barra (/) usada para indicar caminhos de clipes de filme (por exemplo, parentClip/ testMC:varName= "ol mundo") gera erros de compilao quando voc seleciona o ActionScript 2.0 como a verso do ActionScript. Para solucionar esse problema, reescreva o cdigo usando a notao de ponto (.), em vez de barras, ou selecione o compilador do ActionScript 1.0. Use o boto Settings (Configuraes) (prximo ao menu pop-up da verso do ActionScript) para modificar o caminho de classe em nvel de documento. Para obter mais informaes, consulte Modificando o caminho de classe na pgina 68.

Sobre as configuraes de publicao do ActionScript

67

Modificando o caminho de classe


Ao usar o ActionScript 2.0, voc tambm pode definir um caminho de classe em nvel de documento. Isso ser til quando voc criar suas prprias classes e desejar substituir o caminho de classe global do ActionScript definido nas preferncias do ActionScript. A alterao do caminho de classe nas configuraes de publicao somente ser aplicada ao arquivo do Flash atual. Voc pode usar a caixa de dilogo Preferences para modificar o caminho de classe global. Para modificar a configurao do caminho de classe em nvel de documento, use a caixa de dilogo Publish Settings para o arquivo FLA. Em ambos os casos, voc pode adicionar caminhos de diretrio absolutos (por exemplo, C:/my_classes) e caminhos de diretrio relativos (por exemplo, ../my_classes ou ".").
Para modificar o caminho de classe global:
1.

Selecione Edit > Preferences (Windows) ou Flash > Preferences (Macintosh) para abrir a caixa de dilogo Preferences. Clique em ActionScript na lista Category e, em seguida, clique em ActionScript 2.0 Settings (Configuraes do ActionScript 2.0). Siga um destes procedimentos:

2.

3.

Para adicionar um diretrio ao caminho de classe, clique em Browse to Path (Navegar at caminho), navegue at o diretrio que deseja adicionar e clique em OK. Uma outra alternativa clicar em Add New Path (+) (Adicionar novo caminho) para adicionar uma nova linha lista Classpath (Caminho de classe). Clique duas vezes na nova linha, digite um caminho relativo ou absoluto e clique em OK.

Para editar um diretrio de caminho de classe existente, selecione o caminho na lista Classpath, clique em Browse to Path, navegue at o diretrio que deseja adicionar e clique em OK. Ou ento, clique duas vezes no caminho na lista Classpath, digite o caminho desejado e clique em OK.

Para excluir um diretrio do caminho de classe, selecione o caminho na lista Classpath e clique em Remove from Path (Remover do caminho).
N OT A

No exclua o caminho de classe global absoluto (consulte Caminhos de classe globais e em nvel de documento). O Flash utiliza esse caminho de classe para acessar as classes internas. Se voc acidentalmente excluir esse caminho de classe, restabelea-o adicionando $(LocalData)/Classes como um novo caminho de classe.

68

Escrevendo e editando o ActionScript 2.0

Para modificar o caminho de classe em nvel de documento:


1. 2. 3.

Selecione File > Publish Settings para abrir a caixa de dilogo Publish Settings. Clique na guia Flash. Clique em Settings prximo ao menu pop-up ActionScript Version (Verso do ActionScript). Siga um destes procedimentos:

4.

Para adicionar um diretrio ao caminho de classe, clique em Browse to Path, navegue at o diretrio que deseja adicionar e clique em OK. Uma outra alternativa clicar em Add New Path (+) para adicionar uma nova linha lista Classpath. Clique duas vezes na nova linha, digite um caminho relativo ou absoluto e clique em OK.

Para editar um diretrio de caminho de classe existente, selecione o caminho na lista Classpath, clique em Browse to Path, navegue at o diretrio que deseja adicionar e clique em OK. Ou ento, clique duas vezes no caminho na lista Classpath, digite o caminho desejado e clique em OK.

Para excluir um diretrio do caminho de classe, selecione o caminho na lista Classpath e clique em Remove from Path.

Para obter mais informaes sobre como definir e modificar caminhos de classe, consulte Sobre a definio e a modificao do caminho de classe na pgina 255.

Arquivos de configurao instalados com o Flash 8


Quando voc instala o Flash Basic 8 ou o Flash Professional 8, vrios arquivos e pastas de configurao relacionados ao ActionScript so includos no sistema. Voc pode utilizar esses arquivos para definir determinadas configuraes no ambiente de criao. Como sempre, modifique cuidadosamente e salve um backup dos arquivos alterados.
Pasta de classes do ActionScript Contm todas as classes do ActionScript (arquivos do AS) includas no Flash Professional 8 ou no Flash Basic 8. Caminhos tpicos da pasta:

Windows: Hard Disk\Documents and Settings\usuario\Local Settings\Application Data\Macromedia\Flash 8\idioma\Configuration\Classes. Macintosh: Hard Disk/Users/usuario/Library/Application Support/Macromedia/Flash 8/ idioma/Configuration/Classes.

Sobre as configuraes de publicao do ActionScript

69

A pasta Classes organizada em pastas contendo diretrios com as classes do Flash Player 7 (FP7) e do Flash Player 8 (FP8). Ela tambm contm um diretrio para o pacote (mx), usado nos dois exibidores e em arquivos do ASO (aso). Para obter mais informaes sobre arquivos do ASO, consulte Usando arquivos ASO na pgina 298. Para obter mais informaes sobre a organizao desse diretrio, consulte o arquivo readme na pasta Classes.
Pasta de incluso de classes

Contm todos os arquivos de incluso globais do

ActionScript e est localizada em:

Windows: Hard Disk\Documents and Settings\usuario\Local Settings\Application Data\Macromedia\Flash 8\idioma\Configuration\Include. Macintosh: Hard Disk/Users/usuario/Library/Application Support/Macromedia/Flash 8/ idioma/Configuration/Include.

Arquivo de configurao ActionsPanel.xml Inclui o arquivo de configurao das referncias do cdigo ActionScript e est localizado em:

Windows: Hard Disk\Documents and Settings\usuario\Local Settings\Application Data\Macromedia\Flash 8\idioma\Configuration\ActionsPanel\ActionScript_1_2. Macintosh: Hard Disk/Users/usuario/Library/Application Support/Macromedia/Flash 8/ idioma/Configuration/ActionsPanel/ActionScript_1_2.

Arquivo de configurao AsColorSyntax.xml

o arquivo de configurao para realce da sintaxe por cores do cdigo ActionScript, localizado em: Windows: Hard Disk\Documents and Settings\usuario\Local Settings\Application Data\Macromedia\Flash 8\idioma\Configuration\ActionsPanel\. Macintosh: Hard Disk/Users/usuario/Library/Application Support/Macromedia/Flash 8/ idioma/Configuration/ActionsPanel.

70

Escrevendo e editando o ActionScript 2.0

CAPTULO 3

Sobre o ActionScript
Os recursos OOP (object-oriented programming, programao 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 no se tornou padro e est em processo de alterao, o ActionScript 2.0 baseia-se nessa especificao com menos rigidez. O ActionScript 2.0 oferece suporte a todos os elementos padro da linguagem ActionScript; ele permite escrever scripts que atendem melhor aos padres usados em outras linguagens orientadas a objeto, como Java. O ActionScript 2.0 deve interessar principalmente a desenvolvedores de Flash intermedirios ou avanados autores de aplicativos que precisam da implementao de classes e subclasses. O ActionScript 2.0 tambm permite que voc declare o tipo de objeto de uma varivel ao cri-la (consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85) e fornece erros de compilador bem aprimorados (consulte Apndice A, Mensagens de erro, na pgina 809). As principais consideraes 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 no podem ser definidas no painel Actions (Aes). Voc pode importar arquivos de classes individuais implicitamente (armazenando-os em um local especificado por caminhos de pesquisa globais ou especficos de documentos e depois utilizando-os em um script) ou explicitamente (usando o comando import). possvel importar pacotes (colees de arquivos de classe em um diretrio) usando caracteres curinga.

71

Os aplicativos desenvolvidos com o ActionScript 2.0 so suportados pelo Flash Player 6 e verses posteriores.
A T E N O

A configurao padro de publicao para os novos arquivos criados no Flash 8 ActionScript 2.0. Se voc planeja modificar um arquivo FLA existente com ActionScript 1.0 para usar a sintaxe do ActionScript 2.0, verifique se o arquivo especifica ActionScript 2.0 em suas configuraes de publicao. Caso contrrio, seu arquivo ser compilado incorretamente, apesar de o Flash no gerar necessariamente erros de compilador.

Para obter mais informaes sobre como usar o ActionScript 2.0 para escrever programas orientados a objeto no Flash, consulte o Captulo 7, Classes, na pgina 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 animao simples, que no requer a interao do usurio.

O que ActionScript
Os principais recursos do ActionScript 2.0 incluem:
Modelo familiar OOP (Object-Oriented Programming, Programao orientada a objeto) O recurso primrio do ActionScript 2.0 um modelo familiar para a criao de programas orientados a objeto. O ActionScript 2.0 implementa vrios conceitos e palavraschave orientados a objeto, como class, interface e packages, que parecero familiares se voc j tiver programado com Java.

O modelo OOP fornecido pelo ActionScript 2.0 uma formalizao sinttica do mtodo de encadeamento de prottipo usado em verses anteriores do Macromedia Flash para criar objetos e estabelecer herana. Com o ActionScript 2.0, possvel criar classes personalizadas e estender as classes internas do Flash.
Atribuio estrita de tipos de dados

O ActionScript 2.0 tambm permite especificar explicitamente os tipos de dados para variveis, parmetros de funo e tipos de retorno de funo. Por exemplo, o cdigo a seguir declara uma varivel chamada userName de tipo String (um tipo de dados interno do ActionScript, ou classe).

var userName:String = ""; Avisos e erros do compilador Os dois recursos anteriores (modelo OOP e atribuio estrita de tipos de dado) permitem que a ferramenta de criao e o compilador forneam mensagens de erro e avisos do compilador que ajudam a localizar falhas nos aplicativos de forma mais rpida que anteriormente no Flash.

72

Sobre o ActionScript

Ao usar o ActionScript 2.0, verifique se as configuraes de publicao para o arquivo FLA especificam ActionScript 2.0. Esse o padro para arquivos criados em Flash MX 2004 e Flash 8. Entretanto, se voc abrir um arquivo FLA antigo que usa ActionScript 1.0 e comear a reescrev-lo em ActionScript 2.0, altere suas configuraes de publicao para ActionScript 2.0. Caso contrrio, seu arquivo FLA no ser compilado corretamente e no sero gerados erros.

Sobre a opo entre o ActionScript 1.0 e o ActionScript 2.0


Ao iniciar um novo documento ou aplicativo no Flash, voc deve decidir como organizar os arquivos associados. Voc pode usar classes em alguns projetos, por exemplo, ao criar aplicativos ou arquivos FLA complexos, mas nem todos os documentos utilizam classes. Por exemplo, vrios exemplos pequenos na documentao no utilizam classes. O uso de classes para armazenar funcionalidade no a mais fcil ou melhor soluo para aplicativos pequenos ou arquivos FLA simples. Em geral, mais eficiente incluir o ActionScript dentro do documento. Nesse caso, tente colocar todo o cdigo naTimeline, no menor nmero de quadros possvel, e evite incluir cdigo em instncias (como botes ou clipes de filme) de um arquivo FLA. Quando voc cria um projeto pequeno, em geral mais produtivo usar classes ou arquivos de cdigo externos para organizar o ActionScript, em vez de adicion-lo ao arquivo FLA. Algumas vezes, mais fcil manter todo o cdigo ActionScript no arquivo FLA, em vez de inseri-lo em uma classe importada. Isso no significa que voc deve usar necessariamente o ActionScript 1.0. Voc pode optar por incluir o cdigo no arquivo FLA usando o ActionScript 2.0 com sua atribuio estrita de tipos de dados e seus novos mtodos e propriedades. O ActionScript 2.0 tambm oferece uma sintaxe que segue os padres de outras linguagens de programao, o que torna a linguagem mais fcil e valiosa para ser aprendida. Por exemplo, voc se sentir familiarizado com o ActionScript caso tenha encontrado outra linguagem baseada na mesma estrutura e padres de sintaxe. Ou ento, voc poder aplicar esse conhecimento a outras linguagens a serem aprendidas no futuro. O ActionScript 2.0 permite o uso de uma abordagem orientada a objeto para o desenvolvimento de aplicativos atravs de um conjunto adicional de elementos de linguagem, que pode ser vantajoso para o desenvolvimento de seu aplicativo. Em alguns casos, no possvel escolher a verso do ActionScript a ser usada. Se estiver criando um arquivo SWF destinado a uma verso antiga do Flash Player, por exemplo, um aplicativo de dispositivo mvel, use o ActionScript 1.0, que compatvel com o Flash Player no caso de vrios dispositivos.

Sobre a opo entre o ActionScript 1.0 e o ActionScript 2.0

73

Independentemente da verso do ActionScript, lembre-se de seguir as prticas recomendadas. Vrias delas, como manter-se consistente com a distino entre maisculas e minsculas, usar a concluso de cdigo, melhorar a legibilidade, evitar palavras-chave para nomes de instncia e manter uma conveno de nomeao consistente, aplicam-se s duas verses. Se planeja atualizar o aplicativo em verses futuras do Flash ou torn-lo maior e mais complexo, use o ActionScript 2.0 e classes para facilitar a atualizao e a modificao do aplicativo.

Noes bsicas do ActionScript e do Flash Player


Se voc compilar um arquivo SWF que contenha o ActionScript 2.0 com configuraes de publicao definidas para o Flash Player 6 e o ActionScript 1.0, o cdigo funcionar desde que no use classes do ActionScript 2.0. No h distino entre maisculas e minsculas no cdigo, somente no Flash Player. Portanto, se voc compilar o arquivo SWF com Configuraes de Publicao definidas para o Flash Player 7 ou 8 e o ActionScript 1.0, o Flash ir impor a distino entre maisculas e minsculas. As anotaes de tipos de dados (tipos de dados estritos) so impostas durante a compilao para o Flash Player 7 e 8 quando voc publica as configuraes definidas para o ActionScript 2.0. O ActionScript 2.0 realiza a compilao para o bytecode do ActionScript 1.0 na publicao de aplicativos, portanto, voc pode usar o Flash Player 6, 7, ou 8 ao trabalhar com o ActionScript 2.0.

74

Sobre o ActionScript

CAPTULO 4

Dados e tipos de dados


Este captulo o primeiro de vrios que descrevem e demonstram alguns dos conceitos fundamentais do ActionScript. Voc praticar algumas tcnicas bsicas de codificao para aprender a criar aplicativos complexos. Neste captulo, voc tambm aprender a trabalhar com dados em um arquivo FLA e ver os tipos de dados com os quais possvel trabalhar. No prximo captulo, Captulo 5, Fundamentos da sintaxe e da linguagem, voc descobrir como usar a sintaxe do ActionScript e instrues de formulrio. Em seguida, o Captulo 6, Funes e mtodos demonstra como usar funes e mtodos na linguagem ActionScript. Para obter mais informaes sobre dados e tipos de dados, consulte estas sees:
Sobre dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Sobre tipos de dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Sobre variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Organizando dados em objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 Sobre a converso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116

Sobre dados
Dados referem-se a nmeros, seqncias de caracteres e outras informaes que voc pode manipular no Flash. O uso de dados geralmente essencial durante a criao de aplicativos ou sites da Web. Voc tambm pode usar dados ao criar grficos avanados e animao gerada com script e possivelmente ter de manipular os valores usados para controlar seus efeitos. possvel definir dados em variveis no Flash ou carregar dados de sites ou arquivos externos usando XML, servios da Web, classes internas do ActionScript etc. Voc pode armazenar dados em um banco de dados e representar as informaes de diversas maneiras em um arquivo SWF. Por exemplo, voc pode exibir as informaes em campos de texto ou componentes ou exibir imagens em instncias de clipe de filme. Alguns dos tipos de dados mais comuns incluem seqncias de caracteres (como nomes e partes de texto), nmeros, objetos (como clipes de filme), valores booleanos (true e false) etc. Neste captulo, voc tambm aprender sobre os tipos de dados do Flash e como us-los.

75

Para obter informaes sobre tipos de dados, consulte Sobre tipos de dados na pgina 76. Para obter informaes sobre variveis, consulte Sobre variveis na pgina 91.

Sobre tipos de dados


Um tipo de dados descreve um dado e os tipos de operaes que podem ser executados nele. Os dados so armazenados em uma varivel. Voc usa tipos de dados ao criar variveis, instncias de objetos e definies de funes para atribuir o tipo de dados com o qual est trabalhando. Ao criar um cdigo ActionScript, voc usa diversos tipos de dados. O ActionScript 2.0 define vrios tipos de dados comumente usados. Os tipos de dados descrevem o tipo de valor que uma varivel ou um elemento do ActionScript pode conter. Uma varivel atribuda a um tipo de dados pode armazenar somente um valor contido no conjunto de valores desse tipo de dados. Para obter informaes sobre variveis, consulte Sobre variveis na pgina 91. O ActionScript contm vrios tipos de dados bsicos que voc provavelmente usar com freqncia em seus aplicativos. Consulte a tabela em Sobre tipos de dados primitivos e complexos na pgina 77 para obter mais informaes. O ActionScript tambm contm classes bsicas, como Array e Date, que so consideradas tipos de dados complexos ou de referncia. Para obter mais informaes sobre tipos de dados complexos e de referncia, consulte Sobre tipos de dados primitivos e complexos na pgina 77. Alm disso, todos os tipos de dados e classes so totalmente definidos em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0). Voc tambm pode criar classes personalizadas para seus aplicativos. Toda classe definida com o uso de declaraes de classe considerada um tipo de dados. Para obter mais informaes sobre classes bsicas e outras classes internas, consulte Sobre classes de nvel superior e internas na pgina 302. Para obter mais informaes sobre como criar classes personalizadas, consulte o Captulo 7, Classes, na pgina 239. No ActionScript 2.0, possvel atribuir tipos de dados a variveis ao declar-las. Os tipos de dados atribudos podem ser qualquer um dos tipos bsicos ou representar uma classe personalizada criada por voc. Para obter mais informaes, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85. Ao depurar scripts, talvez voc precise determinar os tipos de dados de uma expresso ou varivel para entender seu comportamento. Isso pode ser feito com os operadores instanceof e typeof (consulte Sobre a determinao do tipo de dados na pgina 90). Voc pode converter um tipo de dados em outro durante a execuo usando uma das seguintes funes de converso: Array(), Boolean(), Number(), Object(), String().

76

Dados e tipos de dados

Voc pode localizar um arquivo de origem de exemplo, datatypes.fla, na pasta Samples do seu disco rgido, que mostra como usar os tipos de dados em um aplicativo.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\DataTypes. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/DataTypes.

Sobre tipos de dados primitivos e complexos


Os diversos valores de tipos de dados podem ser divididos em duas categorias principais: primitivos ou complexos. Um valor primitivo (ou tipo de dados primitivo) um valor que o ActionScript armazena no nvel mais baixo de abstrao; isso significa que as operaes executadas em tipos de dados primitivos geralmente so mais rpidas e eficientes do que as executadas em tipos de dados complexos. Os seguintes tipos de dados definem um conjunto de um ou mais valores primitivos: Boolean, null, Number, String e undefined. Um valor complexo (ou tipo de dados complexo) um valor que no primitivo e faz referncia aos valores primitivos. Em geral, eles so chamados tipos de dados de referncia. Os valores complexos pertencem ao tipo de dados Object ou a um tipo que se baseia no tipo de dados Object. Os tipos de dados que definem conjuntos de valores complexos incluem Array, Date, Error, Function e XML. Para obter mais informaes sobre esses tipos de dados complexos, consulte as entradas correspondentes em ActionScript 2.0 Language Reference. Em determinadas situaes, as variveis que contm tipos de dados primitivos se comportam de maneira diferente das que contm tipos de dados complexos. Para obter mais informaes, consulte Usando variveis em um projeto na pgina 111. O ActionScript possui os seguintes tipos de dados bsicos que voc pode usar em seus aplicativos:
Tipo de dados
Boolean

Descrio
Primitivo. O tipo de dados Boolean consiste em dois valores: true e false. Nenhum outro valor vlido para variveis desse tipo. O valor padro de uma varivel Boolean declarada, mas no inicializada false. Para obter mais informaes, consulte Tipo de dados Boolean na pgina 79. Complexo. O tipo de dados MovieClip permite controlar smbolos de clipes de filme com os mtodos da classe MovieClip. Para obter mais informaes, consulte Tipo de dados MovieClip na pgina 80.

MovieClip

Sobre tipos de dados

77

Tipo de dados
null

Descrio
Primitivo. O tipo de dados null contm o valor null. Esse valor significa nenhum valor ou seja, uma falta de dados. Voc pode atribuir o valor null em inmeras situaes para indicar que no h um valor atribudo a uma propriedade ou a uma varivel. O tipo de dados null o padro de todas as classes que definem tipos de dados complexos. Uma exceo a essa regra a classe Object, cujo padro undefined. Para obter mais informaes, consulte Tipo de dados null na pgina 81. Primitivo. Esse tipo de dados pode representar inteiros, inteiros sem sinal e nmeros de ponto flutuante. Para armazenar um nmero de ponto flutuante, inclua um ponto decimal no nmero. Sem o ponto decimal, o nmero 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 informaes, consulte, ActionScript 2.0 Language Reference e Tipo de dados Number na pgina 82. Complexo. O tipo de dados Object definido pela classe Object. Essa classe serve como base para todas as definies de classe do ActionScript e permite organizar os objetos uns dentro dos outros (objetos aninhados). Para obter mais informaes, consulte Tipo de dados Object na pgina 83. Primitivo. O tipo de dados String representa uma seqncia de caracteres de 16 bits que pode incluir letras, nmeros e sinais de pontuao. As seqncias de caracteres so armazenadas como caracteres Unicode, usando o formato UTF-16. Uma operao em um valor String retorna uma nova instncia da seqncia de caracteres. Para obter mais informaes, consulte Tipo de dados String na pgina 83. Primitivo. O tipo de dados undefined contm um valor: undefined. Esse o valor padro das instncias da classe Object. Somente possvel atribuir o valor undefined s variveis pertencentes classe Object. Para obter mais informaes, consulte Tipo de dados undefined na pgina 85. Complexo. O tipo de dados Void contm somente um valor: void. Use esse tipo de dados para designar funes que no retornam um valor. Void um tipo de dados complexo que faz referncia ao tipo de dados primitivo Void. Para obter mais informaes, consulte Tipo de dados Void na pgina 85.

Number

Object

String

undefined

Void

78

Dados e tipos de dados

Voc pode localizar um arquivo de origem de exemplo, datatypes.fla, na pasta Samples do seu disco rgido, que mostra como usar os tipos de dados em um aplicativo.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\DataTypes. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/DataTypes.

Tipo de dados Boolean


Um valor booleano true ou false. O ActionScript tambm converte os valores true e false em 1 e 0 quando apropriado. Os valores booleanos so freqentemente usados com operadores lgicos em instrues do ActionScript que fazem comparaes para controlar o fluxo de um script. O exemplo a seguir carrega um arquivo de texto em um arquivo SWF e exibe uma mensagem no painel Output (Sada) caso o arquivo de texto no seja carregado corretamente ou os parmetros se ele for carregado com xito. Consulte os comentrios no exemplo de cdigo para obter mais detalhes.
var my_lv:LoadVars = new LoadVars(); //sucess um valor booleano my_lv.onLoad = function(sucess:Boolean) { //se sucess for true, rastrear monthNames if (sucess) { trace(my_lv.monthNames); //se sucess for false, rastrear uma mensagem } else { trace("unable to load text file"); } }; my_lv.load("http://www.helpexamples.com/flash/params.txt");

O exemplo a seguir verifica se os usurios inserem valores em duas instncias do componente TextInput. Duas variveis Boolean so criadas, userNameEntered e isPasswordCorrect e, se ambas resultarem em true, uma mensagem de boas-vindas ser atribuda varivel String titleMessage.
// Adicionar dois componentes TextInput, um componente Label e um componente Button no Stage. // Atribuir um tipo de dados estrito s trs instncias do componente var userName_ti:mx.controls.TextInput; var password_ti:mx.controls.TextInput; var submit_button:mx.controls.Button; var welcome_lbl:mx.controls.Label; //Ocultar o rtulo welcome_lbl.visible = false;

Sobre tipos de dados

79

// Criar um objeto ouvinte, que usado com o componente Button. // Quando o Button clicado, procura um nome de usurio e uma senha. var loadListener:Object = new Object(); btnListener.click = function(evt:Object) { // Verifica se o usurio insere pelo menos um caractere nas instncias do componente TextInput // e retorna um valor true/false booleano. var userNameEntered:Boolean = (userName_ti.text.length > 0); var isPasswordCorrect:Boolean = (password_ti.text == "vertigo"); if (userNameEntered && isPasswordCorrect) { var titleMessage:String = "Welcome " + userName_ti.text + "!"; welcome_lbl.text = titleMessage; //exibir o rtulo welcome_lbl.visible = true; } }; submit_button.addEventListener("click", btnListener);

Para obter mais informaes, consulte Usando funes no Flash na pgina 227 e Sobre operadores lgicos na pgina 205.

Tipo de dados MovieClip


Clipes de filme so smbolos que podem reproduzir animaes em um aplicativo Flash. Eles so os nicos tipos de dados que fazem referncia a elementos grficos. O tipo de dados MovieClip permite controlar smbolos de clipes de filme com os mtodos da classe MovieClip. Os mtodos da classe MovieClip no so chamados com um construtor. Voc pode criar uma instncia de clipe de filme no Stage (Palco) ou dinamicamente. Em seguida, basta chamar os mtodos da classe MovieClip com o operador ponto (.).
Trabalhando com clipes de filme no Stage startDrag()

O exemplo a seguir chama os mtodos e getURL() para instncias diferentes de clipe de filme existentes no Stage:

my_mc.startDrag(true); parent_mc.getURL("http://www.macromedia.com/support/" + product);

O segundo exemplo retorna a largura do clipe de filme chamado my_mc no Stage. A instncia especificada como destino deve ser um clipe de filme, e o valor retornado deve ser numrico.
function getMCWidth(target_mc:MovieClip):Number { return target_mc._width; } trace(getMCWidth(my_mc));

80

Dados e tipos de dados

Criando clipes de filme dinamicamente O uso do ActionScript para criar clipes de filme dinamicamente til quando voc no deseja criar manualmente clipes de filme no Stage ou anex-los a partir da biblioteca. Por exemplo, voc pode criar uma galeria de imagens com um grande nmero de miniaturas que deseja organizar no Stage. Com MovieClip.createEmptyMovieClip() , possvel criar um aplicativo usando apenas o ActionScript.

Para criar um clipe de filme dinamicamente, use MovieClip.createEmptyMovieClip(), como mostra o seguinte exemplo:
// Cria um clipe de filme para armazenar o recipiente. this.createEmptyMovieClip("image_mc", 9); // Carrega uma imagem em image_mc. image_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");

O segundo exemplo cria um clipe de filme chamado square_mc que usa a API (Application Programming Interface, Interface de programao de aplicativos) Drawing para desenhar um retngulo. Os manipuladores de eventos e os mtodos startDrag() e stopDrag() da classe MovieClip so adicionados para tornar o retngulo arrastvel.
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 informaes, consulte Captulo 11, Trabalhando com clipes de filme, na pgina 369 e a entrada %{MovieClip}% em ActionScript 2.0 Language Reference.

Tipo de dados null


O tipo de dados null possui apenas um valor: null. Esse valor significa nenhum valor ou seja, uma falta de dados. Voc pode atribuir o valor null em inmeras situaes para indicar que ainda no h valor atribudo a uma propriedade ou a uma varivel. Por exemplo, possvel atribuir o valor null nas seguintes situaes:

Para indicar que uma varivel existe, mas ainda no recebeu um valor Para indicar que uma varivel existe, mas no contm mais um valor

Sobre tipos de dados

81

Como resultado de uma funo, para indicar que no havia valor disponvel a ser retornado pela funo Como parmetro de uma funo, para indicar a omisso de um parmetro

Vrios mtodos e funes retornaro null se nenhum valor tiver sido definido. O exemplo a seguir demonstra como usar null para testar se os campos de formulrio tm foco de formulrio:
if (Selection.getFocus() == null) { trace("no selection"); }

Tipo de dados Number


O tipo de dados Number um nmero de dupla preciso e ponto flutuante. O valor mnimo de um objeto Number aproximadamente 5e-324, e o mximo aproximadamente 1,79E+308. possvel manipular nmeros usando os operadores aritmticos de adio (+), subtrao (-), multiplicao (*), diviso (/), mdulo (%), incremento (++) e decremento (--). Para obter mais informaes, consulte Usando operadores numricos na pgina 198. Tambm possvel usar mtodos das classes internas Math e Number para manipular nmeros. Para obter mais informaes sobre os mtodos e as propriedades dessas classes, consulte as entradas %{Math}% e %{Number}% em ActionScript 2.0 Language Reference. O exemplo a seguir usa o mtodo sqrt() (square root - raiz quadrada) da classe Math para retornar a raiz quadrada do nmero 100:
Math.sqrt(100);

O exemplo a seguir retorna um inteiro aleatrio entre 10 e 17 (inclusive):


var bottles:Number = 0; bottles = 10 + Math.floor(Math.random() * 7); trace("There are " + bottles + " bottles");

O exemplo a seguir localiza a porcentagem do clipe de filme intro_mc carregada e a representa como um inteiro:
var percentLoaded:Number = Math.round((intro_mc.getBytesLoaded() / intro_mc.getBytesTotal()) * 100);

82

Dados e tipos de dados

Tipo de dados Object


Um objeto uma coleo de propriedades. Uma propriedade um atributo que descreve o objeto. Por exemplo, a transparncia de um objeto (como um clipe de filme) um atributo que descreve sua aparncia. Portanto, _alpha (transparncia) uma propriedade. Cada propriedade possui um nome e um valor. O valor de uma propriedade pode ser qualquer tipo de dados do Flash, at mesmo o tipo de dados Object. Isso permite aninhar objetos, ou seja, organiz-los uns dentro dos outros. Para especificar os objetos e suas propriedades, use o operador ponto (.). Por exemplo, no cdigo a seguir, hoursWorked uma propriedade de weeklyStats, que, por sua vez, uma propriedade de employee:
employee.weeklyStats.hoursWorked

O objeto MovieClip do ActionScript possui mtodos que permitem controlar instncias de smbolos de clipes de filme no Stage. Este exemplo usa os mtodos play() e nextFrame():
mcInstanceName.play(); mc2InstanceName.nextFrame();

Voc tambm pode criar objetos personalizados para organizar informaes em seu aplicativo Flash. Para adicionar interatividade a um aplicativo com o ActionScript, voc precisar de muitas informaes, por exemplo, o nome, a idade e o telefone do usurio; a velocidade de uma bola; os nomes dos itens de um carrinho de compras; o nmero de quadros carregados; ou a ltima tecla pressionada pelo usurio. A criao de objetos personalizados permite que voc organize essas informaes em grupos, simplifique e reutilize scripts. O cdigo ActionScript apresentado a seguir mostra como usar objetos personalizados para organizar informaes. Ele cria um novo objeto chamado user e trs propriedades, name, age e phone, que so tipos de dados String e Numeric.
var user:Object = new Object(); user.name = "Irving"; user.age = 32; user.phone = "555-1234";

Para obter mais informaes, consulte Exemplo: Criando classes personalizadas na pgina 278.

Tipo de dados String


Uma seqncia de caracteres uma seqncia de letras, nmeros e sinais de pontuao. Insira seqncias de caracteres em instrues do ActionScript colocando-as entre aspas simples (') ou duplas (").

Sobre tipos de dados

83

Uma forma comum de usar o tipo String atribuir uma seqncia de caracteres a uma varivel. Por exemplo, na instruo a seguir, "L7" uma seqncia de caracteres atribuda varivel favoriteBand_str:
var favoriteBand_str:String = "L7";

Voc pode usar o operador de adio (+) para concatenar, ou unir, duas seqncias de caracteres. O ActionScript trata os espaos no incio ou no final de uma seqncia de caracteres como uma parte literal dessa seqncia. A expresso a seguir inclui um espao depois da vrgula:
var greeting_str:String = "Welcome, " + firstName;

Para incluir aspas em uma seqncia de caracteres, coloque uma barra invertida (\) antes delas. Isso chamado escape de caractere. H outros caracteres que s podem ser representados no ActionScript por seqncias de escape especiais. A tabela a seguir lista todos os caracteres de escape do ActionScript:
Seqncia de escape
\b \f \n \r \t \" \' \\ \000 - \377 \x00 - \xFF \u0000 - \uFFFF

Caractere
Caractere Backspace (ASCII 8) Caractere de alimentao de formulrio (ASCII 12) Caractere de alimentao de linha (ASCII 10) Caractere de retorno de carro (ASCII 13) Caractere Tab (ASCII 9) Aspas duplas Aspas simples Barra invertida Um byte especificado em octal Um byte especificado em hexadecimal Um caractere Unicode de 16 bits especificado em hexadecimal

Assim como em Java, as seqncias de caracteres so imutveis no ActionScript. Qualquer operao que modifique uma seqncia de caracteres retorna uma nova seqncia. A classe String uma classe interna do ActionScript. Para obter informaes sobre os mtodos e as propriedades da classe String, consulte a entrada %{String}% em ActionScript 2.0 Language Reference.

84

Dados e tipos de dados

Tipo de dados undefined


O tipo de dados undefined possui um valor, undefined, e atribudo automaticamente a uma varivel qual um valor no foi atribudo, tanto pelo seu cdigo como pela interao do usurio. O valor undefined atribudo automaticamente; diferentemente de null, um valor undefined no atribudo a uma varivel ou a uma propriedade. Use o tipo de dados undefined para verificar se uma varivel est definida. Esse tipo de dados permite criar um cdigo que executado somente quando o aplicativo est em execuo, como mostra o exemplo a seguir:
if (init == undefined) { trace("initializing app"); init = true; }

Se o aplicativo tiver vrios quadros, o cdigo no ser executado uma segunda vez porque a varivel init no ser mais undefined.

Tipo de dados Void


O tipo de dados Void possui um valor, void, usado em uma definio de funo para indicar que a funo no retorna um valor, como mostra o exemplo a seguir:
//Cria uma funo com o tipo de retorno Void function displayFromURL(url:String):Void {}

Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados


No Flash, as variveis so usadas para armazenar valores no cdigo. Voc pode declarar explicitamente o tipo de objeto de uma varivel ao cri-la; isso chamado atribuio estrita de tipos de dados. Se voc no definir explicitamente que um item armazena um nmero, uma seqncia de caracteres ou outro tipo de dados, durante a execuo, o Flash Player tentar determinar o tipo de dados do item quando ele for atribudo. Se voc atribuir um valor a uma varivel, como no exemplo a seguir, o Flash Player avaliar, durante a execuo, o elemento direita do operador e determinar que ele do tipo Number:
var x = 3;

Sobre tipos de dados

85

Como x no foi declarado com a atribuio estrita de tipos de dados, o compilador no pode determinar o tipo; para o compilador, a varivel x pode ter qualquer tipo de valor. (Consulte Atribuindo um tipo de dados na pgina 87.) Uma atribuio posterior pode alterar o tipo de x; por exemplo, a instruo x = "hello" altera o tipo de x para String. O ActionScript sempre converte automaticamente tipos de dados primitivos (como Boolean, Number, String, null ou undefined) quando uma expresso exige a converso e a atribuio estrita de tipos de dados no aplicada s variveis. A atribuio estrita de tipos de dados oferece vrios benefcios durante a compilao. A declarao de tipos de dados (atribuio estrita de tipos de dados) pode ajudar a evitar ou a diagnosticar erros no cdigo durante a compilao. Para declarar uma varivel usando a atribuio estrita de dados, use o seguinte formato:
var variableName:datatype;
NO T A 86

Algumas vezes, a atribuio estrita de tipos de dados chamada atribuio forte de

tipos de dados a uma varivel.

Como a incompatibilidade de tipos de dados gera erros do compilador, a atribuio estrita de tipos de dados ajuda a identificar erros no cdigo durante a compilao e evita a atribuio do tipo de dados incorreto a uma varivel existente. Durante a criao, a atribuio estrita de tipos de dados ativa as referncias de cdigo no editor do ActionScript (mas ainda assim necessrio usar sufixos de nomes de instncia para elementos visuais). A atribuio estrita de tipo de dados ajuda a garantir a no atribuio inadvertida de um tipo incorreto de valor a uma varivel. O Flash verifica se h erros de incompatibilidade de tipos durante a compilao e exibir uma mensagem de erro se voc usar o tipo incorreto de valor. Portanto, o uso da atribuio estrita tambm ajuda a impedir sua tentativa de acesso a propriedades ou mtodos que no faam parte do tipo de um objeto. A atribuio estrita de tipos de dados significa que o editor do ActionScript mostra automaticamente as referncias de cdigo dos objetos. Para obter mais informaes sobre como criar variveis, consulte Sobre variveis na pgina 91. Para obter informaes sobre como atribuir nomes a variveis, consulte Sobre a atribuio de nomes a variveis na pgina 96. Para obter mais informaes sobre como atribuir tipos de dados e os tipos que podem ser atribudos, consulte Atribuindo um tipo de dados na pgina 87.

Dados e tipos de dados

Voc pode localizar um arquivo de origem de exemplo, datatypes.fla, na pasta Samples do seu disco rgido, que mostra como usar os tipos de dados em um aplicativo.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\DataTypes. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/DataTypes.

Atribuindo um tipo de dados


Atribua tipos de dados sempre que definir uma varivel, quer voc a declare usando a palavrachave var, crie um argumento de funo, defina o tipo de retorno da funo ou defina uma varivel para ser usada em um loop for ou for..in. Para atribuir um tipo de dados, use a sintaxe ps-dois-pontos, a qual indica que, aps o nome da varivel, so acrescentados doispontos e o tipo de dados:
var my_mc:MovieClip;

H vrios tipos de dados possveis, 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 so os internos, como Number, String, Boolean, Array ou Object, que so mostrados nos exemplos de cdigo apresentados a seguir. Para atribuir um tipo de dados especfico a um item, defina seu tipo usando a palavra-chave var e a sintaxe ps-dois-pontos, como no exemplo a seguir:
// Atribuio estrita de tipo de dados a uma varivel ou a um objeto var myNum:Number = 7; var birthday:Date = new Date(); //Atribuio estrita de tipo de dados de parmetros function welcome(firstName:String, age:Number) { } // Atribuio estrita de tipo de dados de parmetro e valor de retorno function square(myNum:Number):Number { var squared:Number = myNum * myNum; return squared; }

Sobre tipos de dados

87

Voc pode declarar o tipo de dados de objetos com base em classes internas (Button, Date etc.), bem como em classes e interfaces criadas por voc. No exemplo a seguir, se houver um arquivo Student.as no qual define a classe Student, voc poder especificar que os objetos que criar sejam do tipo Student:
var myStudent:Student = new Student();

Neste exemplo, suponha que voc defina o seguinte cdigo:


// no arquivo de classe Student.as class Student { public var status:Boolean; // propriedade dos objetos Student } // no arquivo FLA var studentMaryLago:Student = new Student(); studentMaryLago.status = "enrolled"; /* Tipos incompatveis em uma instruo de atribuio: String encontrado onde Boolean necessrio. */

Quando o Flash compila esse script, um erro de tipos incompatveis gerado porque o arquivo SWF espera um valor booleano. Se criar uma funo que no tenha um tipo de retorno, voc poder especificar o tipo de retorno Void para essa funo. Ou, se criar um atalho para uma funo, voc poder atribuir o tipo de dados Function nova varivel. 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 atribuio estrita de tipos de dados que o Flash exibe automaticamente referncias de cdigo para objetos internos quando o tipo de dados atribudo a eles estritamente. Para obter mais informaes, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85. Como os arquivos publicados com o ActionScript 1.0 no respeitam as atribuies estritas de tipos de dados durante a compilao, a atribuio do tipo incorreto de valor a uma varivel qual um tipo foi atribudo estritamente no gera um erro do compilador.
var myNum:String = "abc"; myNum = 12; /* No h erro no ActionScript 1.0, mas h um erro de tipos incompatveis no ActionScript 2.0 */

88

Dados e tipos de dados

A razo disso que, quando voc publica um arquivo no ActionScript 1.0, o Flash interpreta uma instruo, por exemplo, var myNum:String = "abc" como sintaxe de barra, e no como atribuio estrita de tipo. (O ActionScript 2.0 no aceita sintaxe de barra.) Esse comportamento pode resultar na atribuio de um objeto do tipo incorreto a uma varivel, fazendo com que o compilador permita chamadas de mtodo ilegais e que referncias a propriedades no definidas sejam passadas sem serem relatadas. Os arquivos publicados com o ActionScript 2.0 podem usar opcionalmente a atribuio de tipos de dados. Portanto, se voc implementar a atribuio estrita de tipos de dados em seu cdigo, defina suas configuraes de publicao para o ActionScript 2.0. Voc pode especificar as configuraes de publicao e definir em que verso do ActionScript deseja publicar seus arquivos modificando essas configuraes no menu principal, em File (Arquivo) > Publish Settings (Configuraes de publicao), ou clicando no boto Settings (Configuraes) no inspetor Properties (Propriedades) (certifique-se de que no haja instncias selecionadas). Para usar uma verso especfica do ActionScript ou do Flash Player, selecione a guia Flash na caixa de dilogo Publish Settings e escolha uma opo no menu pop-up de verses do ActionScript. Para obter informaes sobre verificao de tipo, consulte Sobre a verificao de tipo na pgina 89.

Sobre a verificao de tipo


A verificao de tipo consiste em examinar se o tipo de uma varivel e de uma expresso so compatveis. Portanto, o Flash verifica se o tipo especificado para uma varivel corresponde ao(s) valor(es) atribudo(s) a ela. Para obter mais informaes sobre tipos estritos de dados e atribuio de tipos de dados, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85 e Atribuindo um tipo de dados na pgina 87. A verificao de tipo pode ocorrer durante a compilao ou a execuo. Se voc usar a atribuio estrita de tipos de dados, a verificao de tipo ocorrer durante a compilao. Como o ActionScript uma linguagem com atribuio dinmica de tipos, o ActionScript tambm pode realizar a verificao de tipo durante a execuo. Por exemplo, o cdigo a seguir no especifica o tipo de dados do parmetro xParam. Durante a execuo, voc usa o parmetro para armazenar um valor do tipo Number e outro do tipo String. Em seguida, a funo dynamicTest() usa o operador typeof para testar se o parmetro do tipo String ou Number.
function dynamicTest(xParam) { if (typeof(xParam) == "string") { var myStr:String = xParam; trace("String: " + myStr); } else if (typeof(xParam) == "number") { var myNum:Number = xParam;

Sobre tipos de dados

89

trace("Number: " + myNum); } } dynamicTest(100); dynamicTest("one hundred");

No necessrio adicionar explicitamente informaes de tipo de dados ao ActionScript. O compilador do ActionScript permite que voc use propriedades e chame mtodos no existentes durante a compilao. Dessa maneira, possvel criar propriedades ou atribuir mtodos dinamicamente durante a execuo. Um exemplo da flexibilidade oferecida pela verificao dinmica de tipo envolve o uso de propriedades e mtodos no conhecidos durante a compilao. Como o cdigo menos restritivo, isso poder ser vantajoso em algumas situaes de codificao. Por exemplo, o cdigo a seguir cria uma funo chamada runtimeTest() que chama um mtodo e retorna uma propriedade, ambos desconhecidos para o compilador. O cdigo no gerar um erro durante a compilao, mas, se a propriedade ou o mtodo no estiver acessvel durante a execuo, ocorrer um erro durante a execuo.
function runtimeTest(myParam) { myParam.someMethod(); return myParam.someProperty; }

Sobre a determinao do tipo de dados


Ao testar e depurar seus programas, voc pode detectar problemas que parecem estar relacionados aos tipos de dados de itens diferentes. Ou, se voc usar variveis no associadas explicitamente a um tipo de dados, talvez seja til saber o tipo de dados de determinada varivel. Com o ActionScript, possvel determinar o tipo de dados de um item. Voc pode usar o operador typeof para retornar informaes sobre os dados. Use o operador typeof para obter os tipos de dados, mas lembre-se de que ele no retorna informaes sobre a classe qual uma instncia pertence. O exemplo a seguir mostra como usar o operador typeof para retornar o tipo de objeto que est sendo rastreado:
// Criar uma nova instncia da classe LoadVars. var my_lv:LoadVars = new LoadVars(); /* O operador typeof no especifica a classe, ele especifica apenas que my_lv um objeto*/ var typeResult:String = typeof(my_lv); trace(typeResult); // objeto

90

Dados e tipos de dados

Neste exemplo, voc cria uma nova varivel String chamada myName e converte-a no tipo de dados Number:
var myName:String = new String("17"); trace(myName instanceof String); // true var myNumber:Number = new Number(myName); trace(myNumber instanceof Number); // true

Para obter mais informaes sobre esses operadores, consulte %{operador typeof}% e %{operador instanceof}% em ActionScript 2.0 Language Reference. Para obter mais informaes sobre testes e depurao, consulte o Captulo 18, Depurando aplicativos, na pgina 745 Para obter mais informaes sobre herana e interfaces, consulte o Captulo 8, Herana, na pgina 319. Para obter mais informaes sobre classes, consulte o Captulo 7, Classes, na pgina 239.

Sobre variveis
Uma varivel um recipiente que contm informaes. O cdigo a seguir mostra a aparncia de uma varivel no ActionScript:
var myVariable:Number = 10;

Essa varivel contm um valor numrico. O uso de :Number no cdigo anterior atribui o tipo de valor que a varivel contm, denominado atribuio de tipos de dados. Para obter mais informaes sobre como atribuir tipos de dados, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85 e Atribuindo um tipo de dados na pgina 87. O recipiente (representado pelo nome da varivel) sempre o mesmo em todo o ActionScript, mas o contedo (o valor) pode mudar. Voc pode alterar o valor de uma varivel em um script quantas vezes desejar. Ao alterar o valor de uma varivel durante a reproduo do arquivo SWF, voc poder registrar e salvar informaes sobre as atividades do usurio, gravar valores que mudam medida que o arquivo SWF reproduzido ou avaliar se uma condio true ou false. Talvez a varivel precise ser atualizada continuamente durante a reproduo do arquivo SWF, como, por exemplo, quando o placar de um jogador muda em um jogo do Flash. As variveis so essenciais quando voc cria e trata da interao com o usurio em um arquivo SWF.

Sobre variveis

91

recomendvel atribuir um valor a uma varivel ao declar-la pela primeira vez. A atribuio de um valor inicial chamada inicializao da varivel e ocorre geralmente no Frame 1 (Quadro 1) da Timeline (Linha de tempo) ou em uma classe carregada quando a reproduo do arquivo SWF inicia. H diversos tipos de variveis, que so afetados pelo escopo. Para obter mais informaes sobre os diversos tipos de variveis e escopo, consulte Sobre variveis e escopo na pgina 101.
D IC A

A inicializao de uma varivel facilita o controle e a comparao de seu valor durante a reproduo do arquivo SWF. O Flash Player 7 e verses posteriores avaliam as variveis no inicializadas de maneira diferente do Flash Player 6 e verses anteriores. Se tiver criado scripts para o Flash Player 6 e planejar criar ou portar scripts para o Flash Player 7 ou verses posteriores, voc dever compreender essas diferenas a fim de evitar um comportamento inesperado.

As variveis podem conter diversos tipos de dados; para obter mais informaes, consulte Sobre tipos de dados na pgina 76. O tipo de dados que uma varivel contm afeta a forma como o valor da varivel alterado quando atribudo em um script. Os tipos mais comuns de informaes que podem ser armazenados em uma varivel so um URL (tipo String), um nome de usurio (tipo String), o resultado de uma operao matemtica (tipo Number), o nmero de vezes que um evento ocorreu (tipo Number) ou se o usurio clicou em determinado boto (tipo Boolean). Cada arquivo SWF e instncia de um objeto (como um clipe de filme) tem um conjunto de variveis, sendo que cada varivel possui um valor, independentemente das variveis de outros arquivos SWF ou clipes de filme. Para exibir o valor de uma varivel, use a instruo 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 varivel hoursWorked para o painel Output no ambiente de teste. Tambm possvel verificar e definir os valores da varivel no Debugger (Depurador), no ambiente de teste. Para obter mais informaes sobre variveis, consulte os tpicos a seguir: Sobre a declarao de variveis na pgina 93 Sobre a atribuio de valores na pgina 93 Sobre a atribuio de nomes a variveis na pgina 96 Usando variveis em um aplicativo na pgina 97 Sobre variveis e escopo na pgina 101 Sobre valores padro na pgina 93 Sobre operadores e variveis na pgina 96

92

N OT A

Dados e tipos de dados

Sobre o carregamento de variveis na pgina 106 Usando variveis em um projeto na pgina 111

Sobre a declarao de variveis


Voc pode declarar variveis em um quadro da timeline, diretamente em um objeto ou em um arquivo de classe externo. Para definir variveis, use a palavra-chave var e siga as convenes de atribuio de nomes de variveis. Voc pode declarar uma varivel chamada firstName, como mostra o exemplo a seguir:
var firstName:String;

Ao declarar uma varivel, voc atribui um tipo de dados a ela. Nesse caso, o tipo de dados String atribudo varivel firstName. Para obter mais informaes sobre como atribuir tipos de dados, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85.

Sobre valores padro


Um valor padro o valor que uma varivel contm antes de seu valor ser definido. A varivel inicializada quando voc define o seu valor pela primeira vez. Se voc declarar uma varivel, mas no definir o seu valor, ela ser considerada uma varivel no inicializada. O valor padro de uma varivel no inicializada undefined. Para obter mais informaes sobre como criar e usar variveis, consulte Sobre variveis na pgina 91.

Sobre a atribuio de valores


Voc pode definir um valor como o contedo atual de uma varivel. O valor poder consistir em seqncias de caracteres, nmeros, arrays, objetos, XML, datas ou at mesmo classes personalizadas criadas por voc. Lembre-se de que, no Flash, as variveis so declaradas com a palavra-chave var. Ao declarar a varivel, voc tambm atribui um tipo de dados a ela. Voc tambm pode atribuir um valor a uma varivel, desde que ele corresponda ao tipo de dados atribudo varivel. O exemplo a seguir mostra como criar uma varivel chamada catName:
var catName:String;

Sobre variveis

93

Aps declarar a varivel, voc poder atribuir um valor a ela. Aps a linha anterior do ActionScript, insira esta linha:
catName = "Pirate Eye";
NO T A 94

Como Pirate Eye uma seqncia de caracteres, o valor precisa estar entre aspas retas.

Esse exemplo atribui o valor Pirate Eye varivel catName. Ao declarar uma varivel, voc tambm pode atribuir um valor a ela, em vez de atribu-lo posteriormente (como nos exemplos anteriores). Voc poderia definir a varivel catName ao declar-la, como no seguinte exemplo:
var catName:String = "Pirate Eye";

Se desejar exibir o valor da varivel catName no ambiente de teste, voc poder usar a instruo trace(). Essa instruo envia o valor para o painel Output. Voc pode rastrear o valor da varivel catName e verificar que o valor real no inclui as aspas, usando o seguinte ActionScript:
var catName:String = "Pirate Eye"; trace(catName); // Pirate Eye

Lembre-se de que o valor atribudo deve corresponder ao tipo de dados atribudo a ele (nesse caso, String). Se voc posteriormente tentar atribuir um nmero varivel 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 varivel especificada. Quando um valor numrico atribudo a uma varivel, as aspas no so necessrias, como mostra o cdigo a seguir:
var numWrinkles:Number = 55;

Se desejar alterar o valor de numWrinkles posteriormente no cdigo, voc poder atribuir um novo valor usando o seguinte ActionScript:
numWrinkles = 60;

Ao reatribuir um valor a uma varivel existente, voc no precisa usar a palavra-chave var ou definir o tipo de dados da varivel (nesse caso, :Number). Se o valor for numrico ou booleano (true ou false), ele no usar aspas retas. Exemplos de valores numricos e booleanos so mostrados no trecho de cdigo a seguir:

Dados e tipos de dados

var age:Number = 38; var married:Boolean = true; var hasChildren:Boolean = false;

No exemplo anterior, a varivel age contm um valor inteiro (no-decimal), embora voc tambm possa usar um valor decimal ou de ponto flutuante, como 38,4. As variveis booleanas (como married ou hasChildren) tm somente dois valores possveis, true ou false. Se voc desejar criar um array e atribuir valores a ele, o formato ser ligeiramente diferente, como mostra o cdigo 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 informaes sobre como criar arrays e os operadores de acesso de array, consulte Sobre arrays na pgina 172 e Sobre uso da sintaxe de ponto para referenciar uma instncia na pgina 125. De maneira semelhante, voc pode criar um novo objeto chamado myObj. H dois mtodos para criar um novo objeto. O primeiro (e mais longo) mtodo 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");

O segundo e (mais curto) mtodo para codificar o array myObj o seguinte:


var myObj:Object = {firstName:"Steve", age:50, childrenArr:["Mike", "Robbie", "Chip"]};

Como voc pode observar nesse exemplo, o uso do mtodo mais curto pode poupar muito tempo e digitao, especialmente quando voc define instncias de objetos. importante estar familiarizado com essa sintaxe alternativa, pois voc a encontrar se trabalhar em equipes ou quando trabalhar com cdigo ActionScript de terceiros encontrado, por exemplo, na Internet ou em manuais.
N OT A

Nem todas as variveis precisam ser definidas explicitamente. O Flash cria algumas variveis automaticamente. Por exemplo, para encontrar as dimenses do Stage, voc poderia usar os valores destas duas variveis predefinidas: Stage.width e Stage.height.

Sobre variveis

95

Sobre operadores e variveis


Talvez voc no entenda os smbolos matemticos contidos em seu cdigo. Esses smbolos so chamados operadores no ActionScript. Os operadores calculam um novo valor a partir de um ou mais valores e so usados para atribuir um valor a uma varivel no cdigo. Use o operador de igualdade (=) para atribuir um valor a uma varivel:
var username:String = "Gus";

Outro exemplo o operador de adio (+), que adiciona dois ou mais valores numricos para produzir um novo valor. Se voc usar o operador + em dois ou mais valores de seqncia de caracteres, as seqncias sero concatenadas. Os valores manipulados pelos operadores so denominados operandos. Ao atribuir um valor, use um operador a fim de definir um valor para uma varivel. Por exemplo, o script a seguir usa o operador de atribuio para atribuir o valor 7 varivel numChildren:
var numChildren:Number = 7;

Se desejar alterar o valor da varivel numChildren, use o seguinte cdigo:


numChildren = 8;
NO TA

No necessrio usar var, pois a varivel foi definida anteriormente.

Para obter mais informaes sobre como usar operadores no ActionScript, consulte Sobre operadores na pgina 185.

Sobre a atribuio de nomes a variveis


Tenha cautela ao nomear variveis, pois, embora elas possam ter praticamente qualquer nome, algumas regras devem ser observadas. O nome de uma varivel deve seguir estas regras: Uma varivel deve ser um identificador.
N O TA 96

Um identificador um nome de varivel, propriedade, objeto, funo ou mtodo. O primeiro caractere do identificador deve ser uma letra, um sublinhado (_) ou um cifro ($). Os caracteres subseqentes podem ser uma letra, um nmero, um sublinhado ou um cifro.

Uma varivel no pode ser uma palavra-chave nem um literal do ActionScript, como true, false, null ou undefined. Para obter mais informaes sobre literais, consulte Sobre literais na pgina 138. As variveis devem ser exclusivas em seu escopo (consulte Sobre variveis e escopo na pgina 101).

Dados e tipos de dados

As variveis no devem ser um elemento da linguagem ActionScript, como um nome de classe.

Se voc no seguir as regras ao atribuir um nome a uma varivel, podero ocorrer erros de sintaxe ou resultados inesperados. No exemplo a seguir, se voc atribuir o nome new a uma varivel e testar o seu documento, o Flash gerar um erro do compilador:
// Este cdigo funciona como esperado. var helloStr:String = new String(); trace(helloStr.length); // 0 // Mas, se voc atribuir a uma varivel o mesmo nome de uma classe interna... var new:String = "hello"; // erro: identificador esperado var helloStr:String = new String(); trace(helloStr.length); // indefinido

O editor do ActionScript oferece suporte a referncias de cdigo para classes internas e variveis que tenham como base essas classes. Se desejar que o Flash fornea referncias de cdigo para um tipo de objeto especfico atribudo a uma varivel, voc poder atribuir um tipo estrito a ela. As referncias de cdigo fornecem uma sintaxe no estilo de dica de ferramenta e um menu pop-up que o ajuda a criar o cdigo rapidamente. Por exemplo, digite o seguinte cdigo:
var members:Array = new Array(); members.

Assim que voc digita o ponto (.) no painel Actions (Aes), o Flash exibe uma lista de mtodos e propriedades disponveis para objetos Array. Para obter as convenes de codificao recomendadas para a atribuio de nomes a variveis, consulte Atribuio de nome a variveis na pgina 772.

Usando variveis em um aplicativo


Nesta seo, voc usar variveis em trechos curtos de cdigo ActionScript. necessrio declarar e inicializar uma varivel em um script antes de us-la em uma expresso. As expresses so combinaes de operandos e operadores que representam um valor. Por exemplo, na expresso i+2, i e 2 so operandos, e + um operador. Se voc no inicializar uma varivel antes de us-la em uma expresso, a varivel no ficar indefinida e poder gerar resultados inesperados. Para obter mais informaes sobre como criar expresses, consulte o Captulo 5, Fundamentos da sintaxe e da linguagem, na pgina 119. Se voc usar uma varivel indefinida, como no exemplo a seguir, o valor da varivel no Flash Player 7 e verses posteriores ser NaN, e o script poder produzir resultados indesejados:

Sobre variveis

97

var squared:Number = myNum * myNum; trace(squared); // NaN var myNum:Number = 6;

No exemplo a seguir, a instruo que declara e inicializa a varivel myNum vem em primeiro lugar; portanto, squared pode ser substitudo por um valor:
var myNum:Number = 6; var squared:Number = myNum * myNum; trace(squared); // 36

Um comportamento semelhante ocorre quando voc passa uma varivel no definida para um mtodo ou uma funo, como mostrado a seguir.
Para comparar a passagem de variveis indefinidas e definidas para uma funo:
1.

Arraste um componente Button do painel Components (Componentes) at o Stage (Palco). Abra o inspetor Properties (Propriedades) e digite bad_button na caixa de texto Instance Name (Nome da instncia). Digite o seguinte cdigo no Frame 1 da Timeline.
// No funciona function badClickListener(evt:Object):Void { getURL(targetUrl); var targetUrl:String = "http://www.macromedia.com"; } bad_button.addEventListener("click", badClickListener);

2.

3.

4.

Selecione Control (Controlar) > Test Movie (Testar filme) e observe que o boto no funciona (ele no abre a pgina da Web). Arraste outro componente Button at o Stage. Selecione o boto. Abra o inspetor Properties e digite good_button na caixa de texto Instance Name. Adicione o seguinte ActionScript ao Frame 1 da Timeline (aps o ActionScript adicionado anteriormente):
// Funciona function goodClickListener(evt:Object):Void { var targetUrl:String = "http://www.macromedia.com"; getURL(targetUrl); } good_button.addEventListener("click", goodClickListener);

5. 6. 7.

8.

Selecione Control > Test Movie e clique no segundo boto adicionado ao Stage. Esse boto abre a pgina da Web corretamente.

98

Dados e tipos de dados

O tipo de dados que uma varivel contm afeta como e quando o seu valor ser alterado. Os tipos de dados primitivos, como Strings e Numbers, so passados por valor; isso significa que usado o valor atual da varivel, em vez de uma referncia a esse valor. Array e Object so exemplos de tipos de dados complexos. No exemplo a seguir, voc definir myNum como 15 e copiar o valor para otherNum. Quando voc altera myNum para 30 (na linha 3 do cdigo), o valor de otherNum permanece igual a 15 porque otherNum no procura o seu valor em myNum. A varivel otherNum contm o valor de myNum recebido (na linha 2 do cdigo).
Para usar variveis no ActionScript:
1. 2.

Crie um novo documento do Flash e salve-o como var_example.fla. Selecione o Frame 1 da Timeline e digite o cdigo a seguir no painel Actions:
var myNum:Number = 15; var otherNum:Number = myNum; myNum = 30; trace(myNum); // 30 trace(otherNum); // 15

Quando voc altera myNum para 30 (na linha 3 do cdigo), o valor de otherNum permanece igual a 15 porque otherNum no procura o seu valor em myNum. A varivel otherNum contm o valor de myNum recebido (na linha 2 do cdigo).
3. 4.

Selecione Control > Test Movie para que os valores sejam exibidos no painel Output. Agora adicione o seguinte ActionScript aps o cdigo 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

Nesse cdigo, a varivel inValue contm um valor primitivo, 3; portanto, o valor passado para a funo sqr(), e o valor retornado 9. O valor da varivel inValue no alterado, embora o valor de myNum seja alterado na funo.
5.

Selecione Control > Test Movie para que os valores sejam exibidos no painel Output.

O tipo de dados Object pode conter uma quantidade to grande de informaes complexas que uma varivel com esse tipo no armazenar o valor real, mas uma referncia a esse valor. Essa referncia semelhante a um alias que aponta para o contedo da varivel. Quando a varivel precisa saber seu valor, a referncia solicita o contedo e responde sem transferir o valor para a varivel.

Sobre variveis

99

Para obter informaes sobre como passar uma varivel por referncia, consulte Passando uma varivel por referncia na pgina 100.

Passando uma varivel por referncia


Como os tipos de dados Array e Object armazenam uma referncia a um valor, em vez de conterem seu valor real, tenha cautela ao trabalhar com arrays e objetos. O exemplo a seguir mostra como passar um objeto por referncia. Ao criar uma cpia do array, voc cria, na verdade, apenas uma cpia da referncia (ou alias) ao contedo do array. Ao editar o contedo do segundo array, voc modifica o contedo do primeiro e do segundo arrays, pois ambos apontam para o mesmo valor.
Para passar um objeto por referncia:
1.

Selecione File (Arquivo) > New (Novo), escolha Flash Document (Documento do Flash) para criar um novo arquivo FLA e salve-o como copybyref.fla. Selecione o Frame 1 da Timeline e digite o cdigo a seguir no painel Actions:
var myArray:Array = new Array("tom", "josie"); var newArray:Array = myArray; myArray[1] = "jack"; trace(myArray); // tom,jack trace(newArray); // tom,jack

2.

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 varivel newArray e passe uma referncia para myArray. Quando voc altera o segundo elemento de myArray para jack, ele afeta todas as variveis que contm uma referncia a ele. A instruo 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 contm um objeto Array, portanto, o array passado para a funo zeroArray() por referncia. A funo zeroArray() aceita um objeto Array como parmetro e define todos os elementos desse array como 0. Ela pode modificar o array porque ele passado por referncia.
Para passar um array por referncia:
1.

Selecione File > New, escolha Flash Document para criar um novo arquivo FLA e salve-o como arraybyref.fla.

100

Dados e tipos de dados

2.

Adicione o seguinte ActionScript ao Frame 1 da Timeline:


function zeroArray (theArr:Array):Void { var i:Number; for (i = 0; i < theArr.length; i++) { theArr[i] = 0; } } var myArr:Array = new Array(); myArr[0] = 1; myArr[1] = 2; myArr[2] = 3; trace(myArr); // 1,2,3 zeroArray(myArr); trace(myArr); // 0,0,0

3.

Selecione Control > Test Movie para testar o ActionScript. A primeira instruo trace() desse ActionScript exibe o contedo original do array myArray (1,2,3). Depois que voc chama a funo zeroArray() e passa uma referncia ao array myArray, cada um dos valores do array substitudo e definido como zero. A instruo trace() subseqente exibe o novo contedo do array myArray (0,0,0). Como o array passado por referncia, e no por valor, no necessrio retornar o seu contedo atualizado a partir da funo zeroArray().

Para obter mais informaes sobre arrays, consulte Sobre arrays na pgina 172.

Sobre variveis e escopo


O escopo de uma varivel refere-se rea na qual a varivel conhecida (definida) e na qual pode ser referenciada. A varivel poder ser conhecida em uma timeline ou em uma funo especfica, ou poder ser conhecida globalmente em todo o aplicativo. Para obter mais informaes sobre escopo, consulte Sobre escopo e referncia na pgina 130. A compreenso do escopo das variveis importante durante o desenvolvimento de aplicativos Flash com o ActionScript. Alm de indicar quando e onde possvel fazer referncia a variveis, o escopo especifica por quanto tempo determinada varivel existir em um aplicativo. Quando as variveis so definidas no corpo de uma funo, elas deixam de existir assim que a funo especificada encerrada. Se tentar fazer referncia a objetos no escopo incorreto ou a variveis expiradas, voc receber erros nos documentos do Flash, os quais levaro a um comportamento inesperado ou interrupo de uma funcionalidade. H trs tipos de escopos de varivel no ActionScript:

Variveis globais e funes esto disponveis para cada timeline e escopo do documento. Portanto, uma varivel global definida em todas as reas do cdigo.

Sobre variveis

101

Variveis de Timeline esto disponveis para qualquer script nessa timeline. Variveis locais esto disponveis no corpo da funo em que so declaradas (delineado por chaves). Portanto, as variveis locais so definidas somente em parte do cdigo.

Para obter diretrizes sobre o uso de escopo e variveis, consulte o Captulo 5, Sobre escopo e referncia, na pgina 130.
N OT A 102

As classes do ActionScript 2.0 criadas por voc oferecem suporte a escopos pblicos, privados e estticos de variveis. Para obter mais informaes, consulte Sobre membros de classe na pgina 265 e Controlando o acesso de membros em classes na pgina 288.

No possvel usar a atribuio estrita de dados para variveis globais. Para obter informaes e uma soluo alternativa, consulte Variveis globais na pgina 102.

Variveis globais
As variveis globais e as funes esto visveis para cada timeline e escopo do documento. Para declarar (ou criar) uma varivel com escopo global, use o identificador _global antes do nome da varivel e no use a sintaxe var =. Por exemplo, o cdigo a seguir cria a varivel global myName:
var _global.myName = "George"; // Sintaxe incorreta para a varivel global _global.myName = "George"; // Sintaxe correta para a varivel global

Entretanto, se inicializar uma varivel local com o mesmo nome de uma varivel global, voc no ter acesso varivel global enquanto estiver no escopo da varivel local, como mostra o exemplo a seguir:
_global.counter = 100; // Declara a varivel global trace(counter); // Acessa a varivel global e exibe 100 function count():Void { for (var counter:Number = 0; counter <= 2; counter++) { // Varivel local trace(counter); // Acessa a varivel local e exibe de 0 a 2 } } count(); trace(counter); // Acessa a varivel global e exibe 100

Esse exemplo mostra simplesmente que a varivel global no acessada no escopo da funo count(). Entretanto, voc poder acessar a varivel 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 cdigo:
trace(_global.counter);

Dados e tipos de dados

Voc no poder atribuir tipos de dados estritos s variveis criadas no escopo _global, pois precisar usar a palavra-chave var ao atribuir um tipo de dados. Por exemplo, isto no seria possvel:
_global.foo:String = "foo"; //erro de sintaxe var _global.foo:String = "foo"; //erro de sintaxe

O recurso de segurana sandbox do Flash Player verso 7 e verses posteriores impe restries ao acesso de variveis globais em arquivos SWF carregados a partir de domnios de segurana separados. Para obter mais informaes, consulte Captulo 17, Noes bsicas de segurana, na pgina 707.

Variveis de Timeline
As variveis de Timeline esto disponveis para qualquer script nessa timeline. Para declarar variveis de timeline, use a instruo var e inicialize-as em qualquer quadro da timeline. A varivel est disponvel para esse quadro e para todos os quadros subseqentes, como no exemplo apresentado a seguir.
Para usar variveis de timeline em um documento:
1. 2.

Crie um novo documento do Flash e atribua o nome timelinevar.fla a ele. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
var myNum:Number = 15; /* inicializada no Frame 1 e, portanto, disponvel para todos os quadros */

3. 4. 5.

Selecione o Frame 20 da Timeline. Selecione Insert (Inserir) > Timeline > Blank Keyframe (Quadro-chave em branco). Com o novo quadro-chave selecionado, digite o seguinte ActionScript no painel Actions:
trace(myNum);

6.

Selecione Control > Test Movie para testar o novo documento. O valor 15 exibido no painel Output aps aproximadamente um segundo. Como os documentos do Flash executam um loop, por padro, o valor 15 exibido continuamente no painel Output toda vez que a reproduo alcana o Frame 20 da Timeline. Para interromper a ao de loop, adicione stop(); aps a instruo trace().

necessrio declarar uma varivel de timeline antes de tentar acess-la em um script. Por exemplo, se voc colocar o cdigo var myNum:Number = 15; em Frame 20, todos os scripts anexados a um quadro anterior a esse no podero acessar myNum e sero indefinidos em vez de conterem o valor 15.

Sobre variveis

103

Variveis locais
Ao usar a instruo var em um bloco de funo, voc declara variveis locais. Quando uma varivel local declarada em um bloco de funo (tambm chamado definio de funo), ela definida no escopo desse bloco e expira no final dele. Portanto, a varivel local existe somente nessa funo. Por exemplo, se voc declarar uma varivel chamada myStr em uma funo localScope, essa varivel no estar disponvel fora da funo.
function localScope():Void { var myStr:String = "local"; } localScope(); trace(myStr); // Indefinida, porque myStr no est definida globalmente

Se o nome usado para a varivel local j estiver declarado como uma varivel de timeline, a definio local ter precedncia sobre a definio da timeline enquanto a varivel local estiver no escopo. A varivel de timeline ainda existir for a da funo. Por exemplo, o cdigo a seguir cria uma varivel de seqncia de caracteres timeline chamada str1 e, em seguida, cria uma varivel local de mesmo nome na funo scopeTest(). A instruo trace contida na funo gera a definio local da varivel, mas a instruo trace fora da funo gera a definio da varivel na timeline.
var str1:String = "Timeline"; function scopeTest():Void { var str1:String = "Local"; trace(str1); // Local } scopeTest(); trace(str1); // Timeline

No prximo exemplo, observe que certas variveis existem apenas enquanto determinada funo existir e podero gerar erros se voc tentar fazer referncia a elas fora do escopo dessa funo.
Para usar variveis locais em um aplicativo:
1. 2.

Crie um novo documento do Flash. Abra o painel Actions (Window (Janela) > Actions (Aes)) e adicione o seguinte ActionScript ao Frame 1 da Timeline:
function sayHello(nameStr:String):Void { var greetingStr:String = "Hello, " + nameStr; trace(greetingStr); } sayHello("world"); // Ol, mundo trace(nameStr); // indefinido trace(greetingStr); // indefinido

104

Dados e tipos de dados

3.

Selecione Control > Test Movie para testar o documento. O Flash exibe a seqncia de caracteres Ol, mundo no painel Output e indefinido para os valores de nameStr e greetingStr porque as variveis no esto mais disponveis no escopo atual. Somente possvel fazer referncia a nameStr e greetingStr na execuo da funo sayHello. Quando a funo encerrar, as variveis deixaro de existir.

As variveis i e j so geralmente usadas como contadores de loop. No exemplo a seguir, i usada como uma varivel local; ela s existe dentro da funo initArray():
var myArr:Array = new Array(); function initArray(arrayLength:Number):Void { var i:Number; for(i = 0; i < arrayLength; i++) { myArr[i] = i + 1; } } trace(myArr); // <em branco> initArray(3); trace(myArr); // 1,2,3 trace(i); // indefinido
N OT A

A sintaxe a seguir tambm 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 varivel i no est definida na timeline principal. Ela existe somente na funo initArray(). Voc pode usar variveis locais para ajudar a evitar conflitos de nome, que podem gerar resultados inesperados em seu aplicativo. Por exemplo, se usar age como uma varivel 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, no h conflito porque as variveis so usadas em escopos separados. recomendvel usar variveis locais no corpo de uma funo para que a funo possa atuar como um cdigo independente. Uma varivel local s pode ser alterada em seu prprio bloco de cdigo. Se uma expresso em uma funo usar uma varivel global, um cdigo ou eventos externos funo podero alterar seu valor, o que alteraria a funo. Voc pode atribuir um tipo de dados a uma varivel local ao declar-la. Isso ajuda a evitar a atribuio do tipo de dados incorreto a uma varivel existente. Para obter mais informaes, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85.

Sobre variveis

105

Sobre o carregamento de variveis


Nas sees a seguir, voc carregar variveis do servidor de diferentes maneiras ou em um documento a partir de uma seqncia de caracteres de URL ou de FlashVars (voc pode usar FlashVars a fim de passar variveis para o Flash) em seu cdigo HTML. Essas prticas demonstram que h vrias maneiras de usar variveis fora de um arquivo SWF. Para obter mais informaes sobre como carregar variveis (como pares de nome/valor), consulte o Captulo 16, Trabalhando com dados externos, na pgina 663. Voc poder usar variveis de diferentes maneiras em um arquivo SWF, dependendo de suas necessidades. Para obter mais informaes, consulte os seguintes tpicos:

Usando variveis a partir do URL na pgina 106 Usando FlashVars em um aplicativo na pgina 109 Carregando variveis a partir de um servidor na pgina 110

Usando variveis a partir do URL


Ao desenvolver um aplicativo ou um exemplo simples no Flash, voc poder passar valores de uma pgina HTML para o documento do Flash. Os valores passados algumas vezes so conhecidos como seqncia de caracteres de consulta ou variveis codificadas em URL. As variveis de URL so teis quando voc deseja criar um menu no Flash, por exemplo. Voc pode inicializar o menu para mostrar a navegao correta por padro. Voc tambm pode criar um visualizador de imagens no Flash e definir uma imagem padro para exibio no site da Web.
Para usar variveis de URL em um documento:
1. 2. 3.

Crie um documento do Flash e atribua o nome urlvariables.fla a ele. Selecione File (Arquivo) > Save As (Salvar como) e salve o documento na rea de trabalho. Selecione o Frame 1 da Timeline e adicione o seguinte cdigo ao painel Actions:
this.createTextField("myTxt", 100, 0, 0, 100, 20); myTxt.autoSize = "left"; myTxt.text = _level0.myURL;

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 variveis esto definidas corretamente antes de continuar, verifique a existncia das variveis no Flash. Para isso, verifique se elas esto indefinidas.

106

Dados e tipos de dados

5.

Para verificar se a varivel est definida, modifique o ActionScript adicionado ao painel Actions na etapa 3 de acordo com o cdigo a seguir. Adicione o cdigo que aparece em negrito:
this.createTextField("myTxt", 100, 0, 0, 100, 20); myTxt.autoSize = "left"; if (_level0.myURL == undefined) { myTxt.text = "myURL is not defined"; } else { myTxt.text = _level0.myURL; }

Quando voc publica o documento do Flash, um documento HTML criado por padro no mesmo diretrio do arquivo SWF. Se um arquivo HTML no tiver sido criado, selecione File (Arquivo) > Publish settings (Configuraes de publicao) e, em seguida, HTML na guia Formats (Formatos). Em seguida, publique o documento novamente. O cdigo a seguir demonstra o HTML do documento responsvel por incorporar um documento do Flash em uma pgina HTML. Examine esse HTML para entender como as variveis de URL funcionam na etapa a seguir (na qual voc adicionar um cdigo para essas variveis).
<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 variveis do documento HTML gerado para o documento do Flash, voc pode pass-las aps 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" />

Sobre variveis

107

<embed src="urlvariables.swf?myURL=http://weblogs.macromedia.com" 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> 7.

Se desejar passar diversas variveis para o Flash, separe os pares de nome/valor com um E comercial (&). Localize o seguinte cdigo da etapa 6:
?myURL=http://weblogs.macromedia.com

Substitua-o por este texto:


?myURL=http://weblogs.macromedia.com&myTitle=Macromedia+News+Aggregator

Lembre-se de que necessrio efetuar as mesmas alteraes nas marcas object e embed para manter a consistncia entre todos os navegadores. Observe que as palavras esto separadas pelos sinais +. As palavras so separadas dessa maneira porque os valores so codificados em URL e o sinal + representa um nico espao em branco.
N OT A

Para obter uma lista de caracteres especiais comuns codificados em URL, consulte a Flash TechNote (Nota tcnica do Flash), URL Encoding: Reading special characters from a text file (Codificao 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, podero ocorrer resultados inesperados. Em virtude da natureza dos pares de nome/valor e da anlise, se os valores a seguir forem passados para o Flash,
my.swf?name=Ben+&+Jerry&flavor=Half+Baked

ele criar as seguintes variveis (e valores) no escopo raiz:


'name': 'Ben ' (note space at end of value) ' Jerry': '' (note space at beginning of variable name and an empty value) '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 cdigo:


?myURL=http://weblogs.macromedia.com&myTitle=Macromedia+News+Aggregator

Substitua-o por este cdigo:


?myURL=Ben+%26+Jerry&flavor=Half+Baked

108

Dados e tipos de dados

9.

Salve o HTML revisado e teste o documento do Flash novamente. Observe que o Flash criou os seguintes pares de nome/valor.
'name': 'Ben & Jerry' 'flavor': 'Half Baked'
NO T A

Todos os navegadores aceitaro seqncias de caracteres de at 64K (65535 bytes). FlashVars deve ser atribuda nas marcas object e embed para que funcione em todos os navegadores.

Usando FlashVars em um aplicativo


Usar FlashVars para passar variveis para o Flash semelhante a usar o URL para passar variveis no cdigo HTML. Com FlashVars, em vez de serem passadas aps o nome do arquivo, as variveis so passadas em uma marca param separada, bem como na marca embed.
Para usar FlashVars em um documento:
1. 2.

Crie um novo documento do Flash e atribua o nome myflashvars.fla a ele. Selecione File > Publish Settings, verifique se HTML est selecionado e clique em OK para fechar a caixa de dilogo. Adicione o seguinte ActionScript ao Frame 1 da Timeline principal:
this.createTextField("myTxt", 100, 0, 0, 100, 20); myTxt.autoSize = "left"; if (_level0.myURL == undefined) { myTxt.text = "myURL is not defined"; } else { myTxt.text = _level0.myURL; }
NO T A

3.

Por padro, o cdigo HTML publicado no mesmo local que myflashvars.fla.

4. 5.

Selecione File (Arquivo) > Publish (Publicar) para publicar os arquivos SWF e HTML. Abra o diretrio que contm os arquivos publicados (onde voc salvou myflashvars.fla no disco rgido) e abra o documento HTML (myflashvars.html, por padro) em um editor HTML, como o Dreamweaver ou o Bloco de Notas. Adicione o cdigo 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" />

6.

Sobre variveis

109

<param name="movie" value="myflashvars.swf" /> <param name="FlashVars" value="myURL=http://weblogs.macromedia.com/"> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="myflashvars.swf" FlashVars="myURL=http:// weblogs.macromedia.com/" quality="high" bgcolor="#ffffff" width="550" height="400" name="myflashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object>

Esse cdigo passa uma nica varivel chamada myURL, que contm a seqncia 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 variveis no URL que elas ficam imediatamente disponveis no Flash quando o arquivo SWF carregado. Isso significa que no preciso criar funes para verificar se o carregamento das variveis foi concludo; esse procedimento seria necessrio se elas fossem carregadas com LoadVars ou XML.
7. 8.

Salve as alteraes no documento HTML e feche-o. Clique duas vezes em myflashvars.html para testar o aplicativo. O texto http://weblogs.macromedia.com, uma varivel do arquivo HTML, exibido no arquivo SWF.
N OT A

Todos os navegadores aceitaro seqncias de caracteres de at 64K (65.535 bytes). FlashVars deve ser atribuda nas marcas object e embed para que funcione em todos os navegadores.

Carregando variveis a partir de um servidor


H vrias maneiras de carregar variveis no Flash a partir de origens externas (como arquivos de texto, documentos XML etc.). Para obter mais informaes sobre como carregar variveis, incluindo pares de nome/valor, consulte o Captulo 16, Trabalhando com dados externos, na pgina 663. No Flash, possvel carregar facilmente variveis usando a classe LoadVars, como mostra este exemplo.

110

Dados e tipos de dados

Para carregar variveis de um servidor:


1. 2.

Crie um novo documento do Flash. Selecione o Frame 1 da Timeline e adicione o seguinte ActionScript ao painel Actions:
var my_lv:LoadVars = new LoadVars(); my_lv.onLoad = function(success:Boolean):Void { if (success) { trace(this.dayNames); // Domingo,Segunda-feira,Tera-feira,... } else { trace("Error"); } } my_lv.load("http://www.helpexamples.com/flash/params.txt");

Esse cdigo carrega um arquivo de texto de um servidor remoto e analisa seus pares de nome/valor.
DICA

Faa download ou exiba o arquivo de texto (http://www.helpexamples.com/flash/ params.txt) em um navegador se desejar saber como as variveis so formatadas.

3.

Selecione Control > Test Movie para testar o documento. Se o arquivo for carregado com xito, o evento complete ser chamado e o painel Output exibir o valor de dayNames. Se no for possvel fazer o download do arquivo de texto, o argumento success ser definido como false e o painel Output exibir o texto Error.

Usando variveis em um projeto


Quando voc cria animaes ou aplicativos com o Flash, em algumas situaes no ser preciso usar nenhum tipo de varivel em seu projeto. Por exemplo, se criar um sistema de login, voc talvez precise de variveis para determinar se o nome de usurio e a senha so vlidos ou se foram preenchidos. Para obter mais informaes sobre como carregar variveis (como pares de nome/valor), consulte o Captulo 16, Trabalhando com dados externos, na pgina 663. No exemplo a seguir, voc usar variveis para armazenar o caminho de uma imagem que est sendo carregada com a classe Loader, uma varivel para a instncia dessa classe e algumas funes que so chamadas dependendo do carregamento bem ou no sucedido do arquivo.

Sobre variveis

111

Para usar variveis em um projeto:


1. 2.

Crie um novo documento do Flash e salve-o como imgloader.fla. Selecione o Frame 1 da Timeline e adicione o seguinte ActionScript ao painel Actions:
/* Especifique a imagem padro se um valor no tiver sido passado com FlashVars. */ var imgUrl:String = "http://www.helpexamples.com/flash/images/ image1.jpg"; if (_level0.imgURL != undefined) { // Se a imagem tiver sido especificada, substitua o valor padro. imgUrl = _level0.imgURL; } 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);

A primeira linha do cdigo especifica a imagem a ser carregada dinamicamente no documento do Flash. Em seguida, verifique se um novo valor de imgURL foi especificado usando FlashVars ou variveis codificadas em URL. Se um novo valor tiver sido especificado, o URL da imagem padro ser substitudo pelo novo valor. Para obter informaes sobre como usar variveis de URL, consulte Usando variveis a partir do URL na pgina 106. Para obter informaes sobre FlashVars, consulte Usando FlashVars em um aplicativo na pgina 109. As linhas de cdigo seguintes definem a instncia MovieClip e um objeto ouvinte para a instncia MovieClipLoader futura. O objeto ouvinte de MovieClipLoader define dois manipuladores de eventos, onLoadInit e onLoadError. Os manipuladores sero chamados quando a imagem for carregada e inicializada com xito no Stage ou se a imagem no for carregada. Em seguida, crie a instncia MovieClipLoader e usa o mtodo addListener() para adicionar o objeto ouvinte definido anteriormente para MovieClipLoader. Finalmente, feito o download da imagem que ser ativada quando voc chamar o mtodo MovieClipLoader.loadClip(), que especifica o arquivo de imagem a ser carregado e o clipe de filme de destino no qual a imagem ser carregada.

112

Dados e tipos de dados

3.

Selecione Control > Test Movie para testar o documento. Como voc est testando o documento do Flash na ferramenta de criao, nenhum valor de imgUrl ser passado por FlashVars ou no URL e, portanto, a imagem padro ser exibida.

4.

Salve o documento do Flash e selecione File (Arquivo) > Publish (Publicar) para publicar o arquivo como um documento SWF e HTML.
NO T A

Verifique se Flash e HTML esto selecionados na caixa de dilogo Publish Settings. Selecione File > Publish Settings e clique na guia Formats. Em seguida, selecione as duas opes.

5.

Se testar o documento na ferramenta do Flash (selecione Control > Test Movie) ou em um navegador local (File > Publish Preview (Visualizar publicao) > HTML), voc ver que a imagem centralizada vertical e horizontalmente no Stage. Edite o documento HTML gerado em um editor (como Dreamweaver ou Bloco de Notas) e modifique o HTML padro de acordo com o seguinte texto:
<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="FlashVars" value="imgURL=http://www.helpexamples.com/flash/ images/image2.jpg"> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="urlvariables.swf" quality="high" FlashVars="imgURL=http:// www.helpexamples.com/flash/images/image2.jpg" 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.

7.

Teste o documento HTML para ver as alteraes. Uma imagem especificada no cdigo HTML exibida no arquivo SWF. Para modificar esse exemplo e usar suas prprias imagens, altere o valor de FlashVars (a seqncia de caracteres entre aspas).

Sobre variveis

113

Organizando dados em objetos


Voc j deve estar familiarizado com os objetos que coloca no Stage. Por exemplo, pode existir um objeto MovieClip no Stage, o qual contm outros clipes de filme. Os campos de texto, os clipes de filme e os botes so geralmente chamados objetos quando colocados no Stage. No ActionScript, os objetos so colees de propriedades e mtodos. Cada objeto tem seu prprio nome e uma instncia de determinada classe. Os objetos internos pertencem a classes predefinidas no ActionScript. Por exemplo, a classe interna Date fornece informaes do relgio do sistema no computador do usurio. A classe interna LoadVars pode ser usada para carregar variveis em um arquivo SWF. Tambm possvel criar objetos e classes com o ActionScript. Voc pode criar um objeto para armazenar uma coleo de dados, como o nome, o endereo e o telefone de uma pessoa. Tambm pode criar um objeto para armazenar informaes sobre as cores de uma imagem. A organizao de dados em objetos pode ajudar a manter seus documentos do Flash mais organizados. Para obter informaes gerais sobre como criar uma classe personalizada para armazenar uma coleo de mtodos e propriedades, consulte Criando arquivos de classes personalizados na pgina 249. Para obter informaes detalhadas sobre classes internas e personalizadas, consulte o Captulo 7, Classes, na pgina 239. H vrias maneiras de criar um objeto no ActionScript. O prximo exemplo cria objetos simples de duas maneiras diferentes e, em seguida, executa um loop no contedo desses objetos.
Para criar objetos simples no Flash:
1. 2.

Crie um novo documento do Flash e salve-o como simpleObjects.fla. Selecione o Frame 1 da Timeline e digite o seguinte ActionScript no painel Actions:
// O primeiro mtodo var firstObj:Object = new Object(); firstObj.firstVar = "hello world"; firstObj.secondVar = 28; firstObj.thirdVar = new Date(1980, 0, 1); // 1 de janeiro de 1980

Esse cdigo, que um dos mtodos usados para criar um objeto simples, cria uma nova instncia do objeto e define algumas propriedades dele.
3.

Agora digite o seguinte ActionScript aps o cdigo inserido na etapa 2.


// O segundo mtodo var secondObj:Object = {firstVar:"hello world", secondVar:28, thirdVar:new Date(1980, 0, 1)};

114

Dados e tipos de dados

Este outro mtodo para criar um objeto. Os dois objetos so equivalentes. O cdigo acima cria um novo objeto e inicializa algumas propriedades usando a notao abreviada do objeto.
4.

Para executar um loop em cada um dos objetos anteriores e exibir o seu contedo, adicione o seguinte ActionScript ao Frame 1 da Timeline (aps o cdigo j inserido):
var i:String; for (i in firstObj) { trace(i + ": " + firstObj[i]); }

5.

Selecione Control > Test Movie e o seguinte texto ser exibido no painel Output:
firstVar: hello world secondVar: 28 thirdVar: Tue Jan 1 00:00:00 GMT-0800 1980

Voc tambm pode usar arrays para criar objetos. Em vez de ter uma srie de variveis como firstname1, firstname2 e firstname3 para representar uma coleo de variveis, possvel criar um array de objetos para representar os mesmos dados. Essa tcnica demonstrada a seguir.
Para usar um array para criar um objeto:
1. 2.

Crie um novo documento do Flash e salve-o como arrayObject.fla. Selecione o Frame 1 da Timeline e digite o seguinte ActionScript no painel Actions:
var usersArr:Array = new Array(); usersArr.push({firstname:"George"}); usersArr.push({firstname:"John"}); usersArr.push({firstname:"Thomas"});

A vantagem de organizar variveis em arrays e objetos que muito mais fcil executar um loop nas variveis e ver os valores, como mostra a etapa a seguir.
3.

Digite o seguinte cdigo aps 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

Organizando dados em objetos

115

O exemplo a seguir representa outro loop executado em objetos. Neste exemplo, criado um objeto e um loop executado nele com for..in, e cada propriedade exibida no painel Output:
var myObj:Object = {var1:"One", var2:"Two", var3:18, var4:1987}; var i:String; for (i in myObj) { trace(i + ": " + myObj[i]); } //gera a seguinte sada: /* var1: One var2: Two var3: 18 var4: 1987 */

Para obter informaes sobre como criar loops, consulte o Captulo 5, Usando os loops for, na pgina 166. Para obter informaes sobre loops for...in, consulte Usando os loops for..in na pgina 167. Para obter mais informaes sobre objetos, consulte o Captulo 7, Classes, na pgina 239.

Sobre a converso
O ActionScript 2.0 permite que voc converta um tipo de dados em outro. A converso de um objeto em um tipo diferente consiste em converter o valor armazenado no objeto ou na varivel em outro tipo. Os resultados da converso 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 parnteses (()) e preceda-o com o nome do novo tipo. Por exemplo, o cdigo a seguir converte um valor booleano em um inteiro.
var myBoolean:Boolean = true; var myNumber:Number = Number(myBoolean);

Para obter mais informaes sobre a converso, consulte os seguintes tpicos:

Sobre a converso de objetos na pgina 117

116

Dados e tipos de dados

Sobre a converso de objetos


A sintaxe usada na converso type(item), onde voc deseja que o compilador se comporte como se o tipo de dados do item fosse type. A converso basicamente uma chamada de funo, que retornar null se a converso falhar durante a execuo (isso ocorre nos arquivos publicados no Flash Player 7 ou verses posteriores; os arquivos publicados no Flash Player 6 no oferecem suporte a falhas de converso durante a execuo). Se a converso for bem sucedida, o retorno da chamada de funo ser o objeto original. Entretanto, o compilador no capaz de determinar se uma converso falhar durante a execuo e no gerar erros durante a compilao nesses casos. O cdigo a seguir mostra um exemplo:
// Both the Cat and Dog classes are subclasses of the Animal class function bark(myAnimal:Animal) { var foo:Dog = Dog(myAnimal); foo.bark(); } var curAnimal:Animal = new Dog(); bark(curAnimal); // Funcionar curAnimal = new Cat(); bark(curAnimal); // No funcionar

Nesse exemplo, voc declarou ao compilador que foo um objeto Dog e, portanto, o compilador pressupe que foo.bark(); uma instruo legal. Entretanto, o compilador no sabe que a converso falhar (ou seja, que voc tentou converter um objeto Cat em um tipo Animal), portanto, nenhum erro ocorrer durante a compilao. Entretanto, se voc incluir uma verificao no script para garantir que a converso tenha xito, podero ocorrer erros durante a execuo, como mostra este exemplo.
function bark(myAnimal:Animal) { var foo:Dog = Dog(myAnimal); if (foo) { foo.bark(); } }

Voc pode converter uma expresso em uma interface. Se a expresso for um objeto que implemente a interface ou tenha uma classe base que implemente a interface, a converso ter xito. Caso contrrio, ela falhar.
N O TA

A converso em null ou undefined retornar undefined.

Sobre a converso

117

No possvel substituir tipos de dados primitivos que tm uma funo de converso global correspondente por um operador de converso de mesmo nome. Isso ocorre porque as funes de converso globais tm precedncia sobre os operadores de converso. Por exemplo, no possvel converter em Array porque a funo de converso Array() tem precedncia sobre o operador de converso. Esse exemplo define duas variveis de seqncia de caracteres (firstNum e secondNum), que so adicionadas juntas. O resultado inicial que os nmeros so concatenados em vez de serem adicionados, pois so do tipo de dados String. A segunda instruo trace converte os dois nmeros no tipo de dados Number antes de executar a adio que gera o resultado adequado. A converso de dados importante ao trabalhar com dados carregados por meio de XML ou FlashVars, como mostra o seguinte exemplo:
var firstNum:String = "17"; var secondNum:String = "29"; trace(firstNum + secondNum); // 1729 trace(Number(firstNum) + Number(secondNum)); // 46

Para obter mais informaes sobre as funes de converso de dados, consulte a entrada de cada funo de converso em ActionScript 2.0 Language Reference: %{funo Array}%, %{funo Boolean}%, %{funo Number}%, %{funo Object}% e %{funo String}%.

118

Dados e tipos de dados

CAPTULO 5

Fundamentos da sintaxe e da linguagem


A funo da sintaxe e das instrues do ActionScript semelhante funo das palavras nas frases, que podem ser agrupadas para formar os pargrafos. O ActionScript pode ser to simples quanto isso. Por exemplo, na lngua portuguesa, um ponto encerra uma frase. No ActionScript, um ponto-e-vrgula encerra uma instruo. Na linguagem ActionScript, possvel digitar uma ao stop() para interromper o loop da reproduo de uma instncia de clipe de filme ou de um arquivo SWF. possvel tambm escrever milhares de linhas de cdigo para potencializar uma aplicao bancria interativa. Como voc pode ver, o ActionScript pode realizar tarefas muito simples ou tarefas muito complexas. O Captulo 4, Dados e tipos de dados, explicou como a linguagem ActionScript usa os dados e como possvel format-los no cdigo. Este captulo demonstrar como formar as instrues no ActionScript usando a sintaxe. Ele contm pequenos trechos de cdigo e alguns exemplos para demonstrar os conceitos fundamentais da linguagem. Os prximos captulos apresentaro exemplos de cdigo mais longos e cada vez mais complexos que complementaro e facilitaro os fundamentos aprendidos neste captulo. As regras gerais descritas nesta seo aplicam-se a toda a linguagem ActionScript. A maioria dos termos do ActionScript tambm tem requisitos individuais. Para obter as regras de um termo especfico, consulte a entrada correspondente em ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0. Aplicar os princpios bsicos do ActionScript para criar programas sofisticados pode ser desafiador para usurios novatos no ActionScript. Para obter mais informaes sobre como aplicar as regras descritas nesta seo, consulte Captulo 19, Melhores prticas e convenes de codificao para ActionScript 2.0, na pgina 767.
NO TA

Neste captulo, voc adicionar o ActionScript diretamente a um quadro da Timeline (Linha de tempo). Nos captulos posteriores, voc usar as classes para separar o ActionScript do arquivo FLA.

119

Para obter mais informaes sobre como trabalhar com os fundamentos da sintaxe e da linguagem do ActionScript, consulte os seguintes tpicos:
Sobre sintaxe, instrues e expresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Sobre sintaxe de ponto e caminhos de destino. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Sobre pontuadores de linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Sobre constantes e palavras-chave. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Sobre instrues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Sobre arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Sobre operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

Sobre sintaxe, instrues e expresses


A linguagem ActionScript composta de classes internas. necessrio usar a sintaxe correta do ActionScript para formar as instrues, a fim de que o cdigo seja compilado e executado corretamente no Flash. Nesse caso, a sintaxe seria a gramtica e a ortografia de uma linguagem de programao. O compilador no poder compreender uma sintaxe incorreta e exibir erros ou avisos no painel Output (Sada) quando voc tentar utilizar o documento no ambiente de teste. Portanto, a sintaxe um conjunto de regras e diretrizes que ajudam a compor a linguagem ActionScript corretamente. Uma instruo uma diretriz fornecida ao arquivo FLA para fazer algo; por exemplo, executar uma ao especfica. Voc pode, por exemplo, utilizar uma instruo condicional para determinar se algo verdadeiro ou existe. Em seguida, poder executar aes especificadas, como funes ou expresses, de acordo com o status da condio, se verdadeira ou no. A instruo if condicional e avalia uma condio para determinar a prxima ao a ser executada no cdigo.
// if statement if (condition) { // statements; }

Para obter mais informaes sobre as instrues, consulte Sobre instrues na pgina 149. As expresses, diferentes das instrues, so combinaes legais de smbolos do ActionScript que representam um valor. As expresses tm valores, enquanto os valores e as propriedades tm tipos. Uma expresso pode ser composta por operadores, operandos, valores, funes e procedimentos. A expresso segue as regras de precedncia e associao do ActionScript. Geralmente, o Flash Player interpreta a expresso e retorna um valor que pode ser utilizado no aplicativo.

120

Fundamentos da sintaxe e da linguagem

Por exemplo, o cdigo a seguir uma expresso:


x + 2

Na expresso anterior, x e 2 so operandos e + um operador. Para obter mais informaes sobre os operadores e operandos, consulte Sobre operadores na pgina 185. Para obter mais informaes sobre os objetos e as propriedades, consulte Tipo de dados Object na pgina 83. A maneira como a linguagem ActionScript formatada tambm determina at que ponto ser possvel fazer a manuteno do cdigo. Por exemplo, difcil entender a lgica de um arquivo FLA que no contenha recuos ou comentrios, ou que tenha convenes de formatao e nomeao inconsistentes. Quando voc recua blocos do ActionScript (como loops e instrues if ), a leitura e a depurao do cdigo tornam-se mais fceis caso ocorra algum problema. Para obter mais informaes sobre como formatar o ActionScript, consulte Formatando a sintaxe do ActionScript na pgina 799. Voc encontrar tambm a formatao correta do ActionScript nessas sees. Para obter mais informaes sobre os fundamentos da sintaxe e da linguagem, consulte os seguintes tpicos:

Diferenas entre o ActionScript e o JavaScript Sobre distino entre maisculas e minsculas

Diferenas entre o ActionScript e o JavaScript


O ActionScript semelhante linguagem de programao JavaScript bsica. No preciso conhecer o JavaScript para utilizara o ActionScript. No entanto, se voc conhec-lo, o ActionScript lhe parecer familiar. Este manual no tem como objetivo ensinar programao. H vrios recursos que fornecem mais informaes sobre os conceitos gerais de programao e sobre a linguagem JavaScript.

A especificao de linguagem ECMAScript (ECMA-262) Edition 3 deriva-se do JavaScript e serve como padro internacional para a linguagem JavaScript. O ActionScript tambm baseia-se nessa especificao. Para obter mais informaes, consulte www.ecmainternational.org/publications/standards/Ecma-262.htm. O site da tecnologia Java contm tutoriais sobre a programao orientada a objetos (http:/ /java.sun.com/docs/books/tutorial/java/index.html) que destinam-se linguagem Java, mas so teis para compreendermos os conceitos aplicados ao ActionScript. O ActionScript no oferece suporte a objetos especficos de navegadores, como Document, Window e Anchor.

Algumas diferenas entre o ActionScript e o JavaScript so descritos na lista a seguir:

Sobre sintaxe, instrues e expresses

121

O ActionScript no oferece suporte completo a todos os objetos internos do JavaScript. O ActionScript no oferece suporte a algumas construes sintticas do JavaScript, como rtulos de instruo. No ActionScript, a funo eval() pode executar somente referncias a variveis. O ActionScript 2.0 oferece suporte a vrios recursos que no constam na especificao ECMA-262, como as classes e a atribuio forte de tipos de dados. Muitos desses recursos so modelados aps a especificao de linguagem ECMAScript (ECMA-262) Edition 3 (consulte www.ecma-international.org/publications/standards/Ecma-262.htm). O ActionScript no oferece suporte a expresses regulares que usam o objeto RegExp. No entanto, a Macromedia Central no oferece suporte ao objeto RegExp. Para obter mais informaes sobre a Macromedia Central, consulte www.macromedia.com/software/ central.

Sobre distino entre maisculas e minsculas


Quando voc escreve usando a linguagem ActionScript para Flash Player 7 e posterior, o cdigo faz distino entre maisculas e minsculas. Isso significa que as variveis com uso de maisculas e minsculas um pouco diferente no so consideradas idnticas. O cdigo do ActionScript a seguir mostra isso:
// use mixed capitalization var firstName:String = "Jimmy"; // use all lower case trace(firstname); // undefined

Uma outra alternativa seria escrever o cdigo da seguinte maneira:


// In file targeting Flash Player 8 // and either ActionScript 1.0 or ActionScript 2.0 // // Sets properties of two different objects cat.hilite = true; CAT.hilite = true; // Creates three var myVar:Number var myvar:Number var mYvAr:Number
N O TA 122

different variables = 10; = 10; = 10;

No recomendvel diferenciar as variveis ou qualquer identificador pelo uso de maisculas e minsculas. Para obter mais informaes sobre como atribuir nomes a variveis, consulte Captulo 19, Melhores prticas e convenes de codificao para ActionScript 2.0, na pgina 767.

Fundamentos da sintaxe e da linguagem

Quando voc publica usando verses do Flash Player (Flash Player 6 e anterior), o Flash rastreia a seqncia de caracteres Jimmy no painel Output (Sada). Como o Flash Player 7 e as verses posteriores fazem distino entre maisculas e minsculas, firstName e firstname so consideradas duas variveis separadas (no ActionScript 1.0 ou ActionScript 2.0). Esse um conceito importante. Se voc criou arquivos FLA para Flash Player 6 ou anterior com maisculas e minsculas no correspondentes nas variveis, a funcionalidade e os arquivos podem ser interrompidos durante a converso do arquivo ou aplicativo que referencia uma verso mais recente do Flash Player. Portanto, recomenda-se ser coerente na escolha das convenes de maisculas e minsculas, como foi feito neste manual. Assim, tambm ser mais fcil diferenciar as variveis, as classes e os nomes de funo. No use maisculas e minsculas para diferenciar dois identificadores. Altere a instncia, a varivel ou o nome da classe, e no apenas as maisculas ou minsculas. Para obter mais informaes sobre as convenes de codificao, consulte Captulo 19, Melhores prticas e convenes de codificao para ActionScript 2.0, na pgina 767. A distino entre maisculas e minsculas tem um grande impacto quando se est trabalhando com um servio da Web que usa suas prprias regras de nomeao de variveis e quando as variveis so includas ao retornarem do servidor para o arquivo SWF. Por exemplo, se voc usar o servio da Web ColdFusion, os nomes de propriedade em uma estrutura ou objeto podero ter todas as letras maisculas; por exemplo, FIRSTNAME. Os resultados podem ser inesperados se voc no utilizar os nomes exatamente como fornecidos no Flash.
N OT A

A distino entre maisculas e minsculas tambm afeta as variveis externas carregadas em um arquivo SWF (as variveis carregadas com LoadVars.load(), por exemplo).

A distino entre maisculas e minsculas implementada para scripts externos, como os arquivos de classe do ActionScript 2.0, os scripts importados atravs do comando #include e os scripts de um arquivo FLA. Se voc encontrar erros durante a execuo e estiver exportando para mais de uma verso do Flash Player, analise os arquivos de script externos e os scripts dos arquivos FLA para confirmar se o uso de maisculas e minsculas est consistente. A distino entre maisculas e minsculas implementada em cada arquivo SWF. Se um aplicativo Flash Player 8 estrito (que faz distino entre maisculas e minsculas) chamar um arquivo SWF do Flash Player 6 no estrito, o ActionScript executado no arquivo SWF do Player 6 ser no estrito. Por exemplo, se voc usar loadMovie() para carregar um arquivo SWF do Flash Player 6 em um arquivo SWF do Flash Player 8, o SWF da verso 6 continuar no fazendo distino entre maisculas e minsculas, embora o da verso 8 seja considerado um arquivo que faz distino entre maisculas e minsculas.

Sobre sintaxe, instrues e expresses

123

Quando a sinalizao da sintaxe por cores for ativada, os elementos de linguagem escritos com as maisculas ou minsculas corretas ficaro azuis, por padro. Para obter mais informaes, consulte Sobre palavras reservadas na pgina 147.

Sobre sintaxe de ponto e caminhos de destino


No ActionScript, voc usa o operador de ponto (.) (sintaxe de ponto) para acessar as propriedades ou os mtodos que pertencem a um objeto ou a uma instncia do Stage (Palco). Alm disso, esse operador utilizado para identificar o caminho de destino de uma instncia (como um clipe de filme), varivel, funo ou objeto. Uma expresso com sintaxe de ponto comea com o nome do objeto ou clipe de filme seguido de um ponto e termina com o elemento a ser especificado. As sees a seguir demonstram como escrever expresses com sintaxe de ponto. Para controlar um clipe de filme, arquivo SWF carregado ou boto, necessrio especificar um caminho de destino. Os caminhos de destino so endereos hierrquicos de nomes de instncias de clipes de filme, variveis e objetos em um arquivo SWF. Para especificar um caminho de destino de um clipe de filme ou boto, voc deve atribuir um nome de instncia ao clipe de filme ou boto. Para atribuir um nome a uma instncia de clipe de filme, selecione a instncia e digite o nome da instncia no Property inspector (Inspetor de propriedades). Uma outra alternativa especificar o nome da instncia com o cdigo, caso ela tenha sido criada atravs do ActionScript. Voc pode usar um caminho de destino para atribuir uma ao a um clipe de filme ou para obter ou definir o valor de uma varivel ou propriedade. Para obter mais informaes sobre como atribuir um nome de instncia e usar a sintaxe de ponto para referenciar uma instncia, consulte os seguinte tpicos:

Sobre uso da sintaxe de ponto para referenciar uma instncia na pgina 125. Sobre escopo e referncia na pgina 130 Usando o boto Target Path na pgina 131 Sobre sintaxe de barra na pgina 131

Para obter mais informaes sobre os objetos e as propriedades, consulte Tipo de dados Object na pgina 83.

124

Fundamentos da sintaxe e da linguagem

Sobre uso da sintaxe de ponto para referenciar uma instncia


Para escrever a linguagem ActionScript que controla uma instncia (por exemplo, um clipe de filme) ou manipula ativos em um arquivo SWF carregado, especifique o nome e o endereo dessa instncia no cdigo. Isso denominado caminho de destino. Para referenciar (ou enderear) objetos em um arquivo SWF, use a sintaxe de ponto (tambm denominada notao de ponto). Por exemplo, necessrio referenciar uma instncia de clipe de filme ou de boto antes de aplicar uma ao a ela. A sintaxe de ponto ajuda a criar um caminho para a instnciaalvo. O caminho da instncia-alvo , algumas vezes, denominado caminho de destino. Um arquivo FLA tem uma hierarquia especfica. possvel criar instncias no Stage (Palco) ou usar o ActionScript. possvel, at mesmo, criar instncias dentro de outras ou deix-las aninhadas em vrias outras instncias. Qualquer instncia pode ser manipulada, contanto que ela tenha um nome. Para atribuir um nome s instncias, use um nome de instncia, que voc pode especificar de duas formas (conforme demonstrado abaixo):

Manualmente, selecionando uma instncia e digitando um nome de instncia no Property inspector (Inspetor de propriedades) (quando uma instncia estiver no Stage). Dinamicamente, usando o ActionScript. Para criar uma instncia, use o ActionScript. Atribua um nome a ela ao cri-la.

Para atribuir um nome instncia no Property inspector, digite um nome na caixa de texto Instance Name (Nome da instncia). Tambm possvel atribuir um nome de instncia a um objeto criado com o ActionScript. Isso pode ser muito simples, como mostra o cdigo a seguir:
this.createEmptyMovieClip("pic_mc", this.getNextHighestDepth()); pic_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");

Esse cdigo cria um novo clipe de filme e atribui a ele o nome de instncia pic_mc. Em seguida, voc pode manipular a instncia pic_mc usando o cdigo, como acontece ao carregar uma imagem nele, conforme demonstrou o cdigo anterior. Para obter mais informaes sobre como trabalhar com o escopo, consulte Sobre escopo e referncia na pgina 130 e Sobre variveis e escopo na pgina 101.

Sobre sintaxe de ponto e caminhos de destino

125

Referenciando uma instncia


Para que uma instncia funcione no arquivo SWF, necessrio referenci-la e instru-la a executar alguma tarefa, atribuindo uma ao a ela ou alterando suas propriedades. Geralmente, preciso definir o local do arquivo SWF em que essa instncia est (por exemplo, em que linha de tempo ela est ou em que instncia ela est aninhada), criando o caminho de destino. Lembre-se que voc recebeu vrias instncias nos nomes de instncia do arquivo FLA e, depois, adicionou cdigo ao arquivo FLA que usa esses nomes de instncia. Ao fazer isso, voc referencia essa instncia e a instrui a fazer algo (por exemplo, mover a reproduo ou abrir uma pgina da Web). Para obter mais informaes sobre os objetos e as propriedades, consulte Tipo de dados Object na pgina 83.
Para referenciar uma instncia:
1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione Flash Document (Documento do Flash). Selecione File > Save As (Salvar como) e atribua o nome target.fla ao arquivo. Use a ferramenta Oval para desenhar uma forma no Stage (Palco). Desenhe uma forma oval de qualquer tamanho e cor. Use a ferramenta Selection (Seleo) para selecionar a forma oval no Stage.
DICA

2. 3.

4.

Lembre-se de selecionar o trao e preench-lo se necessrio.

5.

Selecione Modify (Modificar) > Convert to Symbol (Converter em smbolo), selecione a opo Movie Clip (Clipe de filme) e clique em OK para criar o smbolo. Selecione o clipe de filme no Stage e atribua a ele o nome de instncia myClip no Property inspector (Inspetor de propriedades). Insira uma nova camada e renomeie-a como actions. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da camada actions:
myClip._xscale = 50;

6.

7. 8.

Essa linha de cdigo referencia a instncia myClip no Stage. O ActionScript dimensiona a instncia para a metade de sua largura original. Como o ActionScript est na mesma linha de tempo que o smbolo de clipe de filme, necessrio referenciar a instncia usando somente o nome da instncia. Se a instncia estiver em outra linha de tempo ou aninhada em outra instncia, ser necessrio modificar o caminho de destino apropriadamente.

126

Fundamentos da sintaxe e da linguagem

Referenciando uma instncia aninhada


Tambm possvel referenciar as instncias aninhadas dentro de outras instncias. Talvez voc queira colocar uma segunda instncia de clipe de filme dentro da instncia myClip no exerccio de Referenciando uma instncia na pgina 126. Voc tambm pode referenciar essa instncia aninhada usando o ActionScript. Antes de passar para o prximo exerccio, necessrio concluir o exerccio de Referenciando uma instncia na pgina 126 e seguir estas etapas para referenciar uma instncia aninhada.
Para referenciar uma instncia aninhada:
1.

Abra target.fla conforme indicado no procedimento sobre como referenciar uma instncia e renomeie-a como target2.fla. Clique duas vezes na instncia myClip no Stage (Palco). Selecione a ferramenta Oval e desenhe a forma oval dentro da instncia myClip. Selecione a nova forma e, em seguida, selecione Modify (Modificar)> Convert to Symbol (Converter em smbolo). Selecione a opo Movie Clip (Clipe de filme) e clique em OK. Selecione a nova instncia e digite myOtherClip na caixa de texto Instance Name (Nome da instncia) no inspetor Properties (Inspetor de propriedades). Clique em Scene 1 (Cena 1) na barra de edio para retornar Timeline (Linha de tempo) principal. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da camada actions:
myClip.myOtherClip._xscale = 50;

2. 3. 4.

5. 6.

7.

8.

Esse ActionScript redimensiona a instncia myOtherClip para metade de sua largura atual. Como o arquivo target.fla modificou a propriedade _xscale das instncias myClip e myOtherClip um smbolo aninhado, observe que myOtherClip ter 25% da largura original. Se voc trabalhar com clipes de filme aninhados que tenham suas prprias linhas de tempo, manipule a reproduo na linha de tempo de uma instncia aninhada usando um cdigo similar ao trecho a seguir:
myClip.nestedClip.gotoAndPlay(15); myClip.someOtherClip.gotoAndStop("tweenIn");

Observe que o clipe manipulado (nestedClip, por exemplo) aparece imediatamente antes da ao. Voc observar essa tendncia nas prximas sees.

Sobre sintaxe de ponto e caminhos de destino

127

Voc no est limitado a acessar mtodos e propriedades de instncias predefinidos no Stage, conforme demonstrado nos exemplos anteriores. Tambm possvel definir uma varivel em um clipe de filme, conforme visto no cdigo a seguir, que define uma varivel no clipe de filme starClip:
starClip.speed = 1.1; starClip.gravity = 0.8;

Se as variveis de velocidade ou gravidade j existissem na instncia de clipe de filme starClip, os valores anteriores seriam substitudos assim que os novos valores fossem definidos. possvel adicionar novas propriedades ao clipe de filme starClip, pois a classe MovieClip foi definida com a palavra-chave dynamic. A palavra-chave dynamic especifica que os objetos baseados na classe especificada (nesse caso, MovieClip) podem adicionar e acessar propriedades dinmicas durante a execuo. Para obter mais informaes sobre a instruo dinmica, consulte %{dynamic statement}% em ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0).

Referenciando instncias dinmicas e contedo carregado


Tambm possvel criar um objeto usando o ActionScript e referenci-lo posteriormente usando um caminho de destino. Por exemplo, voc pode usar o ActionScript a seguir para criar um clipe de filme. Depois, poder alterar a rotao desse clipe de filme usando o ActionScript, conforme mostrado neste exemplo:
Para referenciar uma instncia de clipe de filme criada dinamicamente:
1. 2. 3.

Crie um novo documento do Flash e salve o arquivo como targetClip.fla. Insira uma nova camada e renomeie-a como actions. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da camada actions:
this.createEmptyMovieClip("rotateClip", this.getNextHighestDepth()); trace(rotateClip); rotateClip._rotation = 50;

4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. Voc pode informar que criou um clipe de filme devido instruo trace, mas no conseguir ver nada no Stage (Palco). Mesmo que tenha adicionado um cdigo que crie uma instncia 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. 6.

Retorne ao ambiente de criao e abra o painel Actions (Aes). Digite o seguinte ActionScript aps o cdigo adicionado na etapa 3:
rotateClip.loadMovie("http://www.helpexamples.com/flash/images/ image1.jpg");

128

Fundamentos da sintaxe e da linguagem

Esse cdigo carregar uma imagem no clipe de filme rotateClip criado junto com o cdigo. Voc est referenciando a instncia rotateClip com o ActionScript.
7.

Selecione Control > Test Movie para testar o documento. Agora, aparecer uma imagem no Stage que pode ser girada 50 no sentido horrio.

Tambm possvel referenciar ou identificar partes dos arquivos SWF carregados em um arquivo SWF base.
Para identificar um arquivo SWF carregado:

Use _levelX, onde X o nmero de nvel especificado na funo loadMovie() que carregou o arquivo SWF. Por exemplo, um arquivo SWF carregado no nvel 99 possui o caminho de destino _level99. No exemplo a seguir, um arquivo SWF carregado no nvel 99 e define sua visibilidade para false:
//Load the SWF onto level 99. loadMovieNum("contents.swf", 99); //Set the visibility of level 99 to false. loaderClip.onEnterFrame = function(){ _level99._visible = false; };
DICA

recomendvel evitar o uso de nveis caso seja possvel carregar um contedo nos clipes de filme em profundidades diferentes. O mtodo MovieClip.getNextHighestDepth() permite criar dinamicamente novas instncias de clipe de filme no Stage sem que seja necessrio verificar se j existe alguma instncia em uma profundidade especfica.

Definindo variveis atravs de um caminho


possvel definir variveis para instncias aninhadas dentro de outras instncias. Por exemplo, se voc quiser definir uma varivel para uma forma que esteja dentro de outra forma, use o cdigo a seguir. A instncia submitBtn est dentro de formClip na linha de tempo principal:
this.formClip.submitBtn.mouseOver = true;

Para expressar um mtodo ou propriedade de um objeto especfico (como um clipe de filme ou um campo de texto), use esse padro. Por exemplo, a propriedade de um objeto seria
myClip._alpha = 50;

Sobre sintaxe de ponto e caminhos de destino

129

Sobre escopo e referncia


Quando voc aninha instncias, o clipe de filme que aninha um segundo clipe de filme denominado pai da instncia aninhada. A instncia aninhada chama-se instncia filha. O Stage (Palco) e a Timeline (Linha de tempo) principais so basicamente um clipe de filme e podem, portanto, serem referenciados como tal. Para obter mais informaes sobre o escopo, consulte Sobre variveis e escopo na pgina 101. possvel referenciar instncias pai e linhas de tempo pai usando o ActionScript. Para referenciar a linha de tempo atual, use a palavra-chave this. Por exemplo, ao referenciar um clipe de filme chamado myClip que esteja na linha de tempo atual, use
this.myClip.

Se desejar, elimine a palavra-chave this e use apenas


myClip

Voc poderia adicionar a palavra-chave this para fins de legibilidade e consistncia. Para obter mais informaes sobre as prticas de codificao recomendadas, consulte Captulo 19, Melhores prticas e convenes de codificao para ActionScript 2.0, na pgina 767. Caso rastreie o clipe de filme, _level0.myClip aparecer no painel Output (Sada) para cada trecho de cdigo 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);

Teste o arquivo SWF e a seguinte mensagem aparecer no painel Output:


me: _level0.myClip my parent: _level0

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 animao animalClip, a seguinte instruo da instncia dogClip instruir animalClip a interromper a animao:
this._parent.stop();

Se voc estiver familiarizado com o Flash e o ActionScript, provavelmente j observou pessoas usando o escopo _root. O escopo _root geralmente se refere linha de tempo principal do documento atual do Flash. Evite usar o escopo _root, a no ser que seja absolutamente necessrio. Use caminhos de destino relativos, em vez de _root.

130

Fundamentos da sintaxe e da linguagem

Caso utilize _root no cdigo, possivelmente ocorrero erros se o arquivo SWF for carregado em outro documento do Flash. Quando o arquivo SWF carregado em outro arquivo SWF, o escopo _root do arquivo carregado pode apontar para o escopo raiz no qual ele carregado, em vez de referenciar sua prpria raiz, conforme o desejado. Isso pode gerar resultados imprevisveis ou interromper a funcionalidade.

Usando o boto Target Path


s vezes, demora um pouco para descobrir um caminho de destino especfico ou qual caminho de destino necessrio para um determinado cdigo. Se voc referenciar uma instncia existente no Stage (Palco), poder usar o boto Target Path (Caminho de destino) para determinar qual deve ser o caminho dessa instncia.
Para usar o boto Target Path:
1.

Abra o painel Actions (Aes) (Window (Janela) > Actions) e clique no boto Insert Target Path (Inserir caminho de destino). Os clipes de filme do documento atual aparecem em uma caixa de dilogo. Selecione uma das instncias na lista da caixa de dilogo. Clique em OK. O caminho de destino da instncia selecionada aparece no painel Script.

2. 3. 4.

Sobre sintaxe de barra


A sintaxe de barra foi usada no Flash 3 e 4 para indicar o caminho de destino de um clipe de filme ou de uma varivel. Essa sintaxe suportada pelo ActionScript 1.0 no Flash Player 7 e verses anteriores, mas no suportada no ActionScript 2.0 e Flash Player 7 ou 8. O uso da sintaxe de barra no recomendvel, a menos que no haja outra opo. Ela necessria, por exemplo, quando preciso criar um contedo destinado especificamente ao Flash Player 4 ou Flash Lite 1.1 (e verses anteriores), no qual a sintaxe de barra deve ser utilizada. Para obter mais informaes sobre o Flash Lite, consulte a pgina de produtos do Flash Lite.

Sobre sintaxe de ponto e caminhos de destino

131

Sobre pontuadores de linguagem


Existem diversos pontuadores de linguagem no Flash. Os tipos de pontuadores mais comuns so ponto-e-vrgula, (;), dois-pontos (:), parnteses [()] e chaves ({}). Cada um desses pontuadores tm um significado especial na linguagem Flash e ajuda a definir tipos de dados, encerrar instrues ou estruturar o ActionScript. As sees a seguir explicam como usar os pontuadores no cdigo. Para obter mais informaes sobre os pontuadores de linguagem, consulte os seguintes tpicos:

Ponto-e-vrgula e dois-pontos na pgina 132 Chaves na pgina 133 Parnteses na pgina 137 Sobre literais na pgina 138 Sobre comentrios na pgina 139

Para obter mais informaes sobre o operador de ponto (.) e os operadores de acesso de array ([]), consulte Usando operadores de ponto e de acesso de array na pgina 194. Para obter informaes sobre espao em branco e formatao de cdigo, consulte Formatando a sintaxe do ActionScript na pgina 799.

Ponto-e-vrgula e dois-pontos
As instrues do ActionScript so encerradas com um ponto-e-vrgula (;), conforme demonstrado nas duas linhas de cdigo a seguir:
var myNum:Number = 50; myClip._alpha = myNum;

possvel omitir o ponto-e-vrgula. Nesse caso, o compilador do ActionScript assumir que cada linha de cdigo representa uma nica instruo. No entanto, recomendvel usar o ponto-e-vrgula ao criar scripts, pois ele melhora a legibilidade do cdigo. Quando voc clica no boto Auto Format (Formatao automtica) do painel Actions (Aes) ou da janela Script, os ponto-e-vrgulas precedentes so anexados ao final da instruo, por padro.
N OT A 132

O uso de um ponto-e-vrgula para encerrar uma instruo permite inserir mais de uma instruo em uma nica linha, mas isso geralmente dificulta a leitura do cdigo.

Um outro local em que se usa o ponto-e-vrgula nos loops for. Ele utilizado para separar parmetros, conforme mostrado no exemplo a seguir. O exemplo se repete de 0 a 9 e exibe cada nmero no painel Output (Sada):

Fundamentos da sintaxe e da linguagem

var i:Number; for (i = 0; i < 10; i++) { trace(i); // 0,1,...,9 }

Os dois-pontos (:) so utilizados no cdigo para atribuir tipos de dados s variveis. Para atribuir a um item um tipo de dados especfico, defina seu tipo usando a palavra-chave var e a sintaxe ps-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; }

possvel 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();

Tambm possvel especificar se os objetos so do tipo de dados Function ou Void. Para obter mais informaes sobre como atribuir tipos de dados, consulte Captulo 4, Dados e tipos de dados, na pgina 75.

Chaves
Agrupe os eventos, as definies de classe e as funes do ActionScript em blocos usando as chaves ({}). Coloque a chave de abertura na mesma linha da declarao.
N OT A

Tambm possvel colocar a chave de abertura na linha aps a declarao. As convenes de codificao recomendam colocar a chave de abertura na mesma linha para fins de consistncia. Para obter informaes sobre as chaves e convenes de codificao, consulte Captulo 19, Melhores prticas e convenes de codificao para ActionScript 2.0, na pgina 767.

if..else

Delimite cada instruo entre chaves quando ela fizer parte de uma estrutura de controle ou for), mesmo que ela contenha somente uma instruo. Essa prtica ajudar a evitar erros no ActionScript quando voc esquecer de adicionar chaves ao cdigo. O exemplo a seguir mostra um cdigo escrito de modo insatisfatrio:

Sobre pontuadores de linguagem

133

var numUsers:Number; if (numUsers == 0) trace("no users found.");

Embora esse cdigo seja vlido, ele considerado insatisfatrio porque no tem chaves delimitando as instrues.
DICA

As chaves sero adicionadas a essa instruo se voc clicar no boto Check Syntax (Verificar sintaxe).

Nesse caso, se voc adicionar uma segunda instruo aps a instruo trace, a segunda instruo ser executada, quer a varivel numUsers seja igual a 0 ou no, o que poder gerar resultados inesperados. Por isso, adicione as chaves para que a sada do cdigo seja semelhante mostrada neste exemplo:
var numUsers:Number; if (numUsers == 0) { trace("no users found"); }

O exemplo a seguir cria um objeto ouvinte de eventos e uma instncia MovieClipLoader.


var imgUrl:String = "http://www.helpexamples.com/flash/images/image1.jpg"; this.createEmptyMovieClip("img_mc", 100); var mclListener:Object = new Object(); mclListener.onLoadStart = function() { trace("starting"); }; mclListener.onLoadInit = function(target_mc:MovieClip):Void { trace("success"); }; mclListener.onLoadError = function(target_mc:MovieClip):Void { trace("failure"); }; var myClipl:MovieClipLoader = new MovieClipLoader(); myClipl.addListener(mclListener); myClipl.loadClip(imgUrl, img_mc);

O exemplo a seguir exibe um arquivo de classe simples que pode ser utilizado para criar um objeto Student. Para obter mais informaes sobre os arquivos de classe, consulte Captulo 7, Classes, na pgina 239.
Para usar chaves em um arquivo do ActionScript:
1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione ActionScript File (Arquivo do ActionScript). Selecione File > Save As (Salvar como) e salve o novo documento como Student.as.

2.

134

Fundamentos da sintaxe e da linguagem

3.

Adicione o seguinte ActionScript ao arquivo AS:


// Student.as class Student private var private var private var private var { _id:String; _firstName:String; _middleName:String; _lastName:String;

public function Student(id:String, firstName:String, middleName:String, lastName:String) { this._id = id; this._firstName = firstName; this._middleName = middleName; this._lastName = lastName; } public function get firstName():String { return this._firstName; } public function set firstName(value:String):Void { this._firstName = value; } // ... } 4. 5.

Salve o arquivo de classe. Selecione File > New e clique em Flash Document (Documento do Flash) para criar um novo arquivo FLA. Salve o novo arquivo FLA como student_test.fla. Digite o seguinte ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
// student_test.fla import Student; var firstStudent:Student = new Student("cst94121", "John", "H.", "Doe"); trace(firstStudent.firstName); // John firstStudent.firstName = "Craig"; trace(firstStudent.firstName); // Craig

6. 7.

8. 9.

Selecione File > Save (Salvar) para salvar as alteraes efetuadas em student_test.fla. Selecione Control (Controlar) > Test Movie (Testar filme) para testar os arquivos FLA e AS.

O exemplo a seguir demonstra como as chaves so utilizadas nas funes.


Para usar chaves nas funes:
1.

Selecione File > New e, em seguida, selecione Flash Document para criar um novo arquivo FLA.

Sobre pontuadores de linguagem

135

2. 3.

Selecione File > Save As e atribua o nome checkform.fla ao arquivo. Arraste uma instncia do componente Label do painel Components (Componentes) para o Stage (Palco). Abra o Property inspector (Inspetor de propriedades) (Window (Janela) > Properties (Propriedades) > Properties) e, com a instncia de componente Label selecionada, digite o nome de instncia status_lbl na caixa de texto Instance Name (Nome da instncia). Digite 200 na caixa de texto W (width) (L (largura)) para redimensionar o componente para 200 pixels de largura. Arraste uma instncia do componente TextInput para o Stage e atribua a ela o nome firstName_ti. Arraste uma instncia do componente Button para o Stage e atribua a ela o nome submit_button. Selecione o Frame 1 da Timeline e adicione o seguinte ActionScript ao painel Actions (Aes):
function checkForm():Boolean { status_lbl.text = ""; if (firstName_ti.text.length == 0) { status_lbl.text = "Please enter a first name."; return false; } return true; } function clickListener(evt_obj:Object):Void { var success:Boolean = checkForm(); }; submit_button.addEventListener("click", clickListener);

4.

5.

6.

7.

8.

9.

Selecione File > Save para salvar o documento do Flash. Control > Test Movie para testar o cdigo no ambiente de criao. No arquivo SWF, uma mensagem de erro ser exibida se voc clicar na instncia Button do Stage e no tiver o texto no componente TextInput firstName_ti. Esse erro aparecer no componente Label e informar aos usurios que eles precisam digitar um nome.

10. Selecione

O prximo exemplo que utiliza chaves mostra como criar e definir propriedades em um objeto. Neste exemplo, as propriedades so definidas no objeto atravs da especificao dos nomes de variveis entre chaves ({}):
var myObject:Object = {id:"cst94121", firstName:"John", middleName:"H.", lastName:"Doe"}; var i:String; for (i in myObject) { trace(i + ": " + myObject[i]); }

136

Fundamentos da sintaxe e da linguagem

/* id: cst94121 firstName: John middleName: H. lastName: Doe */

Tambm possvel usar chaves vazias como atalho de sintaxe para a funo new Object(). Por exemplo, o cdigo a seguir cria uma instncia Object vazia:
var myObject:Object = {};
DICA

Lembre-se de que cada chave de abertura deve ter uma chave de fechamento.

Parnteses
Ao definir uma funo no ActionScript, voc coloca os parmetros entre parnteses [()], conforme mostrado nas linhas de cdigo a seguir:
function myFunction(myName:String, myAge:Number, happy:Boolean):Void { // Your code goes here. }

Ao chamar uma funo, voc tambm coloca qualquer parmetro transmitido para a funo entre parnteses, conforme mostrado no exemplo a seguir:
myFunction("Carl", 78, true);

possvel usar parnteses para substituir a ordem de precedncia do ActionScript ou para facilitar a leitura das instrues do ActionScript. Isso significa que possvel alterar a ordem em que os valores so computados delimitando certos valores entre colchetes, conforme mostra o exemplo a seguir:
var computedValue:Number = (circleClip._x + 20) * 0.8;

Devido ordem de precedncia, se voc no utilizou os parnteses ou usou duas instrues separadas, a multiplicao ser computada primeiro, o que significa que a primeira operao ser 20 * 0.8. O resultado, 16, ser adicionado ao valor atual de circleClip._x e, por fim, atribudo varivel computedValue. Se voc no usar parnteses, dever adicionar uma instruo para avaliar a expresso, conforme mostrado no exemplo a seguir:
var tempValue:Number = circleClip._x + 20; var computedValue:Number = tempValue * 0.8;

Assim com os colchetes e as chaves, necessrio verificar se o parntese de abertura tem um parntese de fechamento.

Sobre pontuadores de linguagem

137

Sobre literais
Um literal um valor que aparece diretamente no cdigo. Os literais so valores de constante (invariveis) dos documentos do Flash. Como exemplos de literal, pode-se citar true, false, 0, 1, 52 ou, at mesmo, a seqncia de caracteres foo. Os exemplos a seguir so literais:
17 "hello" -3 9.4 null undefined true false

Os literais tambm podem ser agrupados para formar literais compostos. Os literais de array so delimitados por colchetes ([]) e usam a vrgula (,) para separar elementos de array. Um literal de array pode ser usado para inicializar um array. Os exemplos a seguir mostram dois arrays que so inicializados atravs de literais de array. possvel usar a instruo new e transmitir o literal composto como um parmetro para o construtor da classe Array, mas tambm possvel 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); // assigning literal directly var myStrings:Array = ["alpha", "beta", "gamma"]; var myNums:Array = [1, 2, 3, 5, 8];

Os literais tambm podem ser usados para inicializar um objeto genrico. Um objeto genrico uma instncia da classe Object. Os literais de objeto so delimitados por chaves ({}) e usam a vrgula (,) para separar as propriedades de objeto. Cada propriedade declarada com doispontos (:), pontuador que separa o nome da propriedade do valor da propriedade. possvel criar um objeto genrico usando a instruo new e transmitir o literal de objeto como um parmetro para o construtor da classe Object. Uma outra alternativa atribuir o literal de objeto diretamente instncia que est sendo declarada. O exemplo a seguir cria um novo objeto genrico e o inicializa com trs 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}); // assigning literal directly var myObject:Object = {propA:1, propB:2, propC:3};

138

Fundamentos da sintaxe e da linguagem

No confunda um literal de seqncia de caracteres com um objeto String. No exemplo a seguir, a primeira linha de cdigo cria o literal de seqncia de caracteres firstStr e a segunda linha de cdigo cria o objeto String secondStr:
var firstStr:String = "foo" var secondStr:String = new String("foo")

Use literais de seqncia de caracteres, a menos que seja estritamente necessrio usar um objeto String para obter melhor desempenho. Para obter mais informaes sobre as seqncias de caracteres, consulte Sobre seqncias de caracteres e a classe String na pgina 477.

Sobre comentrios
Os comentrios so uma forma de fazer anotaes no cdigo com descries em ingls sem formatao que no sero avaliadas pelo compilador. possvel usar comentrios no cdigo para descrever o que o cdigo est fazendo ou quais dados sero retornados ao documento. O uso dos comentrios pode ajudar voc a lembrar decises de codificao importantes e pode ser til para qualquer outra pessoa que leia o cdigo. Os comentrios devem explicar claramente a inteno do cdigo, e no apenas traduzi-lo. Se algo no estiver muito bvio no cdigo, adicione comentrios. altamente recomendvel o uso de comentrios para adicionar observaes aos scripts. Os comentrios documentam as decises tomadas em relao ao cdigo, respondendo a perguntas "como" e "por qu". Eles facilitam a compreenso do ActionScript. Por exemplo, voc pode descrever uma soluo alternativa nos comentrios. Assim, voc ou outro desenvolvedor poder localizar facilmente sees de cdigo para atualizar ou corrigir. Se o problema for corrigido ou amenizado em uma verso futura do Flash ou Flash Player, ser possvel aperfeioar o ActionScript removendo a soluo alternativa. Evite usar comentrios desordenados. Um exemplo de comentrio desordenado uma linha de sinais de igual (=) ou asteriscos (*) utilizada para criar um bloco ou uma separao em torno dos comentrios. Em vez disso, use espaos em branco para separar os comentrios do ActionScript. Se voc formatar o ActionScript usando o boto Auto Format (Formatao automtica) do painel Actions (Aes) ou da Janela Script, o espao em branco ser removido. Lembre-se de adicionar novamente o espao em branco no cdigo ou use linhas de comentrio nicas (//) para manter o espaamento. Ser mais fcil remover essas linhas depois que voc formatar o cdigo do que tentar encontrar o espao em branco.

Sobre pontuadores de linguagem

139

Antes de implantar o projeto, remova quaisquer comentrios suprfluos do cdigo, como define the x and y variables (definir variveis x e y) ou outros comentrios bvios para outros desenvolvedores. Caso ache que h muitos comentrios extras no ActionScript, considere se no necessrio reescrever alguns cdigos. Se for necessrio incluir vrios comentrios sobre o funcionamento do cdigo, isso geralmente ser um indcio de que o ActionScript no sofisticado nem intuitivo. Quando a sinalizao da sintaxe por cores for ativada, os comentrios aparecero em cinza, por padro. O tamanho dos comentrios no afeta o tamanho do arquivo exportado e eles no precisam seguir as regras de palavras-chave ou sintaxe do ActionScript.
NO TA 140

O uso de comentrios no ActionScript mais importante quando o objetivo treinar o pblico-alvo. Adicione comentrios ao cdigo se voc estiver criando aplicativos de exemplo destinados a demonstrar o Flash ou se estiver escrevendo artigos ou tutoriais sobre o ActionScript.

Comentrios de linha nica


Use comentrios de linha nica para adicionar um comentrio a uma nica linha de cdigo. Voc poderia criar uma nica linha de cdigo ou adicionar uma breve descrio sobre a funo de uma parte de um cdigo. Para indicar que uma linha ou parte de uma linha um comentrio, anteceda o comentrio com duas barras (//), conforme mostrado no cdigo a seguir:
// The following sets a local variable for age. var myAge:Number = 26;

Os comentrios de linha nica so geralmente utilizados para explicar um pequeno trecho de cdigo. possvel usar comentrios de linha nica para fazer qualquer comentrio breve que caiba em uma linha. O exemplo a seguir inclui um comentrio de linha nica:
while (condition) { // handle condition with statements }

Comentrios de vrias linhas


Use comentrios de vrias linhas (tambm denominados comentrios em bloco) para fazer comentrios que ocupem diversas linhas. Os desenvolvedores geralmente usam comentrios de vrias linhas para descrever arquivos, estruturas de dados e mtodos. Eles so geralmente inseridos no incio de um arquivo e antes ou dentro de um mtodo.

Fundamentos da sintaxe e da linguagem

Para criar um bloco de comentrio, coloque /* no incio das linhas comentadas e */ no final do bloco de comentrio. Essa tcnica permite criar comentrios extensos sem adicionar // no incio de cada linha. O uso de // em diversas linhas seqenciais pode acarretar alguns problemas quando os comentrios so modificados. O formato de um comentrio de vrias linhas o seguinte:
/* O ActionScript a seguir inicializa variveis utilizadas nos sistemas principais e de submenus. As variveis so usadas para controlar as opes escolhidas. */
D IC A DICA

Se voc inserir os caracteres de comentrio (/* e */) em linhas separadas no incio e no final do comentrio, poder coment-las facilmente antecedendo-as com caracteres de barras duplas (//) (por exemplo, ///* e //*/). Isso permitir inserir e retirar o comentrio do cdigo com rapidez e facilidade.

Ao inserir uma grande quantidade de scripts em um bloco de comentrios (que significa comentar uma parte do script), voc poder testar partes especficas de um script. Por exemplo, quando o script a seguir executado, a parte do cdigo contida no bloco no executada:
// The following code runs. var x:Number = 15; var y:Number = 20; // The following code is commented out and will not run. /* // create new Date object var myDate:Date = new Date(); var currentMonth:Number = myDate.getMonth(); // convert month number to month name var monthName:String = calcMonth(currentMonth); var year:Number = myDate.getFullYear(); var currentDate:Number = myDate.getDate(); */ // The code below runs. var namePrefix:String = "My name is"; var age:Number = 20; Recomenda-se inserir uma linha em branco antes de um comentrio em bloco.

Sobre pontuadores de linguagem

141

Comentrios finais
Use o recurso de comentrio final para adicionar um comentrio mesma linha do cdigo. Esses comentrios aparecem na mesma linha do cdigo do ActionScript. Os desenvolvedores geralmente usam comentrios finais para indicar o que uma varivel contm ou para descrever o valor retornado em uma linha do of ActionScript. Os comentrios finais devem ter o seguinte formato:
var myAge:Number = 26; // variable for my age trace(myAge); // 26

Recue os comentrios para a direita, a fim de que os leitores possam distingu-los do cdigo. Tente manter os comentrios alinhados, se possvel, conforme mostrado no cdigo a seguir.
var myAge:Number = 28; var myCountry:String = "Canada"; var myCoffee:String = "Hortons"; // my age // my country // my coffee preference

Se voc usar a formatao automtica (clique no boto Auto Format (Formatao automtica) no painel Actions (Aes), os comentrios finais se movero para a prxima linha. Adicione esses comentrios depois que formatar o cdigo. Do contrrio, ser necessrio modificar a posio dos comentrios aps o uso do boto Auto Format.

Comentrios dentro das classes


Use comentrios nas classes e interfaces para document-las e ajudar os desenvolvedores a compreender o contedo da classe. Recomenda-se iniciar todos os arquivos de classe com um comentrio que fornea o nome da classe, seu nmero de verso, a data e o copyright. Por exemplo, voc poderia documentar a classe com um comentrio semelhante a este:
/** Pelican, class version 1.2 10/10/2005 copyright Macromedia, Inc. */

Use comentrios em bloco para descrever arquivos, estruturas de dados e mtodos. Eles so geralmente inseridos no incio de um arquivo e antes ou dentro de um mtodo. H dois tipos de comentrios em uma classe ou arquivo de interface comum: comentrios de documentao e comentrios de implementao. Os comentrios de documentao so usados para descrever as especificaes do cdigo e no descrevem a implementao. Use os comentrios de documentao para descrever interfaces, classes, mtodos e construtores. Os comentrios de implementao so usados para fazer comentrios sobre o cdigo ou sobre a implementao de sees especficas do cdigo.

142

Fundamentos da sintaxe e da linguagem

Inclua um comentrio de documentao para cada classe, interface ou membro e coloque-o diretamente antes da declarao. Se houver informaes adicionais a serem documentadas que no se ajustem aos comentrios de documentao, use comentrios de implementao (em blocos de comentrios ou em comentrios de linha nica). Os comentrios de implementao devem vir logo aps a declarao. Os dois tipos de comentrios usam delimitadores um pouco diferentes. Os comentrios de documentao so delimitados por /** e */, enquanto os de implementao so delimitados por /* e */.
DICA

No inclua comentrios que no estejam diretamente relacionados classe que est sendo lida. Por exemplo, no inclua comentrios que descrevam o pacote correspondente.

Tambm possvel usar comentrios de linha nica, comentrios em bloco e comentrios finais nos arquivos de classe. Para obter mais informaes sobre esses tipos de comentrios, consulte as seguintes sees: Comentrios de linha nica na pgina 140 Comentrios de vrias linhas na pgina 140 Comentrios finais na pgina 142

Sobre constantes e palavras-chave


As constantes e as palavras-chave so os componentes bsicos da sintaxe do ActionScript. As constantes so propriedades com um valor fixo que no podem ser alteradas. Portanto, elas so valores que no se alteram em todo o aplicativo. O Flash possui diversas constantes predefinidas, que podem ajudar a simplificar o desenvolvimento de um aplicativo. A classe Key possui um exemplo de constantes. Alm disso, ela contm vrias propriedades, como Key.ENTER ou Key.PGDN. Se voc utilizar as constantes, nunca precisar memorizar que os valores de cdigo das teclas Enter e Page Down so 13 e 34. Os valores de constante no facilitam apenas o desenvolvimento e a depurao, mas tambm a leitura do cdigo pelos outros desenvolvedores. As palavras-chave no ActionScript so usadas para executar tipos especficos de aes. Por isso, elas tambm so palavras reservadas, que no podem ser usadas como identificadores (como os nomes de varivel, funo ou rtulo). Como exemplos de palavras reservadas, pode-se citar if, else, this, function e return.

Sobre constantes e palavras-chave

143

Para obter mais informaes sobre as constantes e palavras-chave, consulte os seguintes tpicos:

Usando constantes na pgina 144 Sobre palavras-chave na pgina 146 Sobre palavras reservadas na pgina 147

Para obter mais informaes sobre os objetos e as propriedades, consulte Tipo de dados Object na pgina 83. Para obter uma lista das constantes da linguagem (como false e NaN), consulte ActionScript Language Elements (Elementos da linguagem ActionScript) > categoria Constants (Constantes) em ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0).

Usando constantes
As constantes so propriedades com um valor fixo que no podem ser alteradas. Portanto, elas so valores que no se alteram em todo o aplicativo. A linguagem ActionScript contm vrias constantes predefinidas. Por exemplo, as constantes BACKSPACE, ENTER, SPACE e TAB so 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 so teis quando se quer comparar valores e usar valores fixos no aplicativo. Para testar se o usurio est pressionando a tecla Enter, use a seguinte instruo:
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 necessrio desativar os atalhos de teclado no ambiente de criao. 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 visualizao do arquivo SWF. No Flash, no h como criar seus prprios valores de constante, a no ser quando voc cria suas prprias classes personalizadas com variveis de membro privadas. No possvel criar uma varivel somente leitura no Flash. As variveis devem conter letras minsculas ou letras minsculas e maisculas. No entanto, as constantes (variveis que no se alteram) devem conter letras maisculas. Separe as palavras com caracteres de sublinhado, conforme mostrado no ActionScript a seguir:

144

Fundamentos da sintaxe e da linguagem

var BASE_URL:String = "http://www.macromedia.com"; //constant var MAX_WIDTH:Number = 10; //constant

Escreva as constantes estticas em maisculas e separe as palavras com um sublinhado. No codifique diretamente constantes numricas, a menos que a constante seja 1, 0 ou -1, que voc pode usar em um loop for como um valor de contador. possvel usar constantes em situaes nas quais necessrio fazer referncia a uma propriedade cujo valor nunca alterado. Isso ajudar a detectar erros de digitao no cdigo que provavelmente no sero encontrados se voc usar literais, alm de permitir a alterao do valor em um nico local. Para obter mais informaes sobre os literais, consulte Sobre literais na pgina 138. Por exemplo, a definio de classe no exemplo a seguir cria trs constantes que seguem a conveno de nomeao utilizada pelo ActionScript 2.0.
Para usar constantes em um aplicativo:
1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione ActionScript File (Arquivo do ActionScript) para criar um arquivo AS. Atribua o nome ConstExample.as ao novo arquivo. Digite o seguinte cdigo na janela Script:
class ConstExample { public static var EXAMPLE_STATIC:String = "Global access"; public var EXAMPLE_PUBLIC:String = "Public access"; private var EXAMPLE_PRIVATE:String = "Class access"; }

2. 3.

A propriedade EXAMPLE_STATIC esttica, o que significa que ela se aplica classe como um todo, e no a uma determinada instncia da classe. Voc deve acessar a propriedade esttica de uma classe usando o nome da classe, e no o nome de uma instncia. No possvel acessar uma propriedade esttica atravs de uma instncia de classe.
4. 5.

Crie um novo documento do Flash e salve-o como const.fla. Abra o painel Actions (Aes) e digite o cdigo 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 esttica, voc usa esse cdigo para acessar o valor da propriedade.
6.

Selecione Control > Test Movie para testar o documento.


Global access

ser exibido no painel Output (Sada).

7.

No painel Actions, digite esse cdigo aps o cdigo adicionado na etapa 5.

Sobre constantes e palavras-chave

145

trace(ConstExample.EXAMPLE_PUBLIC); // error trace(ConstExample.EXAMPLE_PRIVATE); // error 8.

Selecione Control > Test Movie para testar o documento. As propriedades EXAMPLE_PUBLIC e EXAMPLE_PRIVATE no so estticas. Quando voc tenta acessar os valores atravs da classe, recebe a seguinte mensagem de erro:
The property being referenced does not have the static attribute.

Para acessar uma propriedade no esttica, acesse o valor atravs de uma instncia da classe. Como a propriedade EXAMPLE_PUBLIC pblica, ela est disponvel para ser codificada fora da definio da classe.
9.

No painel Actions, exclua as instrues trace adicionadas nas etapas 5 e 7. o seguinte cdigo no painel Actions:
var myExample:ConstExample = new ConstExample(); trace(myExample.EXAMPLE_PUBLIC); // output: Public access

10. Insira

Esse cdigo cria a instncia myExample e acessa a propriedade EXAMPLE_PUBLIC.


11.

Selecione Control > Test Movie para testar o documento.


Public access

ser exibido no painel Output.

12. No 13.

painel Actions, exclua a instruo trace adicionada na etapa 10.

Insira o seguinte cdigo no painel Actions:


trace(myExample.EXAMPLE_PRIVATE); // error

A propriedade EXAMPLE_PRIVATE privada e, portanto, est disponvel somente na definio da classe.


14. Selecione

Control > Test Movie para testar o documento.

A mensagem The member is private and cannot be accessed (O membro privado e no pode ser acessado) ser exibida no painel Output. Para obter mais informaes sobre as classes internas e sobre como criar classes personalizadas, consulte Captulo 7, Classes, na pgina 239.

Sobre palavras-chave
As palavras-chave so palavras do ActionScript que tm uma funo especfica. Por exemplo, use a palavra-chave var para declarar uma varivel. A palavra-chave var mostrada na linha de cdigo a seguir:
var myAge:Number = 26;

146

Fundamentos da sintaxe e da linguagem

Uma palavra-chave uma palavra reservada que tem um significado especfico: por exemplo, use a palavra-chave class para definir uma nova classe do ActionScript e a palavra-chave var para declarar variveis locais. Estes so outros exemplos de palavras-chave reservadas: if, else, this, function e return. As palavras-chave no podem ser usadas como identificadores (como nomes de varivel, funo ou rtulo) e voc no deve us-las em nenhum outro local dos arquivos FLA para outros fins (como nomes de instncia). Voc j utilizou bastante a palavra-chave var, principalmente se leu o Captulo 4, Dados e tipos de dados, na pgina 75. O ActionScript reserva palavras da linguagem para fins especficos. Portanto, no possvel usar palavraschave como identificadores (como nomes de varivel, funo ou rtulo). Essas palavras-chave esto listadas em Sobre palavras reservadas na pgina 147.

Sobre palavras reservadas


As palavras reservadas so palavras que no podem ser utilizadas como identificadores no cdigo, pois elas esto reservadas para serem usadas pelo ActionScript. As palavras reservadas so palavras-chave, que, por sua vez, so instrues e palavras do ActionScript reservadas para uso futuro. Isso significa que voc no deve us-las para atribuir nomes a variveis, instncias, classes personalizadas etc., pois isso pode acarretar problemas tcnicos no seu trabalho. A tabela a seguir lista as palavras-chave do Flash que ocasionam erros nos scripts:
add catch delete eq function if in le not private static throw void and class do extends ge ifFrameLoaded instanceof lt on public switch try while break continue dynamic finally get implements interface ne onClipEvent return tellTarget typeof with case default else for gt import intrinsic new or set this var

Sobre constantes e palavras-chave

147

A tabela a seguir lista palavras-chave que so reservadas para uso futuro no ActionScript ou pela especificao preliminar ECMAScript (ECMA-262) Edition 4. Evite tambm usar estas palavras-chave no cdigo:
abstract byte debugger float enum long protected throws export synchronized double transient short char volatile goto

Todos os nomes de classe interna, classe de componente e interface so palavras reservadas e no devem ser usados como identificadores no cdigo:
Accessibility Binding CellRenderer ComboBox CustomActions DataHolder Date DeltaItem Error Iterator Loader Math Microphone NetConnection Object ProgressBar ScrollPane SOAPCall StyleManager TextFormat Tree UIEventDispatcher Accordion Boolean CheckBox ComponentMixins CustomFormatter DataProvider DateChooser DeltaPacket FocusManager Key LoadVars Media Mouse NetStream PendingCall RadioButton Selection Sound System TextInput TreeDataProvider UIObject Alert Button Collection ContextMenu CustomValidator DataSet DateField DepthManager Form Label LocalConnection Menu MovieClip Number PopUpManager RDBMSResolver SharedObject Stage TextArea TextSnapshot TypedValue Video Array Camera Color ContextMenuItem DataGrid DataType Delta EndPoint Function List Log MenuBar MovieClipLoader NumericStepper PrintJob Screen Slide String TextField TransferObject UIComponent WebService

148

Fundamentos da sintaxe e da linguagem

WebServiceConnector Window XUpdateResolver

XML

XMLConnector

Diversas palavras, embora no sejam palavras reservadas, no devem ser usadas como identificadores (como nomes de varivel ou instncia) no cdigo do ActionScript. Essas palavras so usadas pelas classes internas que compem a linguagem ActionScript. Portanto, no use nomes de propriedades, mtodos, classes, interfaces, nomes de classe de componente e valores como nomes no cdigo (como acontece quando voc atribui nomes a variveis, classes ou instncias). Para entender o que so esses nomes, consulte ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0) e pesquise o painel Help (Ajuda) para obter instrues adicionais e as sees de uso deste manual (Introduo ao ActionScript 2.0 no Flash).

Sobre instrues
Uma instruo uma diretriz fornecida ao arquivo FLA para fazer algo; por exemplo, executar uma ao especfica. Voc pode, por exemplo, utilizar uma instruo condicional para determinar se algo verdadeiro ou existe. Em seguida, o cdigo poder executar aes especificadas, como funes ou expresses, de acordo com o status da condio, se verdadeira ou no. Por exemplo, a instruo if condicional e avalia uma condio para determinar a prxima ao a ser executada no cdigo.
// if statement if (condition) { // statements; }

Um outro exemplo a instruo return, que retorna um resultado como valor da funo em que ela executada. Existem diversas maneiras de formatar ou escrever o ActionScript. A escrita do ActionScript pode ser diferenciada atravs do modo como voc forma a sintaxe; por exemplo, atravs da maneira como voc espaa as instrues ou do local em que insere as chaves ({}) no cdigo. Mesmo que haja diferentes formas de compor instrues sem interromper o cdigo, existem algumas diretrizes gerais que voc pode seguir para escrever um ActionScript vlido.
Coloque apenas uma instruo em uma linha para aumentar a legibilidade do ActionScript.

O exemplo a seguir mostra o uso recomendado e no recomendado das

instrues:

Sobre instrues

149

theNum++; // recommended theOtherNum++; // recommended aNum++; anOtherNum++; // not recommended Atribua variveis como instrues separadas.

Considere o seguinte exemplo do

ActionScript:
var myNum:Number = (a = b + c) + d;

Esse ActionScript incorpora uma atribuio no cdigo, o que dificulta a leitura. Se voc atribuir variveis como instrues separadas, isso melhorar a legibilidade, como mostra o exemplo a seguir:
var a:Number = b + c; var myNum:Number = a + d;

As sees a seguir mostram como compor instrues especficas no ActionScript. Para obter informaes sobre como escrever e formatar eventos, consulte Captulo 10, Manipulando eventos, na pgina 347. Para obter mais informaes sobre cada instruo, consulte os seguintes tpicos:

Sobre instrues compostas na pgina 150 Sobre condies na pgina 151 Repetindo aes atravs de loops na pgina 162

Sobre instrues compostas


Uma instruo composta contm diversas instrues delimitadas por chaves ({}). As instrues dentro de uma instruo composta podem ser qualquer tipo de instruo do ActionScript. Uma instruo composta tpica mostrada a seguir. As instrues dentro de chaves so recuadas na instruo composta, como mostra o ActionScript a seguir:
var a:Number = 10; var b:Number = 10; if (a == b) { // This code is indented. trace("a == b"); trace(a); trace(b); }

Essa instruo composta contm vrias instrues, mas atua como se fosse uma instruo nica no cdigo do ActionScript. A chave de abertura colocada no final da instruo composta. A chave de fechamento comea com uma linha e se alinha ao incio da instruo composta.

150

Fundamentos da sintaxe e da linguagem

Para obter mais informaes sobre como usar as chaves, consulte Chaves na pgina 133.

Sobre condies
Voc usa as condies para determinar se algo verdadeiro ou existe. Em seguida, se desejar, pode repetir uma ao (usando loops) ou executar aes especificadas, como funes ou expresses, com base no status da condio, se verdadeira ou no. Por exemplo, possvel determinar se uma determinada varivel definida ou tem um valor especfico e executar um bloco de cdigo com base no resultado. Alm disso, possvel alterar os grficos no documento do Flash com base na hora do relgio do sistema do usurio ou nas condies climticas do local em que o usurio est no momento. Para executar uma ao que dependa da existncia de uma condio ou para repetir uma ao (criar instrues de loop), use as instrues if, else, else if, for, while, do while, for..in ou switch. Para obter mais informaes sobre quais condies voc pode usar e sobre como escrev-las, consulte os seguintes tpicos:

Sobre condies de escrita na pgina 151 Usando a instruo if na pgina 152 Usando a instruo if..else na pgina 153 Usando a instruo if..else if na pgina 154 Usando uma instruo switch na pgina 156 Usando as instrues try..catch e try..catch..finally na pgina 158 Sobre o operador condicional e a sintaxe alternativa na pgina 160

Sobre condies de escrita


As instrues que verificam se uma condio verdadeira ou falsa comeam com o termo if. Se a condio retornar true, o ActionScript executar a prxima instruo. Se a condio retornar false, o ActionScript passar para a prxima instruo fora do bloco de cdigo.
DICA

Para otimizar o desempenho do cdigo, verifique as condies mais provveis primeiro.

Sobre instrues

151

As instrues a seguir testam trs condies. O termo else if especifica testes alternativos que podero ser executados se as condies anteriores forem falsas.
if ((passwordTxt.text.length == 0) || (emailTxt.text.length == 0)) { gotoAndStop("invalidLogin"); } else if (passwordTxt.text == userID){ gotoAndPlay("startProgram"); }

Nesse trecho de cdigo, se o tamanho dos campos de texto passwordTxt ou emailTxt for 0 (por exemplo, o usurio no digitou um valor), o documento do Flash ser redirecionado para o rtulo de quadro invalidLogin. Se os campos passwordTxt e emailTxt contiverem valores e o contedo do campo de texto passwordTxt corresponder varivel userID, o arquivo SWF ser redirecionado para o rtulo de quadro startProgram. Para procurar uma das diversas condies, use a instruo switch, em vez de vrias instrues else if. Para obter mais informaes sobre as instrues switch, consulte Usando uma instruo switch na pgina 156. Consulte as sees a seguir para obter informaes sobre como escrever diferentes tipos de condies nos aplicativos ActionScript.

Usando a instruo if
Use a instruo if quando quiser executar uma srie de instrues com base no status true de uma determinada condio.
// if statement if (condition) { // statements; }

Voc ter diversas oportunidades de usar as instrues if enquanto estiver trabalhando em um projeto do Flash. Por exemplo, se voc estiver criando um site do Flash que exija que os usurios faam login antes de acessar determinadas sees do site, use uma instruo if para confirmar que o usurio digitar algum texto nos campos de nome de usurio e senha. Caso seja necessrio validar nomes de usurio e senhas usando um banco de dados externo, provavelmente ser preciso verificar se a combinao nome de usurio/senha utilizada por um usurio corresponde a um registro no banco de dados. Tambm ser necessrio verificar se o usurio tem permisso para acessar a parte especificada do site. Se voc criar scripts de animaes no Flash, provavelmente usar a instruo if para testar se uma instncia no Stage (Palco) ainda est dentro dos limites do Stage. Por exemplo, se uma bola se mover para baixo no eixo y, provavelmente ser necessrio detectar quando a bola colidir com a borda final do Stage, para que seja possvel alterar a direo e a bola possa subir.

152

Fundamentos da sintaxe e da linguagem

Para usar uma instruo if:


1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione Flash Document (Documento do Flash). Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte ActionScript no painel Actions (Aes):
// create a string to hold AM and PM var amPm:String = "AM"; // no parameters pass to Date, so returns current date/time var current_date:Date = new Date(); // if current hour is greater than/equal to 12, sets amPm string to "PM". if (current_date.getHours() >= 12) { amPm = "PM"; } trace(amPm);

2.

3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript. Nesse cdigo, voc cria uma seqncia de caracteres que exibir AM ou PM com base na hora do dia. Se a hora atual for maior ou igual a 12, a seqncia de caracteres amPM ser definida para PM. Por fim, voc rastreia a seqncia de caracteres amPm e, se a hora for maior ou igual a 12, a sigla PM ser exibida. Do contrrio, a sigla AM ser exibida.

Usando a instruo if..else


A instruo condicional if..else permitir testar uma condio e, em seguida, executar um bloco de cdigo se a condio existir ou executar um bloco de cdigo alternativo se a condio no existir. Por exemplo, o cdigo a seguir testa se o valor x maior que 20, gera uma instruo trace() se o valor for maior que 20 ou gera uma instruo trace() diferente se valor no for maior que 20:
if (x > 20) { trace("x is > 20"); } else { trace("x is <= 20"); }

Para executar um bloco de cdigo alternativo, use a instruo if sem a instruo else.

Sobre instrues

153

A instruo if..else do Flash semelhante instruo if. Por exemplo, se voc usar a instruo if para confirmar se o nome de usurio e a senha fornecidos por um usurio corresponde a um valor armazenado em um banco de dados, provavelmente ser necessrio redirecionar o usurio com base na validade do nome de usurio e da senha. Se o login for vlido, redirecione o usurio para uma pgina de boas-vindas usando o bloco if. No entanto, se o login for vlido, redirecione o usurio para o formulrio de login e exiba uma mensagem de erro usando o bloco else.
Para usar a instruo if..else em um documento:
1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione Flash Document (Documento do Flash) para criar um novo arquivo FLA. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte ActionScript no painel Actions (Aes):
// create a string that holds AM/PM based on the time of day. var amPm:String; // no parameters pass to Date, so returns current date/time. var current_date:Date = new Date(); // if current hour is greater than/equal to 12, sets amPm string to "PM". if (current_date.getHours() >= 12) { amPm = "PM"; } else { amPm = "AM"; } trace(amPm);

2.

3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript. Nesse cdigo, voc cria uma seqncia de caracteres que retm a sigla AM ou PM de acordo com a hora do dia. Se a hora atual for maior ou igual a 12, a seqncia de caracteres amPM ser definida para PM. Por fim, voc rastreia a seqncia de caracteres amPm e, se a hora for maior ou igual a 12, a sigla PM ser exibida. Do contrrio, voc ver a sigla AM no painel Output (Sada).

Usando a instruo if..else if


possvel testar mais de uma condio usando a instruo condicional if..else if. A seguinte sintaxe utilizada em uma instruo if..else if:
// else-if statement if (condition) { // statements; } else if (condition) { // statements; } else {

154

Fundamentos da sintaxe e da linguagem

// statements; }

Um bloco if..else if utilizado nos projetos do Flash quando necessrio verificar uma srie de condies. Por exemplo, se voc quiser exibir uma imagem diferente na tela com base na hora do dia em que o usurio est acessando, crie uma srie de instrues if que determinaro se de manh cedo, de tarde, incio da noite ou final da noite. Em seguida, exiba um grfico apropriado. O cdigo a seguir no somente testa se o valor x maior que 20, mas tambm se o valor x negativo:
if (x > 20) { trace("x is > 20"); } else if (x < 0) { trace("x is negative"); }

Para usar uma instruo if..else if em um documento:


1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione Flash Document (Documento do Flash). Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte ActionScript no painel Actions (Aes):
var now_date:Date = new Date(); var currentHour:Number = now_date.getHours(); // if the current hour is less than 11AM... if (currentHour < 11) { trace("Good morning"); // else..if the current hour is less than 3PM... } else if (currentHour < 15) { trace("Good afternoon"); // else..if the current hour is less than 8PM... } else if (currentHour < 20) { trace("Good evening"); // else the current hour is between 8PM and 11:59PM } else { trace("Good night"); }

2.

3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript. Nesse cdigo, voc cria uma seqncia de caracteres chamada currentHour que retm o nmero da hora atual (por exemplo, se a hora for 18:19, currentHour reter o nmero 18). Use o mtodo getHours() da classe Date para obter a hora atual. Em seguida, use a instruo if..else if para rastrear informaes no painel Output (Sada), com base no nmero retornado. Para obter mais informaes, consulte os comentrios no trecho de cdigo anterior.

Sobre instrues

155

Usando uma instruo switch


A instruo switch cria uma estrutura ramificada para as instrues do ActionScript. Assim como a instruo if, a instruo switch testar uma condio e executar instrues se a condio retornar um valor true. Quando a instruo switch utilizada, a instruo break solicita ao Flash que ignore o restante das instrues do bloco case e passe para a primeira instruo aps a instruo switch delimitada. Se um bloco case no contiver uma instruo break, uma condio chamada fall through ser emitida. Nesse caso, a instruo case a seguir tambm ser executada at que uma instruo break seja encontrada ou que a instruo switch seja encerrada. Esse comportamento demonstrado no exemplo a seguir, onde a primeira instruo case no contm uma instruo break e, portanto, os dois blocos de cdigos dos dois primeiros casos (A e B) so executados. Todas as instrues switch devem incluir um caso default. O caso default deve sempre ser o ltimo em uma instruo switch e incluir uma instruo break para impedir que um erro de anulao ocorra se outro caso for adicionado. Por exemplo, se a condio do exemplo a seguir retornar A, as duas instrues dos casos A e B sero executadas, pois o caso A no possui uma instruo break. Quando um caso anulado, ele no possui uma instruo break, mas inclui um comentrio no local da instruo break (consulte o exemplo a seguir aps o caso A). Use o seguinte formato ao escrever instrues switch:
switch (condition) { case A : // statements // falls through case B : // statements break; case Z : // statements break; default : // statements break; }

Para usar uma instruo switch em um documento:


1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione Flash Document (Documento do Flash).

156

Fundamentos da sintaxe e da linguagem

2.

Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte ActionScript no painel Actions (Aes):
var listenerObj:Object = new Object(); listenerObj.onKeyDown = function() { // Use the String.fromCharCode() method to return a string. switch (String.fromCharCode(Key.getAscii())) { case "A" : trace("you pressed A"); break; case "a" : trace("you pressed a"); break; case "E" : case "e" : /* E doesn't have a break statement, so this block executes if you press e or E. */ trace("you pressed E or e"); break; case "I" : case "i" : trace("you pressed I or i"); break; default : /* If the key pressed isnt caught by any of the above cases, execute the default case here. */ trace("you pressed some other key"); } }; Key.addListener(listenerObj);

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 trs teclas, voc ver as instrues trace no ActionScript anterior. A linha de cdigo cria um novo objeto que ser utilizado como ouvinte da classe Key. Use esse objeto para informar ao evento onKeyDown() que o usurio pressionou uma tecla. O mtodo Key.getAscii() retorna o cdigo ASCII da ltima tecla que o usurio pressionou ou liberou; portanto, necessrio usar o mtodo String.fromCharCode() para retornar uma seqncia de caracteres que contm os caracteres representados pelos valores ASCII dos parmetros. Como E no possui uma instruo break, o bloco ser executado se o usurio pressionar a tecla e ou E. Se o usurio pressionar uma tecla que no seja abordada por nenhum dos trs primeiros casos, o caso padro ser executado.

Sobre instrues

157

Usando as instrues try..catch e try..catch..finally


Os blocos try..catch..finally permitem adicionar uma manipulao de erros aos aplicativos do Flash. As palavras-chave try..catch..finally permitem delimitar o bloco de cdigos onde um erro pode ocorrer e responder a esse erro. Se algum cdigo do bloco de cdigos try gerar um erro (atravs da instruo throw), o controle passar para o bloco catch, se houver algum. Depois, o controle passar para o bloco de cdigos finally, se houver algum. O bloco finally opcional sempre executado, independentemente da gerao de um erro. Se o cdigo do bloco try no gerar um erro (ou seja, se o bloco try for concludo normalmente), ainda assim, o cdigo do bloco finally ser executado.
NO TA

O bloco finally ser executado mesmo que o bloco try seja encerrado por uma instruo return.

Escreva as instrues try..catch e try..catch..finally no seguinte formato:


// try-catch try { // statements } catch (myError) { // statements } // try-catch-finally try { // statements } catch (myError) { // statements } finally { // statements }

Sempre que o cdigo gerar um erro, voc poder escrever manipuladores personalizados para lidar com esse erros e executar as aes apropriadas. Talvez seja necessrio carregar dados externos de um servio da Web ou de um arquivo de texto ou exibir uma mensagem de erro para o usurio final. Voc pode, at mesmo, usar o bloco catch para tentar se conectar a um servio da Web que informe um administrador sobre um determinado erro, a fim de que ele possa verificar o funcionamento do aplicativo.
Para usar o bloco try..catch..finally para validao de dados antes de dividir alguns nmeros:
1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione Flash Document (Documento do Flash).

158

Fundamentos da sintaxe e da linguagem

2.

Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte ActionScript no painel Actions (Aes):
var n1:Number = 7; var n2:Number = 0; try { if (n2 == 0) { throw new Error("Unable to divide by zero"); } trace(n1/n2); } catch (err:Error) { trace("ERROR! " + err.toString()); } finally { delete n1; delete n2; }

3. 4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. O painel Output (Sada) exibir a mensagem Unable to divide by zero (No possvel dividir por zero). Retorne ao ambiente de criao e altere a seguinte linha de cdigo:
var n2:Number = 0;

5.

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 exibio de uma mensagem no painel Output. Se o valor y no for igual a zero, o painel Output exibir o resultado de n1 dividido por n2. O bloco finally ser executado, independentemente da gerao de um erro, e excluir os valores das variveis n1 e n2 do documento do Flash.

Voc no est limitado a gerar novas instncias da classe Error quando ocorrer um erro. Voc poder tambm estender a classe Error para criar erros personalizados, conforme demonstrado no exemplo a seguir.
Para criar um erro personalizado:
1. 2.

Selecione File > New e crie um novo arquivo do ActionScript. Selecione File > Save As (Salvar como) e atribua o nome DivideByZeroException.as ao arquivo. Digite o seguinte ActionScript no painel Script:
// In DivideByZeroException.as: class DivideByZeroException extends Error {

3.

Sobre instrues

159

var message:String = "Divide By Zero error"; } 4. 5.

Salve o arquivo do ActionScript. Crie um novo documento do Flash chamado exception_test.fla no mesmo diretrio do arquivo do ActionScript e salve o arquivo. Digite o seguinte ActionScript no painel Actions do Frame 1 da Timeline principal:
var n1:Number = 7; var n2:Number = 0; try { if (n2 == 0) { throw new DivideByZeroException(); } else if (n2 < 0) { throw new Error("n2 cannot be less than zero"); } else { trace(n1/n2); } } catch (err:DivideByZeroException) { trace(err.toString()); } catch (err:Error) { trace("An unknown error occurred; " + err.toString()); }

6.

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 no pode ser menor que zero) no painel Output. A definio do valor de n2 para qualquer nmero maior que 0 far com que o resultado da diviso aparea no painel Output. Para obter mais informaes sobre como criar classes personalizadas, consulte o Captulo 7, Classes, na pgina 239.

Sobre o operador condicional e a sintaxe alternativa


Se quiser usar atalhos, poder utilizar o operador condicional (?:), conhecido tambm como expresses condicionais. O operador condicional permite converter instrues if..else simples em uma nica linha de cdigo. O operador ajuda a diminuir o valor do cdigo escrito enquanto realiza a mesma tarefa, mas ele tambm tende a dificultar mais a leitura do ActionScript. A condio a seguir escrita na forma extensa, verifica se a varivel numTwo maior que zero e retorna o resultado numOne/numTwo ou a seqncia de caracteres carrot:

160

Fundamentos da sintaxe e da linguagem

var numOne:Number = 8; var numTwo:Number = 5; if (numTwo > 0) { trace(numOne / numTwo); // 1.6 } else { trace("carrot"); }

Usando uma expresso condicional, voc escrever o mesmo cdigo 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, no preferencial. Caso precise usar operadores condicionais, coloque a condio inicial (antes do ponto de interrogao [?]) entre parnteses. Isso ajudar a melhorar a legibilidade do ActionScript. O cdigo a seguir um exemplo de ActionScript com melhor legibilidade:
var numOne:Number; (numOne >= 5) ? numOne : -numOne;

possvel escrever uma instruo condicional que retorne um valor booleano, como mostra o exemplo a seguir:
if (cartArr.length > 0) { return true; } else { return false; }

No entanto, se comparado ao cdigo anterior, o ActionScript do exemplo a seguir ser preferencial:


return (cartArr.length > 0);

O segundo trecho mais curto e tem menos expresses para avaliao, alm de ser mais fcil de ler e entender. Ao escrever condies complexas, recomenda-se usar parnteses [()] para agrupar as condies. Caso no use parnteses, voc (ou outras pessoas que estejam usando o ActionScript) poder encontrar erros de precedncia de operador. Para obter mais informaes sobre precedncia de operador, consulte Sobre associatividade e precedncia de operadores na pgina 188. Por exemplo, o cdigo a seguir no usa parnteses ao redor da condio:
if (fruit == "apple" && veggie == "leek") {}

O cdigo a seguir usa um formato adequado, delimitando as instrues entre parnteses:


if ((fruit == "apple") && (veggie == "leek")) {}

Sobre instrues

161

Repetindo aes atravs de loops


O ActionScript pode repetir uma ao um nmero especificado de vezes ou enquanto uma condio especfica existir. Os loops permitem repetir uma srie de instrues quando uma condio especfica true. Existem quatro tipos de loops no ActionScript: for, for..in, while e do..while. Cada tipo de loop se comporta de um jeito e tem uma funo diferente. A maioria dos loops usa algum tipo de contador para controlar o nmero de execues. Cada execuo de um loop denominada iterao. Voc pode declarar uma varivel e escrever uma instruo que aumente ou diminua a varivel sempre que o loop for executado. Na ao for, o contador e a instruo que aumenta a contagem fazem parte da ao.
Loop
for for..in while do..while

Descrio
Repete uma ao usando um contador interno. Itera os filhos de um clipe de filme ou objeto. Repete uma ao enquanto uma condio existir. semelhante aos loops; a nica diferena que a expresso avaliada na parte inferior do bloco de cdigos, para que o loop sempre seja executado pelo menos uma vez.

O tipo de loop mais comum o for, que repetido em um bloco de cdigos um nmero predefinido de vezes. Por exemplo, se voc tiver um array de itens e quiser executar uma srie de instrues em cada item do array, use um loop for e execute-o de 0 at o nmero de itens do array. Um outro tipo de loop o for..in, que pode ser muito til quando necessrio repetir cada combinao nome/valor de um objeto e executar algum tipo de ao. Isso poder ser til quando voc estiver depurando projetos do Flash e quiser exibir os valores carregados de fontes externas, como servios da Web ou arquivos de texto/XML externos. Os dois ltimos tipos de loops (while e do..while) so teis quando necessrio executar uma repetio em uma srie de instrues mas voc no sabe necessariamente quantas vezes precisa fazer isso. Nesse caso, possvel usar um loop while que execute a repetio desde que uma determinada condio seja verdadeira. O ActionScript pode repetir uma ao um nmero especificado de vezes ou enquanto uma condio especfica existir. Use as aes while, do..while, for e for..in para criar loops. Esta seo contm informaes gerais sobre esses loops. Consulte os procedimentos a seguir para obter mais informaes sobre cada um desses loops.
Para repetir uma ao enquanto uma condio existir:

Use a instruo while.

162

Fundamentos da sintaxe e da linguagem

Um loop while avaliar uma expresso e executar o cdigo em seu corpo se a expresso for true. Depois que cada instruo do corpo for executada, a expresso ser avaliada novamente. No exemplo a seguir, o loop executado quatro vezes:
var i:Number = 4; while (i > 0) { myClip.duplicateMovieClip("newMC" + i, i, {_x:i*20, _y:i*20}); i--; }

Voc pode usar a instruo do...while para criar o mesmo tipo de loop que while. Em um loop do..while, a expresso avaliada na parte inferior do bloco de cdigos, 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 informaes sobre a instruo while, consulte Usando os loops while na pgina 169.
Para repetir uma ao usando um contador interno:

Use a instruo for. A maioria dos loops usa algum tipo de contador para controlar o nmero de execues. Cada execuo de um loop denominada iterao. Voc pode declarar uma varivel e escrever uma instruo que aumente ou diminua a varivel sempre que o loop for executado. Na ao for, o contador e a instruo que aumenta a contagem fazem parte da ao. No exemplo a seguir, a primeira expresso (var i:Number = 4) a expresso inicial que avaliada antes da primeira iterao. A segunda expresso ( i > 0) a condio que verificada sempre antes da execuo do loop. A terceira expresso (i--) denominada expresso final e avaliada sempre aps a execuo do loop.
for (var i:Number = 4; i > 0; i--) { myClip.duplicateMovieClip("newMC" + i, i, {_x:i*20, _y:i*20}); } Para obter mais informaes sobre a instruo for, consulte Usando os loops for

na pgina 166.

Sobre instrues

163

Para executar uma repetio nos filhos de um clipe de filme ou objeto:

Use a instruo for..in. Os filhos so outros clipes de filme, funes, objetos e variveis. O exemplo a seguir usa a instruo trace para imprimir seus resultados no painel Output (Sada):
var myObject:Object = {name:'Joe', age:25, city:'San Francisco'}; var propertyName:String; for (propertyName in myObject) { trace("myObject has the property: " + propertyName + ", with the value: " + myObject[propertyName]); }

Este exemplo produz os seguintes resultados no painel Output:


myObject has the property: name, with the value: Joe myObject has the property: age, with the value: 25 myObject has the property: city, with the value: San Francisco

Talvez seja necessrio 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 instncia 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 informaes sobre a instruo for..in, consulte Usando os loops for..in na pgina 167.
A VI S O 164

As iteraes do Flash so executadas rapidamente no Flash Player, mas os loops dependem muito do processador. Quanto mais iteraes um loop tem e quanto mais instrues so executadas em cada bloco, mais recursos do processador so consumidos. Loops escritos de modo insatisfatrio podem ocasionar problemas de desempenho e de estabilidade.

Para obter mais informaes sobre cada instruo, consulte as sees individuais que acompanham este captulo, como Usando os loops while na pgina 169 e suas respectivas entradas em ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0).

Fundamentos da sintaxe e da linguagem

Sobre criao e trmino de loops


O exemplo a seguir mostra um array simples de nomes de meses. Um loop for iterado de 0 at o nmero de itens do array e exibe cada item no painel Output.
var monthArr:Array = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); var i:Number; for (i = 0; i < monthArr.length; i++) { trace(monthArr[i]); }

Quando se trabalha com arrays, quer eles sejam simples ou complexos, necessrio conhecer uma condio chamada loop infinito. O loop infinito, como o prprio nome j diz, um loop sem condio de trmino. 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 cdigo 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); }

O valor de i inicializado para 0 e a condio de trmino atendida quando i maior ou igual a 10 e depois que cada iterao do valor de i decrementada. provvel que o erro fique imediatamente bvio: se o valor de i diminuir aps cada iterao do loop e a condio de trmino nunca for atendida. Os resultados variam de acordo com o computador em que a condio executada. Alm disso, a velocidade em que o cdigo apresenta falha depende da velocidade da CPU e de outros fatores. Por exemplo, o loop executado aproximadamente 142.620 vezes antes de exibir uma mensagem de erro em um determinado computador. A mensagem de erro a seguir exibida em uma caixa de dilogo:
A script in this movie is causing Flash Player to run slowly. If it continues to run, your computer may become unresponsive. Do you want to abort the script?

Quando se trabalha com um loop (especialmente com os loops while e do..while), sempre verifique se possvel encerr-lo adequadamente (ou seja, se ele no encerrado com um loop infinito). Para obter mais informaes sobre como controlar loops, consulte Usando uma instruo switch na pgina 156.

Sobre instrues

165

Usando os loops for


O loop for permite iterar uma varivel de um intervalo especfico de valores. O loop for til quando voc sabe exatamente quantas vezes precisa repetir uma srie de instrues do ActionScript. Isso ser til se for necessrio duplicar um clipe de filme no Stage (Palco) um determinado nmero de vezes ou repetir um array e executar uma tarefa em cada item desse array. O loop for repete uma ao usando um contador interno. Em uma instruo for, o contador e a instruo que incrementa o contador fazem parte da instruo for. Escreva a instruo for usando o seguinte formato bsico:
for (init; condition; update) { // statements; }

Voc deve fornecer trs expresses a uma instruo for: uma varivel que definida com um valor inicial, uma instruo condicional que determina quando o loop terminar e uma expresso que altera o valor da varivel com cada loop. Por exemplo, o cdigo a seguir se repete cinco vezes. O valor da varivel i comea em 0 e termina em 4. A sada da varivel so os nmeros de 0 a 4, cada um na sua prpria linha.
var i:Number; for (i = 0; i < 5; i++) { trace(i); }

No exemplo a seguir, a primeira expresso (i = 0) a expresso inicial que avaliada antes da primeira iterao. A segunda expresso (i < 5) a condio que verificada sempre antes da execuo do loop. A terceira expresso (i++) denominada expresso final e avaliada sempre aps a execuo do loop.
Para criar um loop for:
1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione Flash Document (Documento do Flash). Crie um clipe de filme no Stage. Clique com o boto direito do mouse no smbolo de clipe de filme do painel Library (Biblioteca) e selecione Linkage (Vinculao) no menu contextual. Marque a caixa de seleo Export for ActionScript (Exportar para ActionScript) e digite libraryLinkageClassName na caixa de entrada de texto Class (Classe). Clique em OK. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte ActionScript no painel Actions (Aes):
var i:Number; for (i = 0; i < 5; i++) {

2. 3.

4.

5.

166

Fundamentos da sintaxe e da linguagem

this.attachMovie("libraryLinkageClassName", "clip" + i + "_mc", i, {_x:(i * 100)}); } 6.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo no Flash Player. Observe como cinco clipes de filme se duplicaram na parte superior do Stage. Esse ActionScript duplica o smbolo 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 varivel i definida com um valor de 0 a 4. Na ltima iterao do loop, o valor de i incrementado para 4 e a segunda expresso (i < 5) no mais verdadeira, o que far com o loop seja encerrado.

Lembre-se de incluir um espao aps cada expresso em uma instruo for. Para obter mais informaes, consulte %{for statement}% em ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0).

Usando os loops for..in


Use a instruo for..in para repetir (ou iterar) os filhos de um clipe de filme, as propriedades de um objeto ou os elementos de um array. Os filhos, j mencionados anteriormente, so outros clipes de filme, funes, objetos e variveis. As funes comuns do loop for..in incluem a repetio de instncias em uma linha de tempo ou a repetio das combinaes chave/valor em um objeto. A repetio de objetos pode ser uma maneira eficaz de depurar aplicativos, pois ela permite ver quais dados so retornados pelos servios da Web ou documentos externos, como arquivos de texto ou XML. Por exemplo, possvel usar um loop for...in para iterar as propriedades de um objeto genrico (as propriedades de objeto no so mantidas em nenhuma ordem especfica; elas so exibidas em uma ordem aleatria):
var myObj:Object = {x:20, y:30}; for (var i:String in myObj) { trace(i + ": " + myObj[i]); }

Esse cdigo exibe o seguinte no painel Output (Sada):


x: 20 y: 30

possvel tambm iterar os elementos de um array:


var myArray:Array = ["one", "two", "three"]; for (var i:String in myArray) { trace(myArray[i]); }

Sobre instrues

167

Esse cdigo exibe o seguinte no painel Output:


three two one

Para obter mais informaes sobre os objetos e as propriedades, consulte Tipo de dados Object na pgina 83.
NO T A

No ser possvel iterar as propriedades de um objeto se ele for um instncia de uma classe personalizada, a menos que a classe seja dinmica. Mesmo com instncias de classes dinmicas, voc pode iterar somente as propriedades adicionadas dinamicamente. As chaves ({}) usadas para delimitar o bloco de instrues a ser executado pela instruo for..in no sero necessrias se apenas uma instruo for executada.

O exemplo a seguir usa for..in para iterar as propriedades de um objeto:


Para criar um loop:
1.

2.

3.

Se voc escrever um loop for..in em um arquivo de classe (um arquivo externo do ActionScript), os membros de instncia no estaro disponveis no loop, mas os membros estticos estaro. No entanto, se voc escrever um loop for..in em um arquivo FLA de uma instncia de classe, os membros de instncia estaro disponveis, mas os membros estticos no. Para obter mais informaes sobre como escrever arquivos de classe, consulte Captulo 7, Classes, na pgina 239. Para obter mais informaes, consulte %{for..in statement}% em ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0)

168

NO TA

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione Flash Document (Documento do Flash). Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte ActionScript no painel Actions (Aes):
var myObj:Object = {name:"Tara", age:27, city:"San Francisco"}; var i:String; for (i in myObj) { trace("myObj." + i + " = " + myObj[i]); }

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo 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

Fundamentos da sintaxe e da linguagem

Usando os loops while


Use a instruo while para repetir uma ao enquanto existir uma condio; ela semelhante instruo if, que se repete contanto que a condio seja true. Um loop while avaliar uma expresso e executar o cdigo em seu corpo se a expresso for true. Se a condio retornar true, uma instruo ou uma srie de instrues ser executada antes que o loop reverso avalie a condio novamente. Quando a condio retornar false, a instruo ou a srie de instrues ser ignorada e o loop terminar. O uso do loop while pode ser til quando voc no tem certeza de quantas vezes precisar repetir um bloco de cdigos. Por exemplo, o cdigo a seguir rastreia os nmeros no painel Output (Sada):
var i:Number = 0; while (i < 5) { trace(i); i++; }

Voc ver os seguintes nmeros rastreados no painel Output:


0 1 2 3 4

Uma desvantagem do uso de um loop while, em vez de um loop for, que os loops infinitos so mais fceis de serem gerados com os loops while. O cdigo de exemplo do loop for no ser compilado se voc omitir a expresso que incrementa a varivel do contador, mas o exemplo do loop while compilado mesmo que essa etapa seja omitida. Sem a expresso que incrementa i, o loop se torna um loop infinito. Para criar e usar um loop while em um arquivo FLA, siga este exemplo.
Para criar um loop while:
1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione Flash Document (Documento do Flash). Abra o painel Components (Componentes) e arraste um componente DataSet para o Stage (Palco). Abra o Property inspector (Inspetor de propriedades) (Window (Janela) > Properties (Propriedades) > Properties) e digite o nome de instncia users_ds. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte ActionScript no painel Actions (Aes):
var users_ds:mx.data.components.DataSet; // users_ds.addItem({name:"Irving", age:34});

2.

3.

4.

Sobre instrues

169

users_ds.addItem({name:"Christopher", age:48}); users_ds.addItem({name:"Walter", age:23}); // users_ds.first(); while (users_ds.hasNext()) { trace("name:" + users_ds.currentItem["name"] + ", age:" + users_ds.currentItem["age"]); users_ds.next(); } 5.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. As seguintes informaes so exibidas no painel Output:
name:Irving, age:34 name:Christopher, age:48 name:Walter, age:23

Para obter mais informaes, consulte %{while statement}% em ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0).

Sobre loops do..while


Voc pode usar a instruo do...while para criar o mesmo tipo de loop que while. No entanto, a expresso avaliada na parte inferior do bloco de cdigos em um loop do..while (ele verificado depois que o bloco de cdigos executado), para que o loop sempre seja executado pelo menos uma vez. As instrues so executadas apenas se a condio retornar true. O cdigo a seguir mostra um exemplo simples de loop do..while que gera a sada mesmo que a condio no seja atendida.
var i:Number = 5; do { trace(i); i++; } while (i < 5); // Output: 5

Ao usar loops, necessrio evitar a criao de loops infinitos. Se a condio em um loop do..while retornar continuamente true, um loop infinito ser gerado e exibir um aviso ou travar o Flash Player. Use o loop for em vez disso, caso voc sabia quantas vezes deseja executar a repetio. Para obter mais informaes sobre isso e exemplos de %{do..while statement}%, consulte ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0).

170

Fundamentos da sintaxe e da linguagem

Usando loops aninhados no ActionScript


O exemplo a seguir demonstra como criar um array de objetos e exibir cada um dos valores na estrutura aninhada. Este exemplo mostra como usar o loop for para repetir cada item do array e como usar o loop for..in para iterar cada combinao chave/valor nos objetos aninhados.
Aninhando um loop dentro de outro loop:
1. 2. 3.

Crie um novo documento do Flash. Selecione File (Arquivo) > Save As (Salvar como) e atribua o nome loops.fla ao documento. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var myArr:Array = new Array(); myArr[0] = {name:"One", value:1}; myArr[1] = {name:"Two", value:2}; // var i:Number; var item:String; for (i = 0; i < myArr.length; i++) { trace(i); for (item in myArr[i]) { trace(item + ": " + myArr[i][item]); } trace(""); }

4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. O seguinte ser exibido no painel Output (Sada):
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 combinaes nome/valor, possvel usar um loop for..in para iterar cada valor e exibir os resultados no painel Output.

Sobre instrues

171

Sobre arrays
Um array um objeto cujas propriedades so identificadas por nmeros que representam suas posies dentro da estrutura. Basicamente, um array uma lista de itens. importante lembrar que cada elemento de um array no precisa ter o mesmo tipo de dados. possvel misturar nmeros, datas, seqncias de caracteres e objetos, e at mesmo adicionar um array aninhado em cada ndice de arrays. O exemplo a seguir um array simples de nomes de meses.
var myArr:Array = new Array(); myArr[0] = "January"; myArr[1] = "February"; myArr[2] = "March"; myArr[3] = "April";

O array anterior de nomes de meses tambm pode ser reescrito da seguinte maneira:
var myArr:Array = new Array("January", "February", "March", "April");

Uma outra alternativa usar a sintaxe abreviada conforme mostrado a seguir:


var myArr:Array = ["January", "February", "March", "April"];

Um array como uma estrutura de dados. como um edifcio comercial, onde cada andar contm um tipo de dados diferente (como contabilidade no terceiro andar e engenharia no quinto). Assim, possvel armazenar diferentes tipos de dados em um nico array, incluindo outros arrays. Cada andar desse prdio pode conter vrios tipos de contedo (o executivo e a contabilidade poderiam compartilhar o terceiro andar). Um array contm elementos, que so equivalentes a cada andar do prdio. Cada elemento tem uma posio numrica (o ndice), que como voc indica a posio de cada elemento no array. semelhante ao nmero dos andares de um prdio. Cada elemento pode conter uma parte dos dados (que pode ser um nmero, uma seqncia de caracteres, um valor booleano ou, at mesmo, um array ou objeto) ou ficar vazio. possvel tambm controlar e modificar o prprio array. Por exemplo, talvez seja necessrio mover o departamento de engenharia para o trreo do prdio. Os arrays permitem que voc mova os valores e altere o tamanho do array (digamos que ele permite renovar o prdio e adicionar ou remover andares). Assim, possvel adicionar ou remover elementos e mover valores para vrios elementos. Portanto, o prdio (o array) contm andares (os elementos), que so numerados (o ndice), e cada andar contm um ou mais departamentos (os valores).

172

Fundamentos da sintaxe e da linguagem

Para obter mais informaes sobre como modificar arrays, consulte Sobre modificao de arrays na pgina 175. Para obter informaes sobre como usar arrays e sobre os ndices, consulte Usando arrays na pgina 173. Para obter informaes sobre como adicionar e remover elementos, consulte Sobre adio e remoo de elementos na pgina 177. Para obter informaes sobre o operador de acesso de array, consulte Usando operadores de ponto e de acesso de array na pgina 194. Na pasta Samples do disco rgido, h um arquivo de exemplo de origem chamado array.fla. Esse exemplo ilustra a manipulao de arrays usando o ActionScript. O cdigo do exemplo cria um array e classifica, adiciona e remove itens de dois componentes List. Localize o arquivo de exemplo nos diretrios a seguir:

No Windows, v para a unidade de inicializao\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.

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, provvel que receba at mesmo dados como um array de objetos aninhados. Geralmente, os arrays contm dados em um formato similar. Por exemplo, se voc criar um aplicativo de udio no Flash, provavelmente ter a lista de reproduo de um usurio armazenada como um array de informaes de msica, armazenada nos objetos. Cada objeto contm o nome da msica, o nome do artista, a durao da msica, o local de um arquivo de som (como um MP3) ou quaisquer outras informaes que precisem ser associadas a um determinado arquivo. O local de um item em um array chama-se ndice. Todos os arrays comeam 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 sees a seguir. Os arrays mais comuns usam um ndice numrico 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 numrico, para pesquisar informaes. Para obter mais informaes sobre os arrays comuns, consulte Sobre arrays na pgina 172. Para obter mais informaes sobre os arrays associativos, consulte Criando arrays associativos na pgina 181. Para obter mais informaes sobre as matrizes, consulte Criando matrizes na pgina 178. Para obter informaes sobre o operador de acesso de array, consulte Usando operadores de ponto e de acesso de array na pgina 194.

Sobre arrays

173

A classe Array interna permite acessar e manipular arrays. Para criar um objeto Array, use o construtor new Array() ou o operador de acesso de array ([]). Para acessar os elementos de um array, use tambm o operador de acesso de array ([]). O exemplo a seguir usa um array indexado.
Para usar arrays no cdigo:
1. 2.

Crie um novo documento do Flash e salve-o como basicArrays.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
// define a new array var myArr:Array = new Array(); // define values at two indexes myArr[1] = "value1"; myArr[0] = "value0"; // iterate over the items in the array var i:String; for (i in myArr) { // trace the key/value pairs trace("key: " + i + ", value: " + myArr[i]); }

Na primeira linha do ActionScript, defina um novo array para reter os valores. Em seguida, defina dados (value0 e value1) nos dois ndices do array. Use um loop for..in para iterar cada um dos itens desse array e exibir as combinaes chave/valor no painel Output (Sada) usando uma instruo trace.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. O seguinte texto ser exibido no painel Output:
key: 0, value: value0 key: 1, value: value1

Para obter mais informaes sobre os loops for..in, consulte Usando os loops for..in na pgina 167. Para obter informaes sobre como criar diferentes tipos de arrays, consulte as seguintes sees:

Criando arrays indexados na pgina 178 Criando matrizes na pgina 178 Criando arrays associativos na pgina 181

Na pasta Samples do disco rgido, h um arquivo de exemplo de origem chamado array.fla. Esse exemplo ilustra a manipulao de arrays usando o ActionScript. O cdigo do exemplo cria um array e classifica, adiciona e remove itens de dois componentes List. Localize o arquivo de exemplo nos diretrios a seguir:

174

Fundamentos da sintaxe e da linguagem

No Windows, v para a unidade de inicializao\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.

Sobre modificao de arrays


possvel tambm controlar e modificar o array usando o ActionScript. Voc pode mover valores em torno de um array ou alterar o tamanho do array. Por exemplo, se voc quiser trocar dados nos dois ndices de um array, use o cdigo a seguir:
var buildingArr:Array = new Array(); buildingArr[2] = "Accounting"; buildingArr[4] = "Engineering"; trace(buildingArr); // undefined,undefined,Accounting,undefined,Engineering var temp_item:String = buildingArr[2]; buildingArr[2] = buildingArr[4]; buildingArr[4] = temp_item; trace(buildingArr); // undefined,undefined,Engineering,undefined,Accounting

Talvez seja necessrio saber porque preciso criar uma varivel temporria no exemplo anterior. Se voc copiou o contedo do ndice de array 4 no ndice de array 2 e vice-versa, o contedo original do ndice de array 2 se perder. Ao copiar o valor de um dos ndices de array em uma varivel temporria, possvel salvar o valor e copi-lo com segurana de volta para o cdigo posteriormente. Por exemplo, se voc usar o cdigo 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

Na pasta Samples do disco rgido, h um arquivo de exemplo de origem chamado array.fla. Esse exemplo ilustra a manipulao de arrays usando o ActionScript. O cdigo do exemplo cria um array e classifica, adiciona e remove itens de dois componentes List. Localize o arquivo de exemplo nos diretrios a seguir:

No Windows, v para a unidade de inicializao\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.

Sobre arrays

175

Sobre referncia e localizao de tamanho


Quando voc trabalha com arrays, geralmente precisa saber quantos itens existem no array. Isso pode ser muito til durante a criao de loops for que iteram cada elemento do array e executam uma srie de instrues. Veja um exemplo no trecho a seguir:
var monthArr:Array = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); trace(monthArr); // Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec trace(monthArr.length); // 12 var i:Number; for (i = 0; i < monthArr.length; i++) { monthArr[i] = monthArr[i].toUpperCase(); } trace(monthArr); // JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC

No exemplo anterior, voc cria um array e o preenche com nomes de meses. O contedo e o tamanho do array exibido. O loop for itera cada item do array e converte o valor em maisculas. Depois, o contedo 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 comea sempre com zero), em vez do nmero 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 informaes sobre os loops for, consulte Usando os loops for na pgina 166. Para obter informaes sobre o operador de acesso de array, consulte Usando operadores de ponto e de acesso de array na pgina 194. Na pasta Samples do disco rgido, h um arquivo de exemplo de origem chamado array.fla. Esse exemplo ilustra a manipulao de arrays usando o ActionScript. O cdigo do exemplo cria um array e classifica, adiciona e remove itens de dois componentes List. Localize o arquivo de exemplo nos diretrios a seguir:

No Windows, v para a unidade de inicializao\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.

176

Fundamentos da sintaxe e da linguagem

Sobre adio e remoo de elementos


Um array contm elementos e cada elemento tem uma posio numrica (o ndice), que a maneira utilizada para indicar a posio de cada elemento no array. Cada elemento pode reter uma parte dos dados ou ficar vazio. Um elemento pode reter os seguintes dados: um nmero, uma seqncia de caracteres ou, at mesmo, um array ou objeto. Ao criar elementos em um array, crie os ndices seqencialmente sempre que possvel. Isso ser til na depurao dos aplicativos. Em Sobre referncia e localizao de tamanho na pgina 176, voc viu que, se atribuir um nico valor em um array no ndice 5, o tamanho do array ser retornado como 6. Isso far com que cinco valores indefinidos sejam inseridos no array. O exemplo a seguir demonstra como criar um novo array, excluir um item em um determinado ndice, e adicionar e substituir dados em um ndice do array:
var monthArr:Array = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); delete monthArr[5]; trace(monthArr); // Jan,Feb,Mar,Apr,May,undefined,Jul,Aug,Sep,Oct,Nov,Dec trace(monthArr.length); // 12 monthArr[5] = "JUN"; trace(monthArr); // Jan,Feb,Mar,Apr,May,JUN,Jul,Aug,Sep,Oct,Nov,Dec

Mesmo que voc tenha excludo 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 seqncia de caracteres em branco, em vez de desaparecer completamente. Na pasta Samples do disco rgido, h um arquivo de exemplo de origem chamado array.fla. Esse exemplo ilustra a manipulao de arrays usando o ActionScript. O cdigo do exemplo cria um array e classifica, adiciona e remove itens de dois componentes List. Localize o arquivo de exemplo nos diretrios a seguir:

No Windows, v para a unidade de inicializao\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.

Sobre arrays

177

Criando arrays indexados


Os arrays indexados armazenam uma srie de um ou mais valores. possvel pesquisar os itens por sua posio no array, que o que voc poderia ter feito nas sees anteriores. O primeiro ndice sempre o nmero 0. Ele incrementado em um em cada elemento subseqente que voc adiciona ao array. possvel criar um array indexado chamando o construtor de classe Array ou inicializando o array com um literal de array. Crie arrays usando o construtor Array e um literal de array no prximo exemplo.
Para criar um array indexado:
1. 2.

Crie um novo documento do Flash e salve-o como indexArray.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var myArray:Array = new Array(); myArray.push("one"); myArray.push("two"); myArray.push("three"); trace(myArray); // one,two,three

Na primeira linha do ActionScript, defina um novo array para reter os valores.


3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. O seguinte texto ser exibido no painel Output (Sada):
one,two,three

4. 5.

Retorne ferramenta de criao e exclua o cdigo do painel Actions (Aes). Adicione o seguinte ActionScript ao Frame 1 da Timeline:
var myArray:Array = ["one", "two", "three"]; trace(myArray); // one,two,three

Nesse cdigo, voc usar o literal de array para definir um novo array para o cdigo. Esse cdigo equivale ao ActionScript escrito na etapa 2. Durante o teste do cdigo, a mesma sada aparece no painel Output.

Criando matrizes
No ActionScript, possvel implementar arrays como arrays aninhados, que so basicamente arrays de arrays. Os arrays aninhados, tambm conhecidos como matrizes, podem ser considerados grades. Portanto, durante a programao, 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 tambm um array com oito elementos.

178

Fundamentos da sintaxe e da linguagem

Por exemplo, considere uma lista de tarefas armazenadas como um array indexado de seqncias de caracteres:
var tasks:Array = ["wash dishes", "take out trash"];

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 contm um array indexado que armazena a lista de tarefas.
A T E N O

Quando voc usa o operador de acesso de array, o compilador do ActionScript no pode verificar se o elemento acessado uma propriedade vlida do objeto.

Para criar uma matriz bsica e recuperar elementos no array:


1. 2.

Crie um novo documento do Flash e salve-o como multiArray1.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var twoDArray:Array = new Array(new Array("one","two"), new Array("three", "four")); trace(twoDArray);

Esse array, o twoDArray, consiste em dois elementos de array. Esses elementos so arrays compostos por dois elementos. Nesse caso, twoDArray o array principal que contm dois arrays aninhados.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. O seguinte ser exibido no painel Output (Sada):
one,two,three,four

4.

Retorne ao ambiente de criao e abra o painel Actions (Aes). Insira um comentrio na instruo trace, conforme mostrado a seguir:
// trace(twoDArray);

5.

Adicione o seguinte ActionScript ao final do cdigo no Frame 1 da Timeline:


trace(twoDArray[0][0]); // one trace(twoDArray[1][1]); // four

Para recuperar elementos de uma matriz, use vrios operadores de acesso de array ([]) aps o nome do array de nvel superior. O primeiro [] refere-se ao ndice do array de nvel superior. Os operadores de acesso de array subseqentes referem-se aos elementos dos arrays aninhados.
6.

Selecione Control > Test Movie para testar o cdigo. O seguinte ser exibido no painel Output:
one four

Sobre arrays

179

possvel usar loops for aninhados para criar matrizes. O exemplo a seguir mostrar como fazer isso.
Para criar uma matriz usando um loop for:
1. 2.

Crie um novo documento do Flash e salve-o como multiArray2.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
var gridSize:Number = 3; var mainArr:Array = new Array(gridSize); var i:Number; var j:Number; for (i = 0; i < gridSize; i++) { mainArr[i] = new Array(gridSize); for (j = 0; j < gridSize; j++) { mainArr[i][j] = "[" + i + "][" + j + "]"; } } trace(mainArr);

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 cdigo. 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]

Tambm possvel usar loops for aninhados para iterar os elementos de uma matriz, conforme mostrado no exemplo a seguir.
Para usar um loop for para iterar uma matriz:
1. 2.

Crie um novo documento do Flash e salve-o como multiArray3.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
// from previous example var gridSize:Number = 3; var mainArr:Array = new Array(gridSize); var i:Number; var j:Number; for (i = 0; i < gridSize; i++) { mainArr[i] = new Array(gridSize); for (j = 0; j < gridSize; j++) { mainArr[i][j] = "[" + i + "][" + j + "]"; } }

Nesse cdigo, 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.

180

Fundamentos da sintaxe e da linguagem

3.

Adicione o seguinte ActionScript ao Frame 1 da Timeline, seguindo o cdigo digitado na etapa 2:


// iterate through elements var outerArrayLength:Number = mainArr.length; for (i = 0; i < outerArrayLength; i++) { var innerArrayLength:Number = mainArr[i].length; for (j = 0; j < innerArrayLength; j++) { trace(mainArr[i][j]); } }

Esse ActionScript itera os elementos do array. Use a propriedade length de cada array como condio 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 informaes sobre como usar os arrays, consulte o Usando arrays na pgina 173. Para obter informaes sobre os elementos do array, consulte Sobre adio e remoo de elementos na pgina 177. Para obter informaes sobre o operador de acesso de array, consulte Usando operadores de ponto e de acesso de array na pgina 194.

Criando arrays associativos


Um array associativo, que como um objeto, composto de chaves e valores fora de ordem. Os arrays associativos usam chaves, em vez de um ndice numrico, para organizar os valores armazenados. Cada chave uma seqncia exclusiva. Ela associada a um valor e usada para acess-lo. Esse valor pode ser um tipo de dados, como Number, Array, Object etc. Ao criar um cdigo para localizar um valor associado a uma chave, voc est indexando ou executando uma pesquisa. por isso que voc usar arrays associativos na maioria das vezes.

Sobre arrays

181

A associao entre uma chave e um valor geralmente chamada de vinculao. A chave e o valor so mapeados entre si. Por exemplo, um livro de contatos poderia ser considerado um array associativo, onde os nomes so as chaves e os endereos de e-mail so os valores.
NO TA

Os arrays associativos so colees de combinaes chave/valor dispostas fora de ordem. O cdigo no deve esperar que as chaves de um array associativo sejam exibidas em uma ordem especfica.

Ao usar arrays associativos, voc pode chamar o elemento de array necessrio usando uma seqncia de caracteres em vez de um nmero, que geralmente mais fcil de memorizar. A desvantagem que esses arrays no so to teis em um loop porque no utilizam nmeros como valor de ndice. Eles so teis quando necessrio realizar freqentemente a pesquisa por valores de chave. Por exemplo, se voc tivesse um array de nomes e idades que precisasse utilizar com muita freqncia, seria recomendvel usar um array associativo. O exemplo a seguir demonstra como criar um objeto e definir uma srie de propriedades em um array associativo.
Para criar um array associativo simples:
1. 2.

Crie um novo documento do Flash. Digite o seguinte ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
// Define the object to use as an associative array. var someObj:Object = new Object(); // Define a series of properties. someObj.myShape = "Rectangle"; someObj.myW = 480; someObj.myH = 360; someObj.myX = 100; someObj.myY = 200; someObj.myAlpha = 72; someObj.myColor = 0xDFDFDF; // Display a property using dot operator and array access syntax. trace(someObj.myAlpha); // 72 trace(someObj["myAlpha"]); // 72

A primeira linha do ActionScript define um novo objeto (someObj) que utilizado como array associativo. Depois disso, voc define uma srie de propriedades em someObj. Por fim, voc exibe uma propriedade selecionada atravs do operador de ponto e da sintaxe de acesso de array.
N O TA

possvel acessar variveis em um array associativo usando dois mtodos diferentes: sintaxe de ponto (someObj.myColor) e sintaxe de array (someObj[myColor]).

3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript.

182

Fundamentos da sintaxe e da linguagem

O painel Output (Sada) exibe o nmero 72 duas vezes, que representa os dois nveis alfa rastreados. Existem duas maneiras de criar arrays associativos no ActionScript 2.0:

Usando um construtor Object Usando um construtor Array

Essas duas maneiras so demonstradas nos exemplos a seguir.


NO T A

O exemplo anterior utilizou um construtor Object para criar um array associativo.

Se voc usar o construtor Object para criar um array associativo, poder tirar proveito da inicializao do array com um literal de objeto. Uma instncia da classe Object, tambm chamada de objeto genrico, funcionalmente idntica a um array associativo. Na verdade, as instncias Object so basicamente arrays associativos. Recomenda-se usar arrays associativos nas funcionalidades semelhantes a dicionrio, nas quais mais conveniente ter chaves de seqncia de strings em vez de ndices numricos. Cada nome de propriedade do objeto genrico atua como a chave que fornece acesso a um valor armazenado. Para obter mais informaes sobre os literais, consulte Sobre literais na pgina 138. Para obter mais informaes sobre as classes, consulte Captulo 7, Classes, na pgina 239.
Para criar um array associativo usando um construtor Object:
1. 2.

Crie um novo documento do Flash e salve-o como assocArray.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
var monitorInfo:Object = {type:"Flat Panel", resolution:"1600 x 1200"}; trace(monitorInfo["type"] + ", " + monitorInfo["resolution"]);

Esse cdigo cria um array associativo chamado monitorInfo e usa um literal de objeto para inicializar o array com duas combinaes chave/valor.
N OT A

Se no for necessrio inicializar o array no momento da declarao, use o construtor Object para criar o array:

var monitorInfo:Object = new Object(); 3.

Selecione Control > Test Movie. O painel Output exibir o seguinte:


Flat Panel, 1600 x 1200

Sobre arrays

183

4.

Adicione o seguinte ActionScript ao Frame 1 da Timeline (aps o cdigo digitado anteriormente):


monitorInfo["aspectRatio"] = "16:10"; monitorInfo.colors = "16.7 million"; trace(monitorInfo["aspectRatio"] + ", " + monitorInfo.colors);

Depois que voc usar um literal de objeto ou o construtor de classe Object para criar o array, ser possvel adicionar novos valores ao array usando o operador de colchetes ([]) ou o operador de ponto (.), conforme demonstrado nesse cdigo. O cdigo 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 espao. Isso possvel com o operador de colchetes, mas gerar um erro se voc tentar isso com o operador de ponto. O uso de espaos nos nomes de chave no recomendado. Para obter mais informaes sobre os operadores de colchetes e operadores de ponto, consulte Sobre operadores na pgina 185. Para obter mais informaes sobre o cdigo formatado corretamente, consulte Formatando a sintaxe do ActionScript na pgina 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 combinaes chave/valor ao array. Se voc declarar o array associativo para ser do tipo Array, no possvel usar um literal de objeto para inicializar o array.
NO T A

No h nenhuma vantagem em usar o construtor Array para criar um array associativo. O construtor Array melhor para criar arrays indexados.

O prximo exemplo demonstra como usar o construtor Array para criar um array associativo.
Para criar um array associativo usando um construtor Array:
1. 2.

Crie um novo documento do Flash e salve-o como assocArray2.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
var monitorInfo:Array = new monitorInfo["type"] = "Flat monitorInfo["resolution"] = trace(monitorInfo["type"] + Array(); Panel"; "1600 x 1200"; ", " + monitorInfo["resolution"]);

Esse cdigo 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.

184

Fundamentos da sintaxe e da linguagem

3.

Selecione Control > Test Movie. O painel Output exibir o seguinte texto:
Flat Panel, 1600 x 1200
N OT A

No h nenhuma vantagem em usar o construtor Array para criar um array associativo. O construtor Array melhor para criar arrays indexados.

Os arrays associativos so basicamente instncias da classe Object e no existe nenhuma vantagem em criar arrays associativos com o construtor Array. Mesmo que voc crie um array associativo com o construtor new Array(), no poder usar nenhum mtodo e propriedade da classe Array (como sort() ou length) ao utilizar um array associativo. Para usar combinaes chave/valor em vez de ndice numrico, use a classe Object em vez de um array associativo.

Sobre operadores
Esta seo descreve regras gerais sobre tipos comuns, precedncia e associatividade de operadores. Os operadores so caracteres que especificam como combinar, comparar ou alterar valores em uma expresso. Uma expresso qualquer instruo que o Flash possa avaliar e que retorne um valor. Voc pode criar uma expresso combinando operadores e valores ou chamando uma funo. Para obter mais informaes sobre as expresses, consulte Sobre sintaxe, instrues e expresses na pgina 120. Por exemplo, uma expresso matemtica usa operadores numricos para manipular os valores utilizados. Como exemplos de caracteres de operador, pode-se citar +, <, * e =. Uma expresso consiste em operadores e operandos, os quais so qualquer combinao legal de smbolos do ActionScript que representam um valor. Um operando a parte do cdigo na qual o operador executa aes. Por exemplo, na expresso x + 2, x e 2 so operandos e + um operador. As expresses e os operadores so utilizados com freqncia no cdigo. possvel combinar operadores e valores para criar uma expresso e, ainda, chamar uma funo.
N O TA

Esta seo descreve como usar cada tipo de operador. No entanto, no haver tempo de discutir cada um deles. Para obter informaes sobre cada operador, incluindo os operadores especiais que no se enquadram nas categorias a seguir, consulte ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0).

Sobre operadores

185

As partes do cdigo em que o operador executa aes so chamadas de operandos. Por exemplo, voc pode usar o operador de adio (+) para somar valores de um literal numrico. Voc pode fazer isso para somar o valor de uma varivel chamada myNum.
myNum + 3;

Neste exemplo, myNum e 3 so operandos. Esta seo descreve regras gerais sobre tipos comuns, precedncia e associatividade de operadores:

Usando operadores para manipular valores na pgina 187 Sobre associatividade e precedncia de operadores na pgina 188 Sobre uso de operadores com seqncias de caracteres na pgina 192 Usando operadores de ponto e de acesso de array na pgina 194 Sobre operadores ps-fixados na pgina 196 Sobre operadores unrios na pgina 197 Sobre operadores multiplicativos na pgina 197 Sobre operadores aditivos na pgina 198 Usando operadores numricos na pgina 198 Sobre operadores relacionais na pgina 200 Sobre operadores de igualdade na pgina 200 Usando operadores relacionais e de igualdade na pgina 200 Sobre operadores de atribuio na pgina 204 Usando operadores de atribuio na pgina 204 Sobre operadores lgicos na pgina 205 Usando operadores lgicos na pgina 206 Sobre operadores de deslocamento bit a bit na pgina 207 Sobre operadores lgicos bit a bit na pgina 208 Usando operadores bit a bit na pgina 208 Sobre o operador condicional na pgina 210 Usando operadores em um documento na pgina 210

Para obter informaes sobre os operadores que no se enquadram nessas categorias, consulte ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0), que contm informaes sobre todos os operadores que podem ser utilizados. As sees a seguir mostram algumas funes comuns dos operadores. Para obter mais informaes sobre como usar vrios operadores em um nico exemplo de cdigo, consulte Usando operadores em um documento na pgina 210.

186

Fundamentos da sintaxe e da linguagem

Usando operadores para manipular valores


Os operadores so geralmente utilizados para manipular valores no Flash. Por exemplo, voc poderia criar um jogo no Flash onde o placar mudasse de acordo com a interao do usurio com as instncias no Stage (Palco). Use uma varivel para reter o valor e os operadores para manipular o valor da varivel. Por exemplo, voc poderia aumentar o valor de uma varivel chamada myScore. O exemplo a seguir demonstra como usar os operadores + (adio) e += (atribuio de adio) para somar e incrementar valores no cdigo.
Para manipular valores usando os operadores:
1. 2.

Crie um novo documento do Flash. Abra o painel Actions (Aes) (Window (Janela) > Actions) e digite o cdigo a seguir no painel Script:
// example one var myScore:Number = 0; myScore = myScore + 1; trace("Example one: " + myScore); // 1 // example two var secondScore:Number = 1; secondScore += 3; trace("Example two: " + secondScore); // 4

3.

Selecione Control (Controlar) > Test Movie (Testar filme). O painel Output (Sada) exibir o seguinte texto:
Example one: 1 Example two: 4

O operador de adio fcil de compreender, pois soma dois valores. No primeiro exemplo de cdigo, ele soma o valor atual de myScore com o nmero 1. Depois, armazena o resultado na varivel myScore. O segundo exemplo de cdigo usa o operador de atribuio de adio para somar e atribuir um novo valor em uma nica etapa. possvel reescrever a linha myScore = myScore + 1 (no exerccio anterior) como myScore++ ou, at mesmo, myScore += 1. O operador de incremento (++) um modo simplificado de dizer myScore = myScore + 1, pois ele manipula um incremento e uma atribuio simultaneamente. Veja um exemplo do operador de incremento no ActionScript a seguir:
var myNum:Number = 0; myNum++; trace(myNum); // 1 myNum++; trace(myNum); // 2

Sobre operadores

187

Observe que o trecho de cdigo anterior no tem operadores de atribuio. Em vez disso, ele se baseia no operador de incremento. possvel manipular o valor de uma varivel usando operadores quando uma condio true. Por exemplo, voc poder usar o operador de incremento (++) para incrementar a varivel i enquanto a condio for true. No cdigo a seguir, a condio ser true enquanto i for menor que 10. Enquanto a condio for true, voc incrementar i em um nmero mais alto usando i++.
var i:Number; for (i = 1; i < 10; i++) { trace(i); }

O painel Output exibir os nmeros de 1 a 9, que a incrementao da varivel i at chegar condio de trmino (i igual a 10), e parar. O ltimo valor exibido 9. Portanto, o valor de i ser 1 quando o arquivo SWF comear a ser executado e 9 depois que o rastreamento for concludo. Para obter mais informaes sobre as condies e os loops, consulte Sobre instrues na pgina 149.

Sobre associatividade e precedncia de operadores


Quando dois ou mais operadores so utilizados em uma instruo, alguns deles tm precedncia sobre outros. A precedncia e associatividade de operador determinam a ordem em que os operadores so processados. O ActionScript tem uma hierarquia que determina quais operadores sero executados primeiro. No final desta seo, h uma tabela que descreve essa hierarquia. Embora possa parecer natural para os usurios familiarizados com a aritmtica ou a programao bsica que o compilador processe o operador de multiplicao (*) antes do operador de adio (+), o compilador precisa de instrues explcitas sobre quais operadores devem ser processados primeiro. Essas instrues so conhecidas como precedncia de operador. Voc ver um exemplo de precedncia de operador quando estiver trabalhando com os operadores de multiplicao e adio:
var mySum:Number; mySum = 2 + 4 * 3; trace(mySum); // 14

Observe que a sada dessa instruo 14, pois a multiplicao tem uma precedncia de operador mais alta. Portanto, 4 * 3 e avaliado primeiro e o resultado somado com o nmero 2.

188

Fundamentos da sintaxe e da linguagem

possvel determinar o que acontecer delimitando as expresses entre parnteses. O ActionScript define uma precedncia de operador padro que pode ser alterada atravs dos parnteses (()). Quando uma expresso de adio colocada entre parnteses, o ActionScript executa a adio primeiro:
var mySum:Number; mySum = (2 + 4) * 3; trace(mySum); // 18

Agora, a sada dessa instruo ser 18. Os operadores tambm podem ter a mesma precedncia. Nesse caso, a associatividade determinar a ordem em que os operadores sero executados. A associatividade pode ser da esquerda para a direita ou da direita para a esquerda. Observe o operador de multiplicao novamente. Ele tem uma associatividade da esquerda para a direita; portanto, as duas instrues a seguir so idnticas.
var mySum:Number; var myOtherSum:Number; mySum = 2 * 4 * 3; myOtherSum = (2 * 4) * 3; trace(mySum); // 24 trace(myOtherSum); // 24

Dois ou mais operadores de mesma precedncia podem aparecer na mesma expresso. Nesses casos, o compilador usa as regras de associatividade para determinar qual operador deve ser processado primeiro. Todos os operadores binrios, exceto os de atribuio, possuem a associatividade da esquerda para direita, o que significa que os operadores da esquerda so processados antes dos operadores da direita. Os operadores de atribuio e o operador condicional (?:) possuem a associatividade da direita para a esquerda, o que significa que os operadores da direita so processados antes dos operadores da esquerda. Para obter mais informaes sobre os operadores de atribuio, consulte Usando operadores de atribuio na pgina 204. Para obter mais informaes sobre o operador condicional (?:), consulte Sobre o operador condicional na pgina 210. Por exemplo, considere os operadores de sinal de menor (<) e sinal de maior (>), que possuem a mesma precedncia. Se esses dois operadores forem utilizados na mesma expresso, o operador da esquerda ser processado primeiro porque ambos possuem a associatividade da esquerda para direita. Isso significa que as duas instrues a seguir produzem a mesma sada:
trace(3 > 2 < 1); // false trace((3 > 2) < 1); // false

Sobre operadores

189

O operador maior que (>) processado primeiro, o que resultar em um valor true porque o operando 3 maior que o operando 2. Em seguida, o valor true passado para o operador menor que (<), junto com o operando 1. O operador menor que (<) converte o valor true no valor numrico 1 e compara esse valor numrico com o segundo operando 1 para retornar o valor false (o valor 1 no menor que 1). Considere a ordem dos operandos no ActionScript, particularmente quando voc estiver configurando condies complexas e souber a freqncia em que uma dessas condies se apresenta como true. Por exemplo, se voc souber que i ser maior que 50 na sua condio, ser necessrio escrever i<50 primeiro. Portanto, isso ser verificado primeiro, para que a segunda condio a ser escrita no precise ser verificada com tanta freqncia. A tabela a seguir lista todos os operadores do ActionScript e sua associatividade, da precedncia mais alta para a mais baixa. Para obter mais informaes e diretrizes sobre como usar os operadores e os parnteses, consulte Captulo 19, Formatando a sintaxe do ActionScript, na pgina 799.
Operador Descrio Precedncia mais alta
x++

Associatividade

Ps-incremento Ps-decremento Acesso de propriedade de objeto Elemento de array Parnteses Chamada de funo Pr-incremento Pr-decremento Negao unria, como x = -1 NOT bit a bit

Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Direita para esquerda Direita para esquerda Esquerda para direita Direita para esquerda

x--

[ ]

( )

function ( )

++x

--x

190

Fundamentos da sintaxe e da linguagem

Operador
!

Descrio
NOT lgico Alocar objeto Desalocar objeto Tipo de objeto Retorna um valor indefinido Multiplicar Dividir Mdulo Mais unrio Menos unrio Deslocamento para esquerda bit a bit Deslocamento para direita bit a bit Deslocamento para direita bit a bit (sem sinal) Instncia de (localiza a classe da qual o objeto uma instncia) Requer Flash Player 6 ou posterior Menor que Menor ou igual a Maior que

Associatividade
Direita para esquerda Direita para esquerda Direita para esquerda Direita para esquerda Direita para esquerda Esquerda para direita Esquerda para direita Esquerda para direita Direita para esquerda Direita para esquerda Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita

new

delete

typeof

void

<<

>>

>>>

instanceof

<

<=

>

Sobre operadores

191

Operador
>=

Descrio
Maior ou igual a Igual a Diferente de AND bit a bit XOR bit a bit OR bit a bit AND lgico OR lgico Condicional Atribuio Atribuio composta

Associatividade
Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Direita para esquerda Direita para esquerda Direita para esquerda Esquerda para direita

==

!=

&

&&

||

?:

*=, /=, %=, +=, =, &=, |=, ^=, <<=, >>=, >>>= ,

Vrgula

Precedncia mais baixa

Sobre uso de operadores com seqncias de caracteres


Os operadores de comparao s compararo seqncias de caracteres se os dois operandos forem seqncias de caracteres. Uma exceo a essa regra o operador de igualdade estrita (===). Se apenas um operando for uma seqncia de caracteres, o ActionScript converter ambos os operandos em nmeros e executar uma comparao numrica. Para obter mais informaes sobre os operadores numricos, consulte Usando operadores numricos na pgina 198.

192

Fundamentos da sintaxe e da linguagem

Com exceo do operador de igualdade (==), os operadores de comparao (>, >=, < e <=) afetam seqncias de caracteres de maneira diferente quando operam em outros valores. Os operadores de comparao comparam seqncias de caracteres para determinar qual vir primeiro pela ordem alfabtica. As seqncias de caracteres em maisculas tm precedncia sobre as seqncias de caracteres em minsculas. Isso significa que o "Egg" vem antes de "chicken".
var c:String = "chicken"; var e:String = "Egg"; trace(c < e); // false var riddleArr:Array = new Array(c, e); trace(riddleArr); // chicken,Egg trace(riddleArr.sort()); // Egg,chicken

Nesse ActionScript, o mtodo sort() da classe Array reordena o contedo do array em ordem alfabtica. Observe que o valor Egg vem antes de chicken porque o E maisculo vem antes do c minsculo. Para comparar as seqncias de caracteres independentemente do uso de maisculas e minsculas, necessrio converter as seqncias de caracteres em maisculas ou minsculas antes de compar-las. Para obter mais informaes sobre os operadores de comparao, consulte Sobre operadores de igualdade na pgina 200 e Usando operadores relacionais e de igualdade na pgina 200. possvel usar os mtodos toLowerCase() ou toUpperCase() para converter as seqncias de caracteres e deix-las com o mesmo uso de maisculas e minsculas antes que elas sejam comparadas. No exemplo a seguir, as duas seqncias de caracteres so convertidas em minsculas 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

Os operadores de comparao comparam apenas duas seqncias de caracteres. Por exemplo, os operadores no compararo os valores se um operando for um valor numrico. Se apenas um dos operandos for uma seqncia de caracteres, o ActionScript converter ambos os operandos em nmeros e executar uma comparao numrica.

possvel usar operadores para manipular seqncias de caracteres. Use o operador de adio (+) para concatenar operandos de seqncias de caracteres. Talvez voc j tenha usado o operador de adio para concatenar seqncias de caracteres ao escrever instrues trace. Por exemplo, voc poderia escrever o seguinte:
var myNum:Number = 10; trace("The variable is " + myNum + ".");

Sobre operadores

193

Aps o teste do cdigo, o painel Output (Sada) exibir o seguinte:


The variable is 10.

No exemplo a seguir, a instruo trace usa o operador + para concatenar, e no para somar. Quando voc est trabalhando com seqncias de caracteres e nmeros, o Flash, algumas vezes, concatena em vez de somar numericamente. Por exemplo, possvel concatenar duas seqncias de caracteres de diferentes variveis em um nico campo de texto. No cdigo ActionScript a seguir, a varivel myNum concatenada com uma seqncia 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 cdigo retorna o seguinte em um campo de texto com o nome de instncia myTxt:
One carrot. 10 large eggplants. Lots of vegetable broth.

O exemplo anterior mostrou como possvel usar os operadores de adio (+) e atribuio de adio (+=) para concatenar seqncias de caracteres. Observe como a terceira linha do cdigo usa o operador de adio para concatenar o valor da varivel myNum no campo de texto e como a quarta linha do cdigo usa o operador de atribuio de adio para concatenar uma seqncia de caracteres no valor existente do campo de texto. Se apenas um dos operandos de seqncia de texto for uma seqncia de caracteres, o Flash converter o outro operando em seqncia de caracteres. Portanto, o valor de myNum ser convertido em seqncia de caracteres no exemplo anterior.
NO T A 194

O ActionScript trata os espaos no comeo ou final de uma seqncia de caracteres como uma parte literal dessa seqncia.

Usando operadores de ponto e de acesso de array


possvel usar o operador de ponto (.) e o operador de acesso de array ([]) para acessar propriedades internas ou personalizadas do ActionScript. Use os operadores de ponto para referenciar determinados ndices em um objeto. Por exemplo, se um objeto contiver alguma informao do usurio, especifique um determinado nome de chave no operador de acesso de array para recuperar o nome de um usurio, conforme demonstrado no ActionScript a seguir:
var someUser:Object = {name:"Hal", id:2001}; trace("User's name is: " + someUser["name"]); // User's name is: Hal trace("User's id is: " + someUser["id"]); // User's id is: 2001

Fundamentos da sintaxe e da linguagem

Por exemplo, o ActionScript a seguir usa o operador de ponto para definir determinadas propriedades dentro dos objetos:
myTextField.border = true; year.month.day = 9; myTextField.text = "My text";

Os operadores de ponto e de acesso de array so muito parecidos. O operador de ponto utiliza um identificador como propriedade, mas o operador de acesso de array retorna o contedo como nome e acessa o valor desse nome de propriedade. O operador de acesso de array permite definir e recuperar dinamicamente nomes de instncia e variveis. O operador de acesso de array ser til ser voc no souber exatamente quais chaves esto em um objeto. Quando isso ocorrer, use o loop for..in para iterar um objeto ou clipe de filme e exibir seu contedo.
Para usar os operadores de ponto e de acesso de array:
1.

Em um novo documento do Flash, crie um clipe de filme na Timeline (Linha de tempo) principal. Selecione o clipe de filme e abra o Property inspector (Inspetor de propriedades). Digite o nome de instncia myClip. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline:
myClip.spam = 5; trace(myClip.spam); // 5

2. 3. 4.

Para definir um valor na instncia myClip da linha de tempo atual, use os operadores de ponto ou de acesso de array, conforme demonstrado nesse ActionScript. Se voc escrever uma expresso dentro do operador de acesso de array, ele a avaliar primeiro e usar o resultado como nome da varivel.
5.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. O painel Output (Sada) exibir o nmero 5. Retorne ao ambiente de criao e substitua a primeira linha do ActionScript pelo seguinte:
myClip["spam"] = 10;

6.

7.

Selecione Control > Test Movie para testar o documento. O painel Output exibir o nmero 10. Retorne ao ambiente de criao e clique duas vezes na instncia myClip. Adicione quatro novas instncias a myClip. o Property inspector para adicionar os seguintes nomes de instncia a cada uma das quatro instncias: nestedClip1, nestedClip2, nestedClip3, nestedClip4.

8. 9.

10. Use

Sobre operadores

195

11.

Adicione o seguinte cdigo ao Frame 1 da Timeline principal:


var i:Number; for (i = 1; i <= 4; i++) { myClip["nestedClip" + i]._visible = false; }

Esse ActionScript alternar a visibilidade de cada clipe de filme aninhado.


12. Selecione

Control > Test Movie para testar o ActionScript recm-adicionado.

Agora as quatro instncias aninhadas no esto mais visveis. Voc est usando o operador de acesso de array para iterar cada clipe de filme aninhado na instncia myClip e definir sua propriedade visvel dinamicamente. Isso economizar tempo porque no necessrio referenciar especificamente cada instncia. Tambm possvel usar o operador de acesso de array que fica no lado esquerdo de uma atribuio, o que permitir definir dinamicamente a instncia, a varivel e os nomes de objeto:
myNum[i] = 10;

No ActionScript 2.0, possvel usar o operador de colchetes para acessar propriedades em um objeto criado dinamicamente, caso a definio de classe desse objeto no receba o atributo dynamic. Tambm possvel criar matrizes atravs desse operador. Para obter mais informaes sobre como criar matrizes com operadores de acesso de array, consulte Criando matrizes na pgina 178.

Sobre operadores ps-fixados


Os operadores ps-fixados utilizam um operador e incrementam ou decrementam o valor desse operador. Embora esses operadores sejam unrios, eles no so classificados junto com os demais operadores unrios, pois tm uma precedncia mais alta e um comportamento especial. Para obter informaes sobre os operadores unrios, consulte Sobre operadores unrios na pgina 197. Quando um operador ps-fixado utilizado como parte de uma expresso maior, o valor da expresso retornado antes do processamento do operador ps-fixado. Por exemplo, o cdigo a seguir mostra como o valor da expresso xNum++ retornado antes que ele seja incrementado.
var xNum:Number = 0; trace(xNum++); // 0 trace(xNum); // 1

Quando esse cdigo rastreado, o texto exibido no painel Output (Sada) o seguinte:
0 1

196

Fundamentos da sintaxe e da linguagem

Os operadores desta tabela possuem a mesma precedncia:


Operador
++ --

Operao executada
Incremento (ps-fixado) Decremento (ps-fixado)

Sobre operadores unrios


Os operadores unrios utilizam um operando. Os operadores de incremento (++) e decremento (--) desse grupo so operadores pr-fixados; isso significa que eles aparecero antes do operando em uma expresso. Eles tambm podem aparecer depois do operando; nesse caso, eles sero operadores ps-fixados. Para obter informaes sobre os operadores ps-fixados, consulte Sobre operadores ps-fixados na pgina 196. Os operadores pr-fixados diferem dos ps-fixados porque o operador de incremento ou decremento concludo antes que o valor da expresso geral seja retornado. Por exemplo, o cdigo a seguir mostra como o valor da expresso xNum++ retornado depois que ele incrementado.
var xNum:Number = 0; trace(++xNum); // 1 trace(xNum); // 1

Todos os operadores desta tabela possuem a mesma precedncia:


Operador
++ -+ ! typeof void

Operao executada
Incremento (pr-fixado) Decremento (pr-fixado) + unrio - unrio (negao) Retorna informaes de tipo Retorna um valor indefinido

Sobre operadores multiplicativos


Os operadores multiplicativos usam dois operandos e executam clculos de multiplicao, diviso ou mdulo. Outros operadores numricos incluem operadores aditivos. Para obter informaes sobre os operadores aditivos, consulte Sobre operadores aditivos na pgina 198.

Sobre operadores

197

Todos os operadores desta tabela possuem a mesma precedncia:


Operador
* / %

Operao executada
Multiplicao Diviso Mdulo

Para obter informaes sobre como usar os operadores multiplicativos, consulte Usando operadores numricos na pgina 198.

Sobre operadores aditivos


Os operadores aditivos utilizam dois operandos e executam clculos de adio ou subtrao. Outros operadores numricos incluem operadores multiplicativos. Para obter informaes sobre os operadores multiplicativos, consulte Sobre operadores multiplicativos na pgina 197. Os operadores desta tabela possuem a mesma precedncia:
Operador
+ -

Operao executada
Adio Subtrao

Para obter informaes sobre como usar operadores aditivos, consulte Usando operadores numricos na pgina 198.

Usando operadores numricos


Use operadores numricos para adicionar, subtrair, dividir e multiplicar valores no ActionScript. possvel executar vrios tipos de operaes aritmticas. Um dos operadores mais comuns o operador de incremento, geralmente formado como i++. Esse operador tem outras funes. Para obter mais informaes sobre o operador de incremento, consulte Usando operadores para manipular valores na pgina 187. possvel adicionar o incremento antes (pr-incremento) ou depois (ps-incremento) de um operando.

198

Fundamentos da sintaxe e da linguagem

Para compreender os operadores numricos no ActionScript:


1. 2.

Crie um novo documento do Flash. Digite o seguinte ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
// example one var firstScore:Number = 29; if (++firstScore >= 30) { // should trace trace("Success! ++firstScore is >= 30"); } // example two var secondScore:Number = 29; if (secondScore++ >= 30) { // shouldn't trace trace("Success! secondScore++ is >= 30"); }

3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript. O bloco de cdigos Example one rastreia, mas o bloco de cdigos Example two no. O primeiro exemplo usa um pr-incremento (++firstScore) para incrementar e calcular firstScore antes que ele seja testado em relao ao nmero 30. Portanto, firstScore incrementado em 30 e, em seguida, testado em relao a esse nmero. Entretanto, Example two usa um ps-incremento (secondScore++), que avaliado aps a execuo do teste. Portanto, 29 comparado com 30 e incrementado em 30 aps a avaliao.

Para obter mais informaes sobre a precedncia de operador, consulte Sobre associatividade e precedncia de operadores na pgina 188. Ao carregar dados de fontes externas (como arquivos XML, FlashVars, servios da Web etc.), preciso ter cuidado ao trabalhar com operadores numricos. s vezes, o Flash trata os nmeros como seqncias de caracteres, pois o arquivo SWF no conhece o tipo de dados do nmero. Nesse caso, voc pode adicionar 3 e 7 para obter o resultado 37, pois os dois nmeros so concatenados como seqncias de caracteres, em vez de serem somados numericamente. Nesse caso, necessrio converter manualmente os dados das seqncias de caracteres em nmeros atravs da funo Number().

Sobre operadores

199

Sobre operadores relacionais


Os operadores relacionais utilizam dois operandos, comparam seus valores e retornam um valor booleano. Todos os operadores desta tabela possuem a mesma precedncia:
Operador
< > <= >= instanceof in

Operao executada
Menor que Maior que Menor ou igual a Maior ou igual a Verifica a cadeia de prottipos Procura propriedades de objeto

Para obter informaes sobre como usar os operadores relacionais, consulte Usando operadores relacionais e de igualdade na pgina 200.

Sobre operadores de igualdade


Os operadores de igualdade utilizam dois operandos, comparam seus valores e retornam um valor booleano. Todos os operadores desta tabela possuem a mesma precedncia:
Operador
== != === !==

Operao executada
Igualdade Diferena Igualdade estrita Diferena estrita

Para obter informaes sobre como usar operadores de igualdade, consulte Usando operadores relacionais e de igualdade na pgina 200.

Usando operadores relacionais e de igualdade


Os operadores relacionais e de igualdade, tambm chamados de operadores de comparao, comparam os valores das expresses e retornam true ou false (um valor booleano). Geralmente, os operadores de comparao so utilizados em loops e instrues condicionais para especificar a condio aplicvel no momento em que o loop deve parar.

200

Fundamentos da sintaxe e da linguagem

Use o operador de igualdade (==) para determinar se os valores ou as referncias dos dois operandos so iguais e se essa comparao retornar um valor booleano. Os operandos de seqncia de caracteres, nmeros ou valores booleanos so comparados atravs de um valor. Os operandos de objeto e array so comparados atravs de uma referncia. Neste exemplo, veja como usar o operador de igualdade para testar o tamanho do array e exibir uma mensagem no painel Output (Sada) caso no haja itens no array.
var myArr:Array = new Array(); if (myArr.length == 0) { trace("the array is empty."); }

Quando voc seleciona Control (Controlar) > Test Movie (Testar filme), a seqncia de caracteres the array is empty aparece no painel Output. possvel usar o operador de igualdade para comparar valores, mas no para definir valores. Tente usar o operador de atribuio (=) para verificar a igualdade.
Para usar os operadores relacionais e de igualdade no cdigo:
1. 2.

Crie um novo documento do Flash. Digite o seguinte ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var myNum:Number = 2; if (myNum == 2) { // do something trace("It equals 2"); }

Nesse ActionScript, use o operador de igualdade (==) para verificar a igualdade. Verifique se a varivel myNum igual a 2.
3.

Selecione Control > Test Movie. A seqncia de caracteres It equals 2 aparece no painel Output. Retorne ao ambiente de criao e altere:
var myNum:Number = 2;

4.

para:
var myNum:Number = 4; 5.

Selecione Control > Test Movie novamente. A seqncia de caracteres It equals 2 no aparece no painel Output. Retorne ao ambiente de criao e altere:
if (myNum == 2) {

6.

para
if (myNum = 2) {

Sobre operadores

201

7.

Selecione Control > Test Movie novamente. A seqncia de caracteres It equals 2 aparece no painel Output novamente. Na etapa 6, voc atribui o valor 2 a myNum, em vez de comparar myNum com 2. Nesse caso, a instruo if executada independente do valor anterior de myNum, o que pode gerar resultados inesperados durante o teste do documento do Flash. Para obter mais informaes sobre como utilizar corretamente o operador de atribuio, consulte Usando operadores de atribuio na pgina 204.

O operador de igualdade estrita (===) similar ao operador de igualdade; a nica diferena que ele no realiza a converso de tipo. Se dois operandos forem de tipos diferentes, o operador de igualdade retornar false. O operador de diferena estrita (!==) retorna o resultado oposto ao do operador de igualdade estrita. O ActionScript a seguir demonstra a diferena-chave entre o operador de igualdade (==) e o operador de igualdade estrita (===):
var num1:Number = 32; var num2:String = new String("32"); trace(num1 == num2); // true trace(num1 === num2); // false

Primeiro, voc define as variveis numricas: num1 enum2. Se voc comparar as variveis 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 so iguais. Quando o operador de igualdade estrita (===) utilizado, o Flash no tenta realizar nenhuma converso de tipo de dados antes de comparar os valores. Conseqentemente, o Flash considera as variveis como dois valores separados. No exemplo a seguir, voc usar o operador de maior ou igual a (>=) para comparar valores e executar o cdigo com base no valor digitado por um usurio em um campo de texto.
Para usar o operador de maior ou igual a no cdigo:
1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione Flash Document (Documento do Flash) para criar um arquivo FLA. Adicione o seguinte cdigo ao Frame 1 da Timeline principal:
this.createTextField("myTxt", 20, 0, 0, 100, 20); myTxt.type = "input"; myTxt.border = true; myTxt.restrict = "0-9"; this.createEmptyMovieClip("submit_mc", 30); submit_mc.beginFill(0xFF0000); submit_mc.moveTo(0, 0); submit_mc.lineTo(100, 0); submit_mc.lineTo(100, 20);

2.

202

Fundamentos da sintaxe e da linguagem

submit_mc.lineTo(0, 20); submit_mc.lineTo(0, 0); submit_mc.endFill(); submit_mc._x = 110; 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"); } }; 3.

Selecione Control > Test Movie para testar o ActionScript. Tambm possvel verificar se determinadas condies so verdadeiras e executar um bloco alternativa se a condio no for verdadeira.

4.

Altere a condio no ActionScript da seguinte maneira.


if (myNum == 10) { trace("Your number is 10"); } else { trace("Your number is not 10"); }

5.

Selecione Control > Test Movie para testar o ActionScript novamente.

Com exceo do operador de igualdade estrita (===), os operadores de comparao compararo seqncias de caracteres somente se os operandos forem seqncias de caracteres. Se apenas um dos operandos for uma seqncia de caracteres, os dois operandos sero convertidos em nmeros e executaro uma comparao numrica. Para obter mais informaes sobre as seqncias de caracteres e os operadores, consulte Sobre uso de operadores com seqncias de caracteres na pgina 192. Para obter informaes sobre como a ordem e a precedncia de operador afetam o ActionScript, consulte Sobre associatividade e precedncia de operadores na pgina 188.

Sobre operadores

203

Sobre operadores de atribuio


Os operadores de atribuio utilizam dois operandos e atribuem um valor a um operando com base no valor do outro operando. Todos os operadores desta tabela possuem a mesma precedncia:
Operador
= *= /= %= += -= <<= >>= >>>= &= ^= |=

Operao executada
Atribuio Atribuio de multiplicao Atribuio de diviso Atribuio de mdulo Atribuio de adio Atribuio de subtrao Atribuio de deslocamento para esquerda bit a bit Atribuio de deslocamento para direita bit a bit Atribuio de deslocamento para direita bit a bit (sem sinal) Atribuio AND bit a bit Atribuio XOR bit a bit Atribuio OR bit a bit

Para obter informaes sobre como usar operadores de atribuio, consulte Usando operadores de atribuio na pgina 204.

Usando operadores de atribuio


Use o operador de atribuio (=) para atribuir um determinado valor a uma varivel. Para atribuir uma seqncia de caracteres a uma varivel, faa o seguinte:
var myText:String = "ScratchyCat";

Tambm possvel usar o operador de atribuio para atribuir diversas variveis na mesma expresso. Na instruo a seguir, o valor 10 atribudo s variveis numOne, numTwo e numThree.
var numOne:Number; var numTwo:Number; var numThree:Number; numOne = numTwo = numThree = 10;

204

Fundamentos da sintaxe e da linguagem

Tambm possvel usar operadores de atribuio composta para combinar operaes. Esses operadores so executados nos dois operandos e, depois, atribuem o novo valor ao primeiro operando. Por exemplo, essas duas instrues desempenham a mesma funo:
var myNum:Number = 0; myNum += 15; myNum = myNum + 15;

Ao trabalhar com o operador de atribuio, voc poder ter problemas se tentar somar os valores de uma expresso, 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 expresso 5+2 entre parnteses, conforme mostrado no cdigo a seguir:
trace("the sum of 5 + 2 is: " + (5 + 2)); // the sum of 5 + 2 is: 7

Sobre operadores lgicos


Use operadores lgicos para comparar valores booleanos (true e false) e, em seguida, retorne um valor booleano com base nessa comparao. Por exemplo, se dois operandos forem avaliados como true, o operador AND lgico (&&) retornar true. Se um ou ambos os operandos forem avaliados como true, o operador OR lgico (||) retornar true. Os operadores lgicos utilizam dois operandos e retornam um resultado booleano. Estes operadores no tm a mesma precedncia e so listados na tabela a seguir por ordem decrescente de precedncia:
Operador
&& ||

Operao executada
AND lgico OR lgico

Para obter informaes sobre como usar os operadores lgicos, consulte Usando operadores lgicos na pgina 206.

Sobre operadores

205

Usando operadores lgicos


Os operadores lgicos so freqentemente usados com os operadores de comparao para determinar a condio de uma instruo if. Isso demonstrado pelo exemplo a seguir.
Para usar operadores lgicos no cdigo:
1. 2.

Selecione File (Arquivo) > New (Novo) e crie um novo documento do Flash. Abra o painel Actions (Aes) e digite o seguinte ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
this.createTextField("myTxt", 20, 0, 0, 100, 20); myTxt.type = "input"; myTxt.border = true; myTxt.restrict = "0-9"; 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 execuo. Se voc digitar um nmero no campo de texto e clicar no boto do Stage (Palco), o Flash usar o operador lgico para exibir uma mensagem no painel Output (Sada). A mensagem depender do nmero digitado no campo de texto.

206

Fundamentos da sintaxe e da linguagem

Ao usar operandos, necessrio ter cuidado com a ordem; principalmente quando voc estiver utilizando condies complexas. No trecho a seguir, observe como o operador AND lgico utilizado para verificar se um nmero est entre 10 e 20. De acordo com o resultado, uma mensagem apropriada ser exibida. Se o nmero for menor que 10 ou maior que 20, uma mensagem alternativa ser exibida no painel Output.
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"); } };

Sobre operadores de deslocamento bit a bit


Os operadores de deslocamento bit a bit utilizam dois operandos e deslocam os bits do primeiro operando at o ponto especificado pelo segundo operando. Todos os operadores desta tabela possuem a mesma precedncia:
Operador
<< >> >>>

Operao executada
Deslocamento para esquerda bit a bit Deslocamento para direita bit a bit Deslocamento para direita bit a bit (sem sinal)

Para obter informaes sobre como usar operadores bit a bit, consulte Usando operadores bit a bit na pgina 208. Para obter informaes especficas sobre cada operador bit a bit, consulta a entrada correspondente em ActionScript 2.0 Language Reference (Referncia Linguagem ActionScript 2.0).

Sobre operadores

207

Sobre operadores lgicos bit a bit


Os operadores lgicos bit a bit utilizam dois operandos e executam operaes lgicas em nvel de bit. Estes operadores no tm a mesma precedncia e so listados na tabela a seguir por ordem decrescente de precedncia:
Operador
& ^ |

Operao executada
AND bit a bit XOR bit a bit OR bit a bit

Para obter informaes sobre como usar operadores bit a bit, consulte Usando operadores bit a bit na pgina 208. Para obter mais informaes sobre cada operador bit a bit, consulte a entrada correspondente em ActionScript 2.0 Language Reference (Referncia linguagem ActionScript 2.0).

Usando operadores bit a bit


Os operadores bit a bit manipulam internamente nmeros de ponto flutuante para transform-los em nmeros inteiros de 32 bits. A operao exata realizada depende do operador, mas todas as operaes bit a bit avaliam cada dgito binrio (bit) do nmero inteiro de 32 bits individualmente para computar um novo valor. Para obter uma lista de operadores de deslocamento bit a bit, consulte Sobre operadores de deslocamento bit a bit na pgina 207. Para obter uma lista de operadores lgicos bit a bit, consulte Sobre operadores lgicos bit a bit na pgina 208. Usar os operadores bit a bit no Flash no muito comum, mas pode ser til em algumas circunstncias. Por exemplo, talvez seja necessrio criar uma matriz de permisses para um projeto do Flash, mas sem criar variveis separadas para cada tipo de permisso. Nesse caso, voc poderia usar operadores bit a bit. O exemplo a seguir mostra como usar o operador OR bit a bit com o mtodo Array.sort() para especificar opes de classificao.
Para usar o operador OR bit a bit:
1.

Selecione File (Arquivo) > New (New) e crie um novo documento do Flash.

208

Fundamentos da sintaxe e da linguagem

2.

Digite o seguinte ActionScript no painel Actions (Aes):


var myArr:Array = new Array("Bob", "Dan", "doug", "bill", "Hank", "tom"); trace(myArr); // Bob,Dan,doug,bill,Hank,tom myArr.sort(Array.CASEINSENSITIVE | Array.DESCENDING); trace(myArr); // tom,Hank,doug,Dan,Bob,bill

A primeira linha define um array de nomes aleatrios e os rastreia no painel Output (Sada). Depois, voc chama o mtodo Array.sort() e especifica duas opes de classificao usando os valores constantes Array.CASEINSENSITIVE e Array.DESCENDING. O resultado do mtodo de classificao faz com que os itens no array sejam classificados na ordem inversa (de 'z' a 'a'). A pesquisa no faz distino entre maisculas e minsculas; ou seja, a e A so considerados idnticos, diferente da pesquisa que faz distino entre maisculas e minsculas, onde o Z teria precedncia sobre o a.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ActionScript. O seguinte texto ser exibido no painel Output (Sada):
Bob,Dan,doug,bill,Hank,tom tom,Hank,doug,Dan,Bob,bill

Existem cinco opes disponveis no mtodo de classificao:


1 ou Array.CASEINSENSITIVE (binary = 1) 2 ou Array.DESCENDING (binary = 10) 4 ou Array.UNIQUESORT (binary = 100) 8 ou Array.RETURNINDEXEDARRAY (binary = 1000) 16 ou Array.NUMERIC (binary = 10000)

Existem trs maneiras diferentes de definir as opes de classificao de um array:


my_array.sort(Array.CASEINSENSITIVE | Array.DESCENDING); // constants my_array.sort(1 | 2); // numbers my_array.sort(3); // adding the numbers

Embora isso provavelmente no seja bvio, os valores numricos das opes de classificao so, na verdade, dgitos bit a bit (binrios ou de base 2). O valor de constante Array.CASEINSENSITIVE equivale ao valor numrico 1, que tambm o valor binrio 1. O valor de constante Array.DECENDING tem um valor numrico 2 ou um valor binrio 10. Trabalhar com nmeros binrios pode ser confuso. O valor binrio tem apenas dois valores possveis, 1 ou 0. por isso que o valor 1 representado como 10. Para exibir o nmero 3 como valor binrio, ele seria 11 (1+10). O nmero 4 representado em binrio 100, o nmero 5 em binrio 101, e assim sucessivamente.

Sobre operadores

209

O ActionScript a seguir demonstra como classificar um array de valores numricos em ordem decrescente usando o operador AND bit a bit para adicionar as constantes Array.DESCENDING e Array.NUMERIC juntas.
var scores:Array = new Array(100,40,20,202,1,198); trace(scores); // 100,40,20,202,1,198 trace(scores.sort()); // 1,100,198,20,202,40 var flags:Number = Array.NUMERIC|Array.DESCENDING; trace(flags); // 18 (base 10) trace(flags.toString(2)); // 10010 (binary -- base2) trace(scores.sort(flags)); // 202,198,100,40,20,1

Sobre o operador condicional


O operador condicional ternrio, o que significa que ele utiliza trs operandos. Ele um mtodo abreviado de aplicao da instruo condicional if..else:
Operador
?:

Operao executada
Condicional

Para obter informaes sobre como usar o operador condicional e um exemplo, consulte Sobre o operador condicional e a sintaxe alternativa na pgina 160.

Usando operadores em um documento


No exemplo a seguir, o mtodo Math.round() utilizado para arredondar os clculos para um nmero arbitrrio de casas decimais. Esse mtodo arredonda o valor do parmetro x para cima ou para baixo at chegar ao inteiro mais prximo e retorna esse valor. Aps modificar um pouco o ActionScript, voc pode fazer com que o Flash arredonde os nmeros para um determinado nmero de casas decimais. No exemplo a seguir, os operadores de diviso e multiplicao tambm so utilizados para calcular os pontos de um usurio com base no nmero de respostas corretas dividido pelo nmero total de perguntas. Os pontos do usurio podem ser multiplicados por um nmero e exibidos para que se obtenha pontos entre 0% e 100%. Em seguida, use o operador de adio para concatenar os pontos do usurio em uma seqncia de caracteres exibida no painel Output (Sada).

210

Fundamentos da sintaxe e da linguagem

Para usar os operadores no ActionScript:


1. 2.

Crie um novo documento do Flash. Digite o seguinte ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var correctAnswers:Number = 11; var totalQuestions:Number = 13; //round to the nearest integer //var score:Number = Math.round(correctAnswers / totalQuestions * 100); //round to two decimal places var score:Number = Math.round(correctAnswers / totalQuestions * 100 * 100) / 100; trace("You got " + correctAnswers + " out of " + totalQuestions + " answers correct, for a score of " + score + "%.");

3.

Selecione Control (Controlar) > Test Movie (Testar filme). O painel Output exibir o seguinte texto:
You got 11 out of 13 answers correct, for a score of 84.62%.

Quando voc chamar Math.round() nesse exemplo, os pontos sero arredondados para o nmero inteiro mais prximo (85) e exibidos no painel Output. Se voc multiplicar o nmero por 100, antes de chamar Math.round() e dividi-lo por 100, faa com que o Flash arredonde o nmero para 2 casas decimais. Esse procedimento retornar uma pontuao mais precisa.
4.

Tente alterar a varivel correctAnswers para 3 e selecione Control > Test Movie para testar o arquivo SWF novamente.

Caso esteja desenvolvendo um aplicativo de teste, talvez seja necessrio criar uma srie de perguntas verdadeiro/falso ou de mltipla escolha usando os componentes RadioButton e Label. Depois que os usurios terminarem de responder cada pergunta e clicar no boto Submit (Enviar), compare as respostas com um gabarito e calcule os pontos dos usurios.

Sobre operadores

211

212

Fundamentos da sintaxe e da linguagem

CAPTULO 6

Funes e mtodos
Entender funes importante quando se est escrevendo ActionScript, criando classes e usando mtodos. H diversos tipos de funes com os quais voc ir trabalhar. Nesse captulo, voc aprender sobre funes e mtodos: como us-los nos aplicativos quando se usa classes internas e como cri-los. No Captulo 7, Classes,, voc criar classes personalizadas para as quais escrever funes regularmente. Voc tambm aprender a criar funes em arquivos de classe do ActionScript. Voc pode usar funes no seu cdigo para adicionar interatividade, animaes e outros efeitos aos aplicativos. Esse captulo aborda os tipos de funo que voc pode criar nos aplicativos Flash. Para obter informaes sobre quais so essas funes e esses mtodos, assim como exerccios nos quais voc poder criar e usar funes e mtodos no Flash, consulte os tpicos a seguir:
Sobre funes e mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Noes bsicas sobre mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235

Sobre funes e mtodos


Os mtodos e as funes so blocos de cdigo ActionScript que podem ser reutilizados em qualquer lugar de um arquivo SWF. Voc pode criar suas funes no arquivo FLA ou em um arquivo externo do ActionScript e cham-las em qualquer local de seus documentos. Mtodos so meramente funes que esto localizadas dentro de uma definio de classe do ActionScript. Voc pode definir funes para executar uma srie de instrues sobre valores passados. As funes tambm podem retornar valores. Depois que uma funo for definida, ela poder ser chamada de qualquer Timeline, incluindo aquela de um arquivo SWF carregado.

213

Se voc passar valores como parmetros para uma funo, esta poder executar clculos usando os valores fornecidos. Cada funo tem suas prprias caractersticas e algumas delas exigem que voc passe determinados tipos ou nmeros de valores. Se voc passar mais parmetros do que o necessrio para a funo, ela ignorar os valores extras. Se algum parmetro obrigatrio no for passado, a funo atribuir o tipo de dados undefined aos parmetros vazios. o que poder gerar erros durante a execuo. Uma funo tambm pode retornar valores (consulte Retornando valores de funes na pgina 233).
N OT A 214

Para chamar uma funo, a definio dessa funo deve estar em um quadro que j tenha sido reproduzido.

Uma funo bem escrita pode ser considerada uma caixa-preta. Se ela tiver comentrios cuidadosamente inseridos a respeito de sua entrada, sada e objetivo, um usurio da funo no precisar compreender exatamente como ela funciona internamente. A sintaxe bsica para uma funo com nome simples :
function traceMe() { trace("sua mensagem"); } traceMe();

Para obter informaes sobre a criao de funes com nome, consulte Criando funes com nome na pgina 219. A sintaxe bsica de uma funo com nome simples que criada no exemplo anterior passando um parmetro, yourMessage, :
function traceMe(yourMessage:String) { trace(yourMessage); } traceMe("Como vai voc?");

Como alternativa, se voc quiser passar diversos parmetros, voc poderia usar o seguinte cdigo:
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 informaes sobre como passar parmetros, consulte Passando parmetros para uma funo na pgina 231.

Funes e mtodos

H diversos tipos de funo que voc pode criar. Para obter mais informaes sobre criao de funes, assim como links para sees sobre criao de tipos especficos de funo, consulte Sobre tipos de mtodos e funes na pgina 215. Para ver um exemplo de comparao entre mtodos e funes, consulte Noes bsicas sobre mtodos na pgina 235.
N OT A

Para obter informaes sobre criao de cdigo usando Script Assist, consulte Criando ActionScript com o Script Assist na pgina 368, Criando um evento startDrag/stopDrag com o Script Assist na pgina 372 e o tutorial ActionScript:Use Script Assist Mode (que comea com Open the starter document on page 211).

Para obter mais informaes sobre funes e mtodos, consulte os tpicos a seguir: Sobre tipos de mtodos e funes na pgina 215

Sobre tipos de mtodos e funes


As funes pertencentes a uma classe so denominadas de mtodos dessa classe. H diversos tipos de funes que voc pode usar nos aplicativos, incluindo funes internas, com nome e definidas pelo usurio, annimas, de retorno, construtoras e literais de funo. As sees a seguir contm informaes sobre como definir essas funes. Voc tambm pode criar funes em um arquivo de classe do ActionScript. Essas funes so usadas como mtodos nos scripts. No exemplo a seguir, a classe Person exibe um mtodo construtor, mtodos de classe, mtodos de instncia e mtodos de acesso (getters e setters): Os comentrios no cdigo de exemplo mostram em que parte do cdigo esses mtodos ocorrem.
N OT A

Para obter informaes sobre criao de arquivos de classe, tais como o seguinte, consulte o Captulo 7, Classes, na pgina 239.

class Person { public static var numPeople:Number = 0; // membros de instncia private var _speed:Number; // construtor public function Person(speed:Number) { Person.numPeople++; this._speed = speed; } // mtodos estticos public static function getPeople():Number { return Person.numPeople; }

Sobre funes e mtodos

215

// mtodos de instncia public function walk(speed:Number):Void { this._speed = speed; } public function run():Void { this._speed *= 2; } public function rest():Void { this._speed = 0; } // getters/setters (mtodos de acesso) public function get speed():Number { return this._speed; } }

Para obter uma demonstrao completa de como criar mtodos como os do cdigo de exemplo anterior, consulte o Captulo 7, Classes, na pgina 239. Os mtodos usados no cdigo devem pertencer a uma classe que seja interna linguagem ActionScript. MovieClip e Math so exemplos de classes de nvel superior que podem ser usadas em um aplicativo. Quando so usados no cdigo mtodos dessas classes, isso significa que eles so funes criadas na classe interna (semelhantes ao cdigo de exemplo anterior). Opcionalmente, voc poderia usar mtodos de uma classe personalizada que tivesse criado. As funes no pertencentes a uma classe so chamadas de funes de nvel superior (s vezes chamadas de pr-definidas ou funes internas), significando que voc pode cham-las sem um construtor. Exemplos de funes que so internas ao nvel superior da linguagem ActionScript so trace() e setInterval(). Para adicionar uma chamada de funo de nvel superior ao cdigo, basta adicionar uma nica linha de cdigo no painel Script do painel Actions (Aes). Por exemplo, digite o seguinte:
trace("minha mensagem");

Quando o arquivo SWF testado com essa nica linha de cdigo, a funo de nvel superior trace() chamada e o texto exibido no painel Output (Sada). Quando desejar atribuir um mtodo a uma propriedade, lembre-se de que necessrio omitir os parnteses aps o nome do mtodo porque voc est passando uma referncia funo:
my_mc.myMethod = aFunction;

216

Funes e mtodos

Entretanto, para chamar um mtodo em seu cdigo, voc precisar incluir os parnteses aps o nome do mtodo:
my_mc.myMethod();
NO T A

Para obter mais informaes sobre funes de nvel superior, consulte Sobre funes internas e de nvel superior na pgina 217.

Tambm h vrias outras maneiras de se definir funes. Para obter mais informaes sobre cada tipo de funo, consulte as seguintes sees: Sobre funes internas e de nvel superior na pgina 217 Criando funes com nome na pgina 219 Criando funes annimas e de retorno de chamada na pgina 220 Sobre literais de funo na pgina 222 Especificando e chamando funes definidas pelo usurio na pgina 225 Sobre funes construtoras na pgina 223

Para obter informaes sobre a criao e o uso de funes e mtodos, consulte as seguintes sees relacionadas. Para obter informaes sobre o uso de funes, consulte Usando funes no Flash na pgina 227. Para obter informaes sobre o uso de mtodos, consulte Noes bsicas sobre mtodos na pgina 235.
N OT A

Para obter informaes sobre criao de cdigo usando Script Assist, consulte Criando ActionScript com o Script Assist na pgina 368, Criando um evento startDrag/stopDrag com o Script Assist na pgina 372 e o tutorial ActionScript:Use Script Assist Mode (que comea com Open the starter document on page 211).

Sobre funes internas e de nvel superior


Como j foi discutido em Sobre funes e mtodos na pgina 213, uma funo um bloco de cdigo ActionScript que pode ser reutilizado em qualquer lugar de um arquivo SWF. Se voc passar valores como parmetros para uma funo, a funo operar com esses valores. Uma funo tambm pode retornar valores. Voc pode usar funes que so internas linguagem ActionScript. Elas podem ser funes de nvel superior, como descrito em Sobre tipos de mtodos e funes na pgina 215, ou estar contidas em uma classe interna, como Math ou MovieClip, que podem ser usadas como mtodos no aplicativo.

Sobre funes e mtodos

217

No ActionScript, funes internas so utilizadas para realizar determinadas tarefas e acessar informaes. Por exemplo, para obter o nmero de milissegundos de reproduo do arquivo SWF, voc pode usar getTimer(). Tambm possvel obter o nmero da verso do Flash Player que hospeda o arquivo usando getVersion(). As funes que pertencem a um objeto so denominadas mtodos. As funes que no pertencem a um objeto so denominadas funes de nvel superior e so encontradas em subcategorias da categoria Global Functions (Funes globais) do painel Actions (Aes). Algumas funes internas exigem que se passe determinados valores. Se forem passados mais parmetros do que o exigido pela funo, os valores extras sero ignorados. Se algum parmetro obrigatrio no for passado, o tipo de dados undefined ser atribudo aos parmetros vazios, o que poder gerar erros durante a execuo.
NO T A 218

Para chamar uma funo, a definio dessa funo deve estar em um quadro que j tenha sido reproduzido.

As funes de nvel superior so fceis de usar. Para chamar uma funo, basta usar o nome da funo e passar os parmetros necessrios: (Para obter informaes sobre parmetros necessrios, consulte a entrada para a funo em ActionScript 2.0 Language Reference, Referncia 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 (Sada). Dois outros exemplos de funes de nvel superior so setInterval() e getTimer(). O prximo exemplo mostra como usar essas duas funes em conjunto. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
function myTimer():Void { trace(getTimer()); } var intervalID:Number = setInterval(myTimer, 100);

Esse cdigo cria um temporizador simples usando getTimer() e usa as funes de nvel superior setInterval() e trace() para exibir o nmero de milissegundos desde que o arquivo SWF comeou a ser reproduzido no Flash Player. Chamar uma funo de nvel superior como chamar uma funo definida pelo usurio. Para obter mais informaes, consulte Especificando e chamando funes definidas pelo usurio na pgina 225. Para obter informaes sobre cada funo, consulte a entrada correspondente em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript).

Funes e mtodos

Criando funes com nome


Uma funo com nome um tipo de funo que voc geralmente cria no cdigo ActionScript para executar todos os tipos de ao. Quando voc cria um arquivo SWF, as funes com nome so compiladas primeiro, o que significa que voc pode fazer referncia funo em qualquer parte do cdigo, contanto que a funo tenha sido definida no quadro atual ou anterior. Por exemplo, se uma funo for definida no Frame 2 de uma timeline, voc no poder acessar essa funo no Frame 1 da timeline. O formato padro das funes com nome o seguinte:
function functionName(parameters) { // bloco de funo }

Esse cdigo contm as seguintes partes:

nomeFuno o nome exclusivo da funo. Todos os nomes de funes em um documento devem ser exclusivos. paramtros contm um ou mais parmetros que so passados para a funo. Os parmetros so s vezes chamados argumentos. Para obter mais informaes sobre parmetros, consulte Passando parmetros para uma funo na pgina 231. // bloco de funo

contm todo o cdigo ActionScript executado pela funo. Essa parte contm as instrues que executam vrias aes. Voc pode colocar o cdigo que deseja executar aqui. O comentrio // bloco de funo um espao reservado onde o cdigo referente ao bloco de funo deve ser inserido.

Para usar uma funo com nome:


1. 2.

Crie um novo documento chamado namedFunc.fla. Importe um arquivo de som curto para a biblioteca selecionando File (Arquivo) > Import (Importar) > Import to Library (Importar para a biblioteca) e selecionando um arquivo de som. Clique com o boto direito do mouse no arquivo de som e selecione Linkage (Vinculao). Digite mySoundID na caixa de texto Identifier (Identificador). Selecione o Frame 1 da Timeline e adicione o seguinte cdigo ao painel Actions:
function myMessage() { trace("mySoundID completed"); } var my_sound:Sound = new Sound(); my_sound.attachSound("mySoundID"); my_sound.onSoundComplete = myMessage; my_sound.start();

3. 4. 5.

Sobre funes e mtodos

219

Nesse cdigo, voc cria uma funo com nome chamada myMessage, que pode ser usada posteriormente no script para chamar uma funo trace().
6.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF.

Use a instruo function para criar sua prpria funo no ActionScript. Lembre-se de que os parmetros so opcionais; entretanto, se no houver parmetros, ainda ser necessrio incluir os colchetes. O contedo entre as chaves ({}) chamado bloco de funo. Voc pode criar funes na timeline principal ou em arquivos externos do ActionScript, incluindo arquivos de classes. Tambm possvel criar funes construtoras em arquivos de classes usando esse formato (entretanto, o nome da funo corresponde classe). Para obter mais informaes sobre funes construtoras, consulte Criando a funo construtora na pgina 283. Consulte tambm o Captulo 7, Classes, na pgina 239 para obter exemplos e informaes sobre a criao de funes em classes.

Criando funes annimas e de retorno de chamada


Uma funo com nome uma funo a que voc se refere no script antes ou depois de definila, enquanto que uma funo annima uma funo sem nome que faz referncia a si mesma; voc faz referncia funo annima ao cri-la. Ao criar cdigo ActionScript, voc cria muitas funes annimas. As funes annimas so normalmente usadas quando se trabalha com manipuladores de eventos. Para criar uma funo annima, voc pode armazenar um literal de funo em uma varivel. Portanto, possvel fazer referncia funo posteriormente no cdigo. O prximo exemplo mostra como criar uma funo annima.
Para criar uma funo annima:
1. 2.

Crie um clipe de filme no Stage (Palco) e selecione o clipe. Abra o inspetor Properties e digite my_mc na caixa de texto Instance Name (Nome de instncia). Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
var myWidth = function () { trace(my_mc._width); }; //posteriormente no cdigo voc pode adicionar myWidth();

3.

4.

Selecione Control > Test Movie. A largura do clipe de filme exibida no painel Output (Sada).

220

Funes e mtodos

Tambm possvel criar uma funo em um objeto, como uma instncia LoadVars ou XML. Voc pode associar uma funo annima a um determinado evento para criar uma funo de retorno de chamada. Uma funo chama uma funo de retorno de chamada quando ocorre um evento especfico, como, por exemplo, aps um carregamento (onLoad()) ou uma animao (onMotionFinished()). Por exemplo, s vezes necessrio criar um cdigo ActionScript para manipular os dados carregados em um arquivo SWF a partir do servidor. Depois que os dados so carregados no arquivo, possvel acess-los nesse local. importante usar o ActionScript para verificar se os dados foram totalmente carregados. As funes de retorno de chamada podem ser usadas para enviar um sinal indicando que os dados foram carregados no documento. Na funo de retorno de chamada a seguir, na qual voc carrega um documento XML remoto, uma funo annima associada ao evento onLoad(). Voc usa XML.load() e a funo de retorno de chamada, como mostra o exemplo a seguir. Digite o seguinte cdigo no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var my_xml:XML = new XML(); my_xml.onLoad = function(success:Boolean):Void { trace(success); }; my_xml.load("http://www.helpexamples.com/crossdomain.xml");

No trecho de cdigo anterior, observe que o manipulador de eventos onLoad() usa uma funo annima para manipular o evento onLoad(). Para obter mais informaes sobre funes de retorno de chamada, consulte o Captulo 10, Manipulando eventos, na pgina 347. Voc tambm pode usar funes annimas com a funo setInterval(), conforme mostrado no cdigo a seguir, que usa setInterval() para chamar a funo annima aproximadamente a cada 1000 milissegundos (1 segundo):
setInterval(function() {trace("intervalo");}, 1000);

Voc pode usar funes com nome em vez de funes annimas. Funes com nome so geralmente mais fceis de ler e entender (exceto em algumas circunstncias, tais como funes de retorno de chamada). Tambm possvel fazer referncia antecipada a uma funo com nome; isso significa que ela referenciada antes de existir em uma Timeline. Voc no pode referenciar uma funo annima em nenhuma parte do cdigo (a menos que atribua a funo a uma varivel), da mesma maneira que pode ser feito com funes com nome. Por exemplo, suponha que voc tenha funes annimas 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 () {

Sobre funes e mtodos

221

trace(my_mc._width); };

Se voc colocar o cdigo a seguir no Frame 1, ele no referenciar a funo:


myWidth();

Da mesma maneira, o cdigo a seguir, colocado em qualquer quadro, no funciona:


myWidth(); var myWidth:Function = function () { trace(my_mc._width); };

No entanto, este cdigo funciona corretamente:


var myWidth:Function = function () { trace(my_mc._width); }; myWidth();
N OT A 222 N OT A

Voc tambm pode colocar myWidth() em qualquer quadro aps o quadro que contm a funo myWidth.

Ao definir uma funo com nome, cham-la em um script de quadro funciona, embora o cdigo equivalente com uma funo annima no funcione:
// o cdigo a seguir funciona porque voc est chamando uma funo com nome: myWidth(); function myWidth() { trace("foo"); } // o cdigo a seguir no funciona porque voc est chamando uma funo annima: myWidth(); var myWidth:Function = function () { trace("foo"); };

Para obter mais informaes, consulte Criando funes com nome na pgina 219.
Para obter informaes sobre criao de cdigo usando Script Assist, consulte Criando ActionScript com o Script Assist na pgina 368, Criando um evento startDrag/stopDrag com o Script Assist na pgina 372 e o tutorial ActionScript:Use Script Assist Mode (que comea com Open the starter document on page 211).

Sobre literais de funo


Um literal de funo uma funo sem nome declarada em uma expresso em vez de em uma instruo. Os literais so teis quando necessrio usar uma funo temporariamente ou usar uma funo no cdigo no lugar de uma expresso. Esta a sintaxe de um literal de funo:

Funes e mtodos

function (param1, param2, etc) { // instrues };

Por exemplo, o cdigo a seguir usa um literal de funo como expresso:


var yourName:String = "Ester"; setInterval(function() {trace(yourName);}, 200);
N OT A NO T A

Quando voc redefine um literal de funo, a definio da nova funo substitui a antiga.

Voc pode armazenar um literal de funo em uma varivel para acess-lo posteriormente em seu cdigo. Para fazer isso, use uma funo annima. Para obter mais informaes, consulte Criando funes annimas e de retorno de chamada na pgina 220.

Sobre funes construtoras


Um construtor de classe uma funo especial chamada automaticamente quando voc cria uma instncia de uma classe usando a palavra-chave new (por exemplo, var my_xml:XML = new XML();). A funo construtora tem o mesmo nome da classe que a contm. Por exemplo, uma classe personalizada Person criada conteria a seguinte funo construtora:
public function Person(speed:Number) { Person.numPeople++; this._speed = speed; }

Em seguida, voc poderia criar uma nova instncia usando:


var myPerson:Person = new Person(); Se nenhuma funo construtora for explicitamente declarada, ou seja, se voc no criar uma funo cujo nome corresponda ao da classe, o compilador automaticamente criar uma funo construtora vazia.

Uma classe pode conter apenas uma funo construtora; funes construtoras sobrecarregadas no so permitidas no ActionScript 2.0. Alm disso, uma funo construtora no pode ter um tipo de retorno. Para obter mais informaes sobre a criao de funes construtoras em arquivos de classe, consulte Criando a funo construtora na pgina 283.

Sobre funes e mtodos

223

Definindo funes globais e de timeline


Em Sobre funes e mtodos na pgina 213, voc explorou os diversos tipos de funes disponveis no Flash. Assim como as variveis, as funes so anexadas Timeline do clipe de filme que as define, e voc deve usar um caminho de destino para cham-las. Como ocorre com as variveis, voc pode usar o identificador _global se desejar declarar uma funo global disponvel para todas as timelines e escopos sem usar um caminho de destino. Para definir uma funo global, preceda o nome da funo com o identificador _global, como no seguinte exemplo:
_global.myFunction = function(myNum:Number):Number { return (myNum * 2) + 3; }; trace(myFunction(5)) // 13

Para obter informaes sobre _global e escopo, consulte Sobre variveis e escopo na pgina 101. Para definir uma funo de timeline, use a instruo function seguida do nome da funo, dos parmetros a serem passados para a funo e das instrues do ActionScript que indicam o que ela faz. O exemplo a seguir uma funo denominada areaOfCircle com o parmetro radius:
function areaOfCircle(radius:Number):Number { return (Math.PI * radius * radius); } trace (areaOfCircle(8));

Tambm h vrias outras maneiras de se definir funes. Para obter mais informaes sobre cada tipo de funo, consulte as seguintes sees:

Sobre funes internas e de nvel superior na pgina 217 Criando funes com nome na pgina 219 Criando funes annimas e de retorno de chamada na pgina 220 Sobre literais de funo na pgina 222 Sobre funes construtoras na pgina 223 Especificando e chamando funes definidas pelo usurio na pgina 225

224

Funes e mtodos

Para obter informaes sobre a atribuio de nomes a funes, consulte Atribuindo nomes a funes na pgina 226. Para obter um exemplo detalhado do uso de funes em um arquivo de classe externo, consulte Usando funes no Flash na pgina 227 e o Captulo 7, Classes, na pgina 239
N OT A

Para obter informaes sobre criao de cdigo usando Script Assist, consulte Criando ActionScript com o Script Assist na pgina 368, Criando um evento startDrag/stopDrag com o Script Assist na pgina 372 e o tutorial ActionScript:Use Script Assist Mode (que comea com Open the starter document on page 211).

Especificando e chamando funes definidas pelo usurio


As funes definidas pelo usurio so aquelas criadas para serem usadas em aplicativos, em contraposio s funes de classes internas que executam funes predefinidas. Voc mesmo atribui um nome s funes e adiciona instrues ao bloco de funo. As sees anteriores abordam a criao de funes com nome, sem nome e de retorno de chamada. Para obter informaes sobre a atribuio de nomes a funes, consulte Atribuindo nomes a funes na pgina 226 e, para obter informaes sobre o uso de funes, consulte Usando funes no Flash na pgina 227. Voc pode usar um caminho de destino para chamar uma funo em qualquer timeline a partir de qualquer outra timeline, inclusive daquela de um arquivo SWF carregado. Para chamar uma funo, digite o caminho de destino para o nome da funo, se for preciso, e passe os parmetros necessrios entre parnteses. H vrios tipos de sintaxe para as funes definidas pelo usurio. O cdigo a seguir usa um caminho para chamar a funo initialize(), que foi definida na timeline atual e no requer parmetro algum:
this.initialize();

O exemplo a seguir usa um caminho relativo para chamar a funo list() definida no clipe de filme functionsClip:
this._parent.functionsClip.list(6);

Para obter informaes sobre a criao de funes com nome, consulte Criando funes com nome na pgina 219. Para obter mais informaes sobre parmetros, consulte Passando parmetros para uma funo na pgina 231. Voc tambm pode definir suas prprias funes com nome. Por exemplo, a seguinte funo com nome helloWorld() definida pelo usurio:
function helloWorld() { trace("Ol mundo!"); };

Sobre funes e mtodos

225

O exemplo a seguir mostra como usar uma funo definida pelo usurio em um arquivo FLA.
Para criar e chamar uma funo simples definida pelo usurio:
1. 2.

Crie um novo documento do Flash e salve-o como udf.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
function traceHello(name:String):Void { trace("hello, " + name + "!"); } traceHello("world"); // hello, world!

O cdigo anterior cria uma funo definida pelo usurio chamada traceHello() que utiliza um argumento, name, e apresenta uma mensagem de saudao. Para chamar uma funo definida pelo usurio, voc pode chamar traceHello a partir da mesma timeline que a definio da funo e passar um nico valor de seqncia de caracteres.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.

Para obter mais informaes sobre funes com nome, consulte Criando funes com nome na pgina 219. As classes contm vrias funes definidas pelo usurio. Para obter informaes sobre a criao de funes em arquivos de classes, consulte Usando funes no Flash na pgina 227. Consulte tambm as seguintes sees do Captulo 7, Classes: Usando mtodos e propriedades de um arquivo de classe na pgina 260, Sobre propriedades (membros) e mtodos pblicos, privados e estticos na pgina 262 e Sobre membros de classe na pgina 265.

Atribuindo nomes a funes


Os nomes de funes devem iniciar em letra minscula e descrever o valor retornado por elas, se for o caso. Por exemplo, se a funo estiver retornando o nome de uma msica, voc dever atribuir funo o nome getCurrentSong(). Estabelea um padro para agrupar funes semelhantes (funes relacionadas entre si com base na funcionalidade) porque o ActionScript no permite sobrecarga. No contexto da programao orientada a objeto, a sobrecarga refere-se capacidade de fazer com que as funes se comportem de maneira diferente, dependendo dos tipos de dados que so passados para elas. Assim como as variveis, voc no pode usar caracteres especiais e o nome do mtodo no pode comear com nmero. Para obter mais informaes, consulte Convenes de atribuio de nome na pgina 769. Para obter informaes sobre a atribuio de nomes a mtodos, consulte Atribuindo nomes a mtodos na pgina 237.

226

Funes e mtodos

Usando funes no Flash


Essa seo mostra como usar funes em um aplicativo. Alguns dos exemplos de cdigo a seguir usam o ActionScript que reside no arquivo FLA, enquanto outros colocam funes em um arquivo de classe para comparao. Para obter mais informaes e exemplos sobre o uso de funes em um arquivo de classe ,consulte o Captulo 7, Classes, na pgina 239. Para obter informaes e instrues detalhadas sobre como criar funes para um arquivo de classe, consulte Exemplo: Criando classes personalizadas na pgina 278. Para reduzir o volume de trabalho necessrio, bem como o tamanho do arquivo SWF, tente reutilizar os blocos de cdigo sempre que possvel. Uma das maneiras de reutilizar o cdigo chamando uma funo vrias vezes, em vez de criar um cdigo diferente a cada vez. As funes podem ser cdigos genricos; possvel usar os mesmos blocos de cdigo para finalidades ligeiramente diferentes em um arquivo SWF. A reutilizao do cdigo permite criar aplicativos eficientes e minimiza o cdigo ActionScript que precisa ser criado, reduzindo o tempo de desenvolvimento. Voc pode criar funes em um arquivo FLA ou em um arquivo de classe; tambm pode criar o cdigo ActionScript residente em um componente baseado em cdigo. Os exemplos a seguir mostram como criar funes na timeline e em um arquivo de classe.
DICA

Empacotando o cdigo em arquivos de classes ou em componentes baseados em cdigo, possvel compartilhar, distribuir ou reutilizar facilmente blocos de cdigo. Usurios podem instalar o componente, arrast-lo para o Stage e usar o cdigo armazenado no arquivo, como, por exemplo, o fluxo de trabalho para componentes baseados em cdigo disponveis no Flash (Window - Janela> Common Libraries Bibliotecas comuns > Classes).

O exemplo a seguir mostra como criar e chamar uma funo em um arquivo FLA.
Para criar e chamar uma funo em um arquivo FLA:
1. 2. 3.

Crie um novo documento do Flash e salve-o como basicFunction.fla. Selecione Window > Actions (Aes) para abrir o painel Library (Biblioteca). Digite o seguinte cdigo ActionScript no painel Script:
function helloWorld(){ // as instrues entram aqui trace("Ol mundo!"); };

helloWorld().

Esse ActionScript define a funo (com nome e definida pelo usurio) chamada Se voc testar o arquivo SWF desta vez, nada acontecer. Por exemplo, voc no ver a instruo trace no painel Output (Sada). Para ver essa instruo, necessrio chamar a funo helloWorld().

Sobre funes e mtodos

227

4.

Digite a seguinte linha de cdigo ActionScript aps a funo:


helloWorld();

Esse cdigo chama a funo helloWorld().


5.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo FLA. O seguinte texto exibido no painel Output: Ol mundo!

Para obter informaes sobre como passar valores (parmetros) para uma funo, consulte Passando parmetros para uma funo na pgina 231. H diversas maneiras de criar funes na Timeline principal. A principal delas usar funes com nome e funes annimas. Por exemplo, voc pode usar a seguinte sintaxe ao criar funes:
function myCircle(radius:Number):Number { return (Math.PI * radius * radius); } trace(myCircle(5));

Em geral, as funes annimas so de mais difcil leitura. Compare o cdigo apresentado a seguir com o anterior.
var myCircle:Function = function(radius:Number):Number { // insira o bloco de funo aqui return (Math.PI * radius * radius); }; trace(myCircle(5));

Tambm possvel colocar funes 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 informaes sobre a criao de funes em um arquivo de classe, consulte o Captulo 7, Classes, na pgina 239.

228

Funes e mtodos

Como voc pode ver no cdigo de exemplo anterior, voc no precisa colocar funes em uma timeline. O exemplo a seguir tambm coloca funes em um arquivo de classe. Essa prtica recomendada quando voc cria aplicativos grandes com o ActionScript 2.0, pois ela permite a reutilizao do cdigo em diversos aplicativos. Para reutilizar as funes em outros aplicativos, voc pode importar a classe existente em vez de reescrever o cdigo desde o incio. Tambm possvel duplicar as funes no novo aplicativo.
Para criar funes em um arquivo de classe:
1. 2.

Crie um novo documento do ActionScript e salve-o como Utils.as. Digite o seguinte ActionScript no painel Script:
class Utils { public static function randomRange(min:Number, max:Number):Number { if (min > max) { var temp:Number = min; min = max; max = temp; } return (Math.floor(Math.random() * (max - min + 1)) + min); } public static function arrayMin(num_array:Array):Number { if (num_array.length == 0) { return Number.NaN; } num_array.sort(Array.NUMERIC | Array.DESCENDING); var min:Number = Number(num_array.pop()); return min; } public static function arrayMax(num_array:Array):Number { if (num_array.length == 0) { return undefined; } num_array.sort(Array.NUMERIC); var max:Number = Number(num_array.pop()); return max; } }

3. 4.

Selecione File (Arquivo) > Save (Salvar) para salvar o arquivo do ActionScript. Crie um novo documento do Flash e salve-o como classFunctions.fla no mesmo diretrio que Utils.as. Selecione Window > Actions (Aes) para abrir o painel Library (Biblioteca). 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]);

5. 6.

Sobre funes e mtodos

229

trace("month: " + randomMonth); trace("min: " + min); // -3 trace("max: " + max); // 34 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 informaes sobre criao de cdigo usando Script Assist, consulte Criando ActionScript com o Script Assist na pgina 368, Criando um evento startDrag/stopDrag com o Script Assist na pgina 372 e o tutorial ActionScript:Use Script Assist Mode (que comea com Open the starter document on page 211).

Usando variveis em funes


As variveis locais so ferramentas valiosas para organizar cdigos e facilitar sua compreenso. Quando uma funo usa variveis locais, ela pode ocultar suas variveis de todos os outros scripts no arquivo SWF; as variveis locais so chamadas no escopo do corpo da funo e deixam de existir quando a funo encerrada. O Flash tambm trata todos os parmetros passados para uma funo como variveis locais.
NO TA

Tambm possvel usar variveis comuns em uma funo. No entanto, se essas variveis forem modificadas, recomendvel usar comentrios de script para documentar essas modificaes.

Para usar variveis em funes:


1. 2.

Crie um novo documento do Flash e salve-o como flashvariables.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var myName:String = "Ester"; var myAge:String = "65"; var myFavSoftware:String = "Flash"; function traceMe(yourFavSoftware:String, yourName:String, yourAge:String) { trace("I'm " + yourName + ", I like " + yourFavSoftware + ", and I'm " + yourAge + "."); } traceMe(myFavSoftware, myName, myAge);

3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.

230

Funes e mtodos

Para obter mais informaes sobre parmetros, consulte Passando parmetros para uma funo na pgina 231. Para obter mais informaes sobre variveis e dados, leia o Captulo 4, Dados e tipos de dados, na pgina 75.

Passando parmetros para uma funo


Os parmetros, tambm chamados argumentos, so os elementos com base nos quais as funes executam seu cdigo. (Neste manual, os termos parmetro e argumento so equivalentes.) Voc pode passar parmetros (valores) para uma funo e, depois, usar esses parmetros para processar a funo. Use os valores contidos no bloco da funo (instrues da funo). Algumas vezes, os parmetros so obrigatrios e, outras, opcionais. Podero at mesmo existir alguns parmetros obrigatrios e alguns opcionais na mesma funo. Se voc no passar parmetros suficientes para uma funo, o Flash define os valores dos parmetros ausentes como undefined, o que pode gerar resultados inesperados no arquivo SWF. A funo a seguir chamada myFunc() utiliza o parmetro someText:
function myFunc(someText:String):Void { trace(someText); }

Aps passar o parmetro, voc poder passar um valor para a funo ao cham-la. Esse valor exibido no painel Output (Sada), da seguinte maneira:
myFunc("Isso o que mostrado");

Ao chamar a funo, voc deve sempre passar o nmero especificado de parmetros, a menos que a sua funo verifique se h valores indefinidos e defina valores padro de acordo. A funo substitui os valores passados para os parmetros na definio da funo; se algum parmetro estiver faltando, o Flash define o valor como undefined. Voc passa parmetros regularmente para funes ao criar o cdigo ActionScript. Tambm possvel passar vrios parmetros para uma funo, o que poder ser to simples como mostrado a seguir:
var birthday:Date = new Date(1901, 2, 3); trace(birthday);

Cada parmetro separado por uma vrgula. Vrias funes internas da linguagem ActionScript tm vrios parmetros. Por exemplo, o mtodo startDrag() da classe MovieClip utiliza cinco parmetros, lockCenter, left, top, right e bottom:
startDrag(lockCenter:Boolean, left:Number, top:Number, right:Number, bottom:Number):Void

Sobre funes e mtodos

231

Para passar um parmetro para uma funo:


1. 2.

Crie um novo documento do Flash e salve-o como parameters.fla. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
function traceMe(yourMessage:String):Void { trace(yourMessage); } traceMe("Como vai voc?");

As primeiras linhas de cdigo criam uma funo definida pelo usurio chamada traceMe(), que utiliza um nico parmetro, yourMessage. A ltima linha de cdigo chama a funo traceMe() e passa o valor da seqncia de caracteres Como vai voc?.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.

O prximo exemplo demonstra como passar vrios parmetros para uma funo.
Para passar vrios parmetros para uma funo:
1. 2.

Crie um novo documento do Flash e salve-o como functionTest.fla. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
function getArea(width:Number, height:Number):Number { return width * height; }

A funo getArea() utiliza dois parmetros, width e height.


3.

Digite o seguinte cdigo aps a funo:


var area:Number = getArea(10, 12); trace(area); // 120

A chamada da funo getArea() atribui os valores 10 e 12 largura e altura, respectivamente, e o valor de retorno salvo na instncia area. Em seguida, rastreie os valores salvos na instncia area.
4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF. Voc ver 120 no painel Output. Os parmetros da funo getArea() assemelham-se aos valores de uma varivel local; eles existem enquanto a funo chamada e deixam de existir quando ela encerrada.

No prximo exemplo, o ActionScript retorna o valor NaN (Not a Number, no nmero) se voc no passar parmetros suficientes para a funo addNumbers().
Para passar um nmero varivel de parmetros para uma funo:
1.

Crie um novo documento do Flash e salve-o como functionTest2.fla.

232

Funes e mtodos

2.

Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:


function addNumbers(a:Number, b:Number, c:Number):Number { return (a + b + c); } trace(addNumbers(1, 4, 6)); // 11 trace(addNumbers(1, 4)); // NaN (Not a Number), c igual a undefined trace(addNumbers(1, 4, 6, 8)); // 11

Se voc no passar parmetros suficientes para a funo addNumbers, os argumentos ausentes recebem o valor padro de undefined. Se voc passar parmetros demais, o excesso de parmetros ser ignorado.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. O Flash exibe os seguintes valores: 11, NaN, 11.

Retornando valores de funes


Use a instruo return para retornar valores de funes. A instruo return especifica o valor retornado por uma funo. A instruo return retorna o resultado de uma avaliao como o valor da funo na qual a expresso executada. A instruo return retorna os resultados imediatamente ao cdigo de chamada. Para obter mais informaes, consulte %{return statement}% em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript). As regras a seguir regem o uso da instruo return em funes:

Se um tipo de retorno diferente de Void for especificado para uma funo, ser necessrio incluir uma instruo return seguida do valor retornado na funo. Se voc especificar o tipo de retorno Void, no precisar incluir uma instruo return; no entanto, se fizer isso, no insira nenhum valor aps a instruo. Independentemente do tipo de retorno, voc poder usar uma instruo return para sair de uma funo antes de ela terminar. Se voc no especificar um tipo de retorno, a incluso de uma instruo return ser opcional.

Por exemplo, a funo a seguir retorna o quadrado do parmetro myNum e especifica que o valor retornado deve ser um tipo de dados Number:
function sqr(myNum:Number):Number { return myNum * myNum; }

Sobre funes e mtodos

233

Algumas funes executam uma srie de tarefas sem retornar um valor. O prximo exemplo retorna o valor processado. Voc capturar o valor em uma varivel, a qual poder ser usada em seu aplicativo.
Para retornar um valor e captur-lo em uma varivel:
1. 2.

Crie um novo documento do Flash e salve-o como return.fla. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
function getArea(width:Number, height:Number):Number { return width * height; }

A funo getArea() utiliza dois parmetros, width e height.


3.

Digite o seguinte cdigo aps a funo:


var area:Number = getArea(10, 12); trace(area); // 120

A chamada da funo getArea() atribui os valores 10 e 12 largura e altura, respectivamente, e o valor de retorno salvo na instncia area. Em seguida, rastreie os valores salvos na instncia area.
4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF. Voc ver 120 no painel Output. Os parmetros da funo getArea() assemelham-se aos valores de uma varivel local; eles existem enquanto a funo chamada e deixam de existir quando ela encerrada.

Sobre funes aninhadas


possvel chamar uma funo a partir de outra. Isso permite aninhar funes para que executem tarefas especficas no Flash. Por exemplo, voc pode aninhar funes na timeline para executar tarefas especficas em uma seqncia de caracteres. Digite o seguinte cdigo no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var myStr:String = "My marshmallow chicken is yellow."; trace("Original string: " + myStr); function formatText():Void { changeString("Put chicken in microwave."); trace("Changed string: " + myStr); } function changeString(newtext:String):Void { myStr = newtext; }

234

Funes e mtodos

// Chame a funo. formatText();

Selecione Control (Controlar) > Test Movie (Testar filme) para testar a funo aninhada. As funes formatText() e changeString() so aplicadas seqncia de caracteres quando a funo formatText() chamada.

Noes bsicas sobre mtodos


Mtodos so funes associadas a uma classe, a qual pode ser uma classe personalizada ou classes internas que fazem parte da linguagem ActionScript. Para obter informaes sobre comparao de mtodos e funes, consulte Sobre funes e mtodos na pgina 213 e Sobre tipos de mtodos e funes na pgina 215. Por exemplo, sortOn() um mtodo interno associado classe Array (sortOn uma funo da classe Array pr-definida interna no Flash).
Para usar o mtodo sortOn() em um arquivo FLA:
1. 2.

Crie um novo documento do Flash e salve-o como methods.fla. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var userArr:Array = new Array(); userArr.push({firstname:"George", age:39}); userArr.push({firstname:"Dan", age:43}); userArr.push({firstname:"Socks", age:2}); userArr.sortOn("firstname"); var userArrayLenth:Number = userArr.length; var i:Number; for (i = 0; i < userArrayLenth; i++) { trace(userArr[i].firstname); }

O mtodo sortOn() da classe Array usado para criar um novo objeto Array chamado userArr. O array preenchido com trs objetos que contm um nome e uma idade; em seguida, ele classificado com base no valor da propriedade firstname de cada objeto. Finalmente, voc executar uma repetio em cada item do array e exibir o nome no painel Output (Sada); depois, classificar os nomes em ordem alfabtica pela letra inicial.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF. O cdigo a seguir exibido no painel Output:
Dan George Socks

Noes bsicas sobre mtodos

235

Conforme demonstrado em Criando funes com nome na pgina 219, quando voc cria o cdigo a seguir no Frame 1 (Quadro 1) da Timeline, o cdigo ActionScript define uma funo chamada eatCabbage().
function eatCabbage() { trace("tastes bad"); } eatCabbage();

No entanto, se voc criar a funo eatCabbage() dentro de um arquivo de classe e, por exemplo, chamar eatCabbage() no arquivo FLA, ento eatCabbage() ser considerado um mtodo. Os prximos exemplos mostram como criar mtodos dentro de uma classe.
Para comparar mtodos e funes:
1.

Crie um novo arquivo do ActionScript, selecione File (Arquivo) > Save As (Salvar como) e salve-o como EatingHabits.as. Digite o seguinte cdigo ActionScript na janela Script :
class EatingHabits { public function eatCabbage():Void { trace("tastes bad"); } }

2.

3. 4.

Salve as alteraes feitas a EatingHabits.as. Crie um novo documento Flash, selecione File > Save As, atribua o nome methodTest.fla e salve o arquivo no mesmo diretrio que EatingHabits.as. Digite o seguinte cdigo ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var myHabits:EatingHabits = new EatingHabits(); myHabits.eatCabbage();

5.

Ao usar esse ActionScript, voc chamar o mtodo eatCabbage() da classe EatingHabits.


N O TA

Ao usar mtodos de uma classe interna (alm da classe personalizada criada anteriormente neste procedimento), voc usar um mtodo da Timeline.

6.

Aps a linha anterior do ActionScript, adicione o seguinte cdigo:


function eatCarrots():Void { trace("tastes good"); } eatCarrots();

Nesse cdigo, voc ir criar e chamar a funo eatCarrots().


7.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF.

236

Funes e mtodos

Atribuindo nomes a mtodos


Voc deve usar verbos para nomear mtodos e palavras com letras maisculas e minsculas para palavras concatenadas, sendo que a inicial deve estar em letra minscula. Por exemplo, voc poderia nomear mtodos das seguintes maneiras:
sing(); boogie(); singLoud(); danceFast();

Utilize verbos para a maioria dos mtodos, pois eles executam uma operao em um objeto. Assim como as variveis, voc no pode usar caracteres especiais e o nome do mtodo no pode comear com nmero. Para obter mais informaes, consulte Convenes de atribuio de nome na pgina 769.

Noes bsicas sobre mtodos

237

238

Funes e mtodos

CAPTULO 7

Classes
Este captulo mostra como usar e criar classes com o ActionScript 2.0. As classes so o componente bsico do ActionScript 2.0 e desempenham um papel mais importante do que nas verses anteriores do Macromedia Flash. Neste captulo, voc aprender sobre a importncia das classes no Flash. O captulo inicia com uma explicao da terminologia fundamental e de sua relao com as classes e a OOP (Object-Oriented Programming, Programao orientada a objeto). Em seguida, voc examina um arquivo de classe de exemplo para compreender como cada seo do arquivo funciona e como a classe est organizada. O restante do captulo mostra como criar suas prprias 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 cdigo e o objetivo geral da classe ao lerem ou usarem o cdigo. Esta seo contm exemplos de cdigos para familiariz-lo com a criao de classes no ActionScript 2.0. Ao concluir este captulo, voc dever ser capaz de criar um arquivo de classe tpico, compreender e reconhecer as classes do Flash, e ler arquivos de classes de outros usurios. Se no estiver familiarizado com os scripts do ActionScript 2.0, consulte o Captulo 5, Fundamentos da sintaxe e da linguagem, na pgina 119 e o Captulo 19, Melhores prticas e convenes de codificao para ActionScript 2.0, na pgina 767.

239

Para obter mais informaes sobre como trabalhar com classes personalizadas e internas, consulte os seguintes tpicos:
Sobre a programao 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 smbolos no Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 Compilando e exportando classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296 Noes bsicas sobre classes e escopo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 Sobre classes de nvel superior e internas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Sobre como trabalhar com classes internas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

Sobre a programao orientada a objeto e o Flash


O ActionScript 2.0 uma linguagem orientada a objeto. Assim como o ActionScript, as linguagens OOP baseiam-se no conceito de classes e instncias. Uma classe define todas as propriedades que distinguem uma srie de objetos. Por exemplo, a classe User representa um grupo de usurios que utilizam o seu aplicativo. Em seguida, voc tem um instanciamento da classe, que, para a classe User, um dos usurios individuais, ou seja, um de seus membros. O instanciamento produz uma instncia da classe User e essa instncia possui todas as propriedades da classe User. As classes tambm so consideradas como tipos de dados ou modelos que podem ser criados para definir um novo tipo de objeto. Por exemplo, se precisar do tipo de dados Lettuce em seu aplicativo, voc poder criar a classe Lettuce. Isso definir o objeto Lettuce, ao qual voc poder atribuir mtodos (wash()) e propriedades (leafy ou bugs). Para definir uma classe, use a palavra-chave class em um arquivo de script externo. Voc pode criar esse arquivo na ferramenta de criao do Flash selecionando File (Arquivo) > New (Novo) e, em seguida, selecionando ActionScript File (Arquivo do ActionScript).

240

Classes

O Flash Player 8, disponvel no Flash Basic 8 e no Flash Professional 8, adiciona vrios novos recursos linguagem ActionScript, como efeitos de filtro, upload e download de arquivos, e a API (Application Programming Interface, Interface de programao de aplicativos) externa. Como sempre, o ActionScript 2.0 fornece vrias palavras-chave e conceitos avanados e familiares de OOP (como classe, interface e pacote) encontrados em outras linguagens de programao, como Java. A linguagem de programao permite criar estruturas de programa reutilizveis, dimensionveis, resistentes e fceis de manter. Ela tambm diminui o tempo de desenvolvimento fornecendo aos usurios assistncia completa sobre codificao e informaes de depurao. Voc pode usar o ActionScript 2.0 para criar objetos e estabelecer herana, bem como para criar classes personalizadas e estender as classes de nvel superior e internas do Flash. Neste captulo, voc aprender a criar classes e a usar classes personalizadas. O Flash Basic 8 e o Flash Professional 8 contm aproximadamente 65 classes de nvel superior e internas que fornecem desde tipos de dados bsicos, ou primitivos (Array, Boolean, Date e assim por diante), a erros e eventos personalizados, alm de vrias maneiras de carregar contedo externo (XML, imagens, dados binrios brutos e muito mais). Voc tambm pode criar suas prprias classes personalizadas e integr-las aos documentos do Flash ou, at mesmo, estender as classes de nvel superior e adicionar sua prpria funcionalidade ou modificar a funcionalidade existente. Por exemplo, este captulo mostra como criar uma classe Person personalizada em Sobre membros de classe na pgina 265, que contm 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 instncia da classe usando o operador new. Para obter mais informaes sobre como trabalhar com programao orientada a objeto, consulte os seguintes tpicos:

As vantagens de usar classes na pgina 241 Sobre pacotes na pgina 242 Sobre valores e tipos de dados na pgina 245 Princpios da programao orientada a objeto na pgina 246

As vantagens de usar classes


Na OOP, uma classe define uma categoria de objeto. Uma classe descreve as propriedades (dados) e o mtodo (comportamentos) de um objeto, da mesma maneira que uma planta arquitetnica descreve as caractersticas de uma construo. As classes personalizadas so criadas em um arquivo externo do ActionScript (AS), e voc pode import-las para o seu aplicativo ao compilar o arquivo FLA.

Sobre a programao orientada a objeto e o Flash

241

As classes podem ser muito teis quando voc cria aplicativos Flash maiores, pois grande parte da complexidade do aplicativo pode ser organizada em arquivos de classes externos. Ao mover grande parte da lgica para uma classe personalizada, voc no s facilita a reutilizao do cdigo, como tambm pode ocultar alguns dos mtodos e das propriedades de outras partes do cdigo ActionScript. Isso ajuda a impedir que outras pessoas acessem informaes confidenciais ou alterem dados que no devem ser alterados. Ao usar uma classe, voc tambm pode estender as classes existentes e adicionar nova funcionalidade ou modificar a funcionalidade existente. Por exemplo, se voc criar trs classes muito semelhantes, poder criar uma classe base e, em seguida, duas outras que estendam essa classe. Essas duas classes podem adicionar outros mtodos e propriedades, de modo que voc no precise criar trs arquivos de classe que dupliquem o mesmo cdigo e a mesma lgica. Outra vantagem de usar classes a capacidade de reutilizar o cdigo. Por exemplo, se voc criar uma classe personalizada que crie uma barra de progresso personalizada usando a interface de programao de aplicativos (API) Drawing, poder salvar a classe de barra de progresso em seu caminho de classe e reutilizar o mesmo cdigo em todos os documentos do Flash importando a classe personalizada. Para obter mais informaes sobre como definir o caminho de classe, consulte Sobre a importao de arquivos de classes na pgina 254 e Sobre a definio e a modificao do caminho de classe na pgina 255.

Sobre pacotes
Ao criar classes, organize seus arquivos de classes do ActionScript em pacotes. Um pacote um diretrio que contm um ou mais arquivos de classes e reside em um diretrio determinado do caminho de classe (consulte Sobre a importao de arquivos de classes na pgina 254 e Sobre a definio e a modificao do caminho de classe na pgina 255). Um pacote pode, por sua vez, conter outros pacotes, chamados subpacotes, cada um com seus prprios arquivos de classes. Assim como as variveis, os nomes de pacotes podem ser identificadores; ou seja, o primeiro caractere pode ser uma letra, sublinhado (_) ou cifro ($) e os caracteres seguintes podem ser uma letra, nmero, sublinhado ou cifro. Existem maneiras mais usadas de atribuir nomes a pacotes, por exemplo, a recomendao de evitar usar caracteres sublinhados ou de cifro. Para obter mais informaes sobre atribuio de nome a pacotes, consulte Atribuindo nomes a pacotes na pgina 777. Os pacotes normalmente so usados para organizar classes relacionadas. Por exemplo, voc pode ter trs classes relacionadas, Square, Circle e Triangle, que so definidas em Square.as, Circle.as e Triangle.as. Suponha que voc tenha salvo os arquivos ActionScript em um diretrio 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 trs arquivos de classes esto relacionados, voc pode decidir coloc-los em um pacote (diretrio) 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 so denotados com a sintaxe de ponto (.), na qual cada ponto indica um subdiretrio. Por exemplo, se voc tivesse colocado no diretrio Shapes cada arquivo ActionScript que define uma forma, seria necessrio 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 referncia a uma classe que se encontra em um diretrio de pacote, voc poder especificar seu nome de classe totalmente qualificado ou importar o pacote usando a instruo import. Para obter mais informaes, consulte Trabalhando com pacotes na pgina 244.

Comparao de classes e pacotes


Na OOP, uma classe define uma categoria de objeto. As classes so essencialmente tipos de dados que voc poder criar se desejar definir um novo tipo de objeto em seu aplicativo. Uma classe descreve as propriedades (dados) e os comportamentos (mtodos) de um objeto, da mesma maneira que uma planta arquitetnica descreve as caractersticas de uma construo. As propriedades (variveis definidas em uma classe) e os mtodos da classe so designados coletivamente como os membros da classe. Para usar as propriedades e os mtodos definidos por uma classe, geralmente voc cria primeiro uma instncia dessa classe (exceto no caso de classes com membros estticos, consulte Sobre os membros de classe (estticos) na pgina 315, como a classe Math de nvel superior e Propriedades e mtodos estticos na pgina 264). A relao entre uma instncia e sua classe semelhante existente entre uma casa e sua planta arquitetnica.

Sobre a programao orientada a objeto e o Flash

243

No Flash, os pacotes so diretrios que contm um ou mais arquivos de classes e residem em um caminho de arquivo designado. possvel colocar arquivos de classes personalizados relacionados em um mesmo diretrio. Por exemplo, voc pode ter trs classes relacionadas chamadas SteelWidget, PlasticWidget e WoodWidget que so definidas em SteelWidget.as, PlasticWidget.as e WoodWidget.as. Essas classes seriam organizadas no pacote Widget. Para obter mais informaes sobre pacotes, consulte Trabalhando com pacotes na pgina 244 e Criando e empacotando arquivos de classes na pgina 281.

Trabalhando com pacotes


Pacotes so diretrios que contm um ou mais arquivos de classes e residem em um diretrio especfico do caminho da classe. Por exemplo, o pacote flash.filters um diretrio no disco rgido que contm diversos arquivos de classe para cada tipo de filtro (tais como BevelFilter, BlurFilter, DropShadowFilter e assim por diante) no Flash 8.
N OT A 244

Para usar a instruo import, necessrio especificar ActionScript 2.0 e Flash Player 6 ou uma verso posterior na guia Flash da caixa de dilogo Publish Settings (Configuraes de publicao) do arquivo FLA.

A instruo 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 ento fazer referncia a ela pelo nome da classe (BlurFilter). O cdigo ActionScript a seguir demonstra as diferenas entre usar a instruo import e usar nomes de classe totalmente qualificados. Se voc no importar a classe BlurFilter, o seu cdigo precisa usar o nome de classe totalmente qualificado (nome do pacote seguido do nome da classe) a fim de usar o filtro:
// sem importao var myBlur:flash.filters.BlurFilter = new flash.filters.BlurFilter(10, 10, 3);

O mesmo cdigo, escrito com uma instruo 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 digitao e reduzir a possibilidade de erros:
// com importao import flash.filters.BlurFilter; var myBlur:BlurFilter = new BlurFilter(10, 10, 3);

Se voc estiver importando diversas classes em um pacote (tais como BlurFilter, DropShadowFilter e GlowFilter) voc pode usar um dos mtodos de importar cada classe. O primeiro mtodo de importao de diversas classes importar cada classe usando uma instruo import separada, conforme observado no trecho a seguir:

Classes

import flash.filters.BlurFilter; import flash.filters.DropShadowFilter; import flash.filters.GlowFilter;

Usando instrues import individuais para cada classe em um pacote pode tornar-se muito desgastante e pode levar a erros de digitao. O segundo mtodo de importao de classes em um pacote usar um caractere curinga que importa todas as classes dentro de um determinado nvel de um pacote. O ActionScript a seguir mostra um exemplo de importao com caractere curinga:
import flash.filters.*; // importa cada classe dentro de um pacote flash.filters

A instruo 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 referncia 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 instruo import ao outro quadro que importa as classes naquele pacote. Ao usar instrues import, tambm importante observar que classes so importadas somente para o nvel especificado. Por exemplo, se voc importou todas as classes no pacote mx.transitions, somente as classes no diretrio /transitions/ sero importadas, e no todas as classes dentro dos subdiretrios (tais como as classes no pacote mx.transitions.easing).
DICA

Se voc importar uma classe, mas no a usar no script, a classe no 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 includo em um arquivo SWF somente se a classe for realmente usada.

Sobre valores e tipos de dados


Dados, valores e tipos so conceitos importantes quando voc comea a criar classes e a uslas. Voc aprendeu sobre dados e tipos em Captulo 4, Dados e tipos de dados, na pgina 75. Ao trabalhar com classes, lembre-se de que os tipos de dados descrevem o tipo de informao que uma varivel ou um elemento do ActionScript pode conter, como Boolean, Number e String. Sobre tipos de dados na pgina 76Para obter mais informaes, consulte . As expresses tm valores, enquanto os valores e as propriedades tm tipos. Os valores que podem ser definidos, bem como fornecidos e obtidos de uma propriedade de uma classe, devem ser compatveis com essa propriedade. A compatibilidade indica que o tipo de um valor compatvel com o tipo em uso, como no seguinte exemplo:
var myNum:Number = 10;

Sobre a programao orientada a objeto e o Flash

245

Para obter mais informaes sobre como atribuir tipos de dados estritos, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85.

Princpios da programao orientada a objeto


Nas sees a seguir, voc examinar a terminologia usada neste captulo antes de comear a criar o cdigo ActionScript. Esta breve introduo aos princpios envolvidos no desenvolvimento de programas orientados a objeto o ajudar a acompanhar as sees e os exemplos apresentados neste captulo e no restante deste manual. Esses princpios so descritos mais profundamente no restante deste captulo, junto com os detalhes sobre como eles so implementados no Flash 8. As sees a seguir usam a analogia de um gato para demonstrar a semelhana entre gatos e os conceitos de programao orientada a objeto (OOP).

Objetos
Considere um objeto do mundo real, como, por exemplo, um gato. Pode-se dizer que os gatos tm propriedades (ou estados) como nome, idade e cor; eles tambm tm comportamentos, como dormir, comer e ronronar. Na OOP, os objetos tambm tm propriedades e comportamentos. Com as tcnicas orientadas a objeto, possvel modelar um objeto do mundo real (como um gato) ou um objeto mais abstrato (como um processo qumico).
N OT A 246

A palavra comportamentos usada genericamente aqui e no se refere ao painel Behaviors (Comportamentos) do ambiente de criao do Flash.

Para obter mais informaes sobre objetos, consulte Tipo de dados Object na pgina 83.

Instncias e membros de classe


Continuando com a analogia do mundo real, considere que h gatos de cores, idades e nomes diferentes, com maneiras diferentes de comer e ronronar. Porm, apesar de suas diferenas individuais, todos os gatos so membros da mesma categoria, ou em termos da OOP, da mesma classe: a classe de gatos. Na terminologia da OOP, cada gato considerado como uma instncia da classe Cat. Da mesma maneira, na OOP, uma classe define a estrutura de um tipo de objeto. As caractersticas e os comportamentos pertencentes a uma classe so tratadas, em conjunto, como membros dessa classe. As caractersticas (nome, idade e cor, no exemplo do gato) so chamadas propriedades da classe e so representadas como variveis; os comportamentos (brincar, dormir) so chamados mtodos da classe e so representados como funes.

Classes

Para obter mais informaes sobre instncias e membros de classe, consulte Sobre membros de classe na pgina 265 e Usando membros de classe na pgina 269.

Herana
Uma das principais vantagens da OOP a capacidade de criar subclasses de (ou estender) uma classe; a subclasse herda todas as propriedades e mtodos da classe. A subclasse normalmente define mtodos e propriedades adicionais ou sobrescreve mtodos ou propriedades definidas na superclasse. As subclasses tambm substituem (fornecem suas prprias definies para) os mtodos definidos em uma superclasse. Uma das principais vantagens de usar uma estrutura de superclasse/subclasse que mais fcil reutilizar cdigo semelhante entre diversas classes. Por exemplo, voc poderia criar uma superclasse chamada Animal, que contm as caractersticas e os comportamentos comuns de todos os animais. Em seguida, voc poderia criar vrias subclasses que herdam as caractersticas da superclasse Animal e adicionar caractersticas especficas a esse tipo de animal. Voc poderia criar uma classe Cat que herda caractersticas de outra classe. Por exemplo, voc pode criar uma classe Mamifero, que define certas propriedades e comportamentos comuns a todos os mamferos. 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 cdigo. Em vez de recriar todos os cdigos comuns s duas classes, voc pode simplesmente estender uma classe existente.
DICA

Em um aplicativo complexo, determinar como estruturar a hierarquia das classes uma parte importante do projeto. Certifique-se de determinar essa hierarquia antes iniciar a programao.

Para obter mais informaes sobre herana e subclasses, consulte o Captulo 8, Herana, na pgina 319.

Interfaces
Na OOP, as interfaces podem ser descritas como modelos de definies de classes, e as classes que implementam interfaces precisam implementar esse modelo de mtodos. Usando a analogia do gato, uma interface semelhante planta arquitetnica de um gato: a planta informa de que partes voc precisa, mas no necessariamente como essas partes so montadas, ou como as partes funcionam.

Sobre a programao orientada a objeto e o Flash

247

Voc pode usar interfaces para adicionar estrutura e facilitar a manuteno dos aplicativos. Como o ActionScript 2.0 oferece suporte somente extenso de uma nica superclasse, as interfaces podem ser usadas como uma forma de herana mltipla limitada. Uma interface tambm pode ser considerada como um contrato de programao que pode ser usado para impor os relacionamentos entre classes no relacionadas de outra maneira. Por exemplo, suponha que voc esteja trabalhando com uma equipe de programadores, cada um responsvel por uma parte diferente (classe) do mesmo aplicativo. Ao projetar o aplicativo, voc estabelece um conjunto de mtodos que as diferentes classes usam para se comunicarem. Portanto, voc cria uma interface que declara esses mtodos, seus parmetros e tipos de retorno. Qualquer classe que implemente essa interface deve fornecer definies para esses mtodos; caso contrrio, ocorrer um erro do compilador. Para obter mais informaes sobre herana, consulte Captulo 8, Herana, na pgina 319. Para obter mais informaes sobre interfaces, consulte o Captulo 9, Interfaces, na pgina 331.

Encapsulamento
Em um projeto orientado a objeto bem elaborado, os objetos so considerados como caixaspretas que contm ou encapsulam funcionalidade. O programador deve ser capaz de interagir com um objeto conhecendo somente suas propriedades, mtodos e eventos (sua interface de programao), sem conhecer os detalhes de sua implementao. Essa abordagem permite que os programadores utilizem nveis mais elevados de abstrao e fornece uma estrutura de organizao para a criao 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 implementao permaneam privados e invisveis para o cdigo externo aos objetos. O cdigo externo ao objeto forado a interagir com a interface de programao do objeto em vez de com os detalhes da implementao (o que pode ser oculto em mtodos e propriedades privados. Essa abordagem oferece algumas vantagens importantes; por exemplo, ela permite que o criador do objeto altere a sua implementao sem a necessidade de alterar o cdigo externo ao objeto, ou seja, desde que a interface de programao no seja alterada. Para obter mais informaes sobre encapsulamento, consulte Sobre o uso de encapsulamento na pgina 276.

248

Classes

Polimorfismo
A OOP permite expressar as diferenas entre classes individuais usando uma tcnica chamada polimorfismo, pela qual as classes podem substituir os mtodos de suas superclasses e definir implementaes especializadas desses mtodos. No Flash, as subclasses podem definir implementaes especializadas de mtodos herdados da superclasse, mas no podem acessar a implementao da superclasse como em outras linguagens de programao. Por exemplo, voc pode criar inicialmente uma classe chamada Mammal com os mtodos play() e sleep() e, em seguida, criar as subclasses Cat, Monkey e Dog para estender essa classe. As subclasses substituem o mtodo play() da classe Mammal para refletir os hbitos desses tipos especficos de animais. Monkey implementa o mtodo play() para pendurar-se nos galhos de rvores; Cat implementa o mtodo play() para avanar em um novelo de l; Dog implementa o mtodo play() para apanhar uma bola. Como a funcionalidade sleep() semelhante entre os animais, voc usaria a implementao de superclasse. Para obter mais informaes sobre polimorfismo, consulte o Captulo 8, Herana, na pgina 319 e Usando o polimorfismo em um aplicativo na pgina 327.

Criando arquivos de classes personalizados


O exemplo a seguir examina as partes de um arquivo de classe. Voc aprender a criar uma classe e a modific-la para que possa us-la de vrias maneiras com o Flash. Voc tambm aprender sobre as partes de uma classe, como import-las e como trabalhar com arquivos de classes personalizados no Flash. Em primeiro lugar, voc examinar uma classe muito simples. O exemplo a seguir mostra a organizao de uma classe simples chamada UserClass. Para definir uma classe, use a palavra-chave class em um arquivo de script externo, e no em um script criado no painel Actions (Aes). A estrutura de classes tambm relevante para os arquivos de interface. Essa estrutura ilustrada a seguir e, depois da ilustrao, voc criar uma classe.

O arquivo de classe inicia com comentrios de documentao que incluem uma descrio geral do cdigo, bem como informaes sobre autor e verso. Adicione suas instrues import (se aplicvel). Crie uma instruo de pacote, uma declarao de classe ou uma declarao de interface, da seguinte maneira:
class UserClass {...}

Criando arquivos de classes personalizados

249

Inclua os comentrios necessrios sobre a implementao de classe ou interface. Nesses comentrios, adicione informaes pertinentes toda classe ou interface. Adicione todas as variveis estticas. Escreva as variveis de classe pblica primeiro, seguidas de variveis de classe privada. Adicione variveis de instncia. Escreva primeiro as variveis membro pblicas, seguidas das variveis membro privadas. Adicione a instruo construtora, como a do exemplo abaixo:
public function UserClass(username:String, password:String) {...}

Escreva os mtodos. Agrupe-os por funcionalidade, e no por acessibilidade ou escopo. A organizao dos mtodos dessa maneira aumenta a legibilidade e a clareza do cdigo. Escreva os mtodos getter/setter no arquivo de classe.

O exemplo a seguir examina uma classe simples do ActionScript chamada User.


Para criar arquivos de classes:
1.

Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript) e, em seguida, clique em OK. Selecione File > Save As (Salvar como) e atribua o nome User.as ao novo arquivo. Digite o seguinte cdigo ActionScript na janela Script:
/** Classe de usurio author: John Doe version: 0.8 modified: 08/21/2005 copyright: Macromedia, Inc. Esse cdigo define uma classe User personalizada que permite criar novos usurios e especificar as informaes de login dos usurios. */ class User { // variveis de instncia privadas private var __username:String; private var __password:String; // instruo construtora public function User(p_username:String, p_password:String) { this.__username = p_username; this.__password = p_password; } public function get username():String { return this.__username; }

2. 3.

250

Classes

public function set username(value:String):Void { this.__username = value; } public function get password():String { return this.__password; } public function set password(value:String):Void { this.__password = value; } } 4.

Salve as alteraes no arquivo de classe. O trecho de cdigo anterior inicia com um comentrio de documentao padronizado, que especifica o nome da classe, o autor, a verso, a data da ltima modificao, informaes de copyright e uma breve descrio do que a classe faz. A instruo construtora da classe User utiliza dois parmetros: p_username e p_password, que so copiados para as variveis de instncia privadas __username e __password da classe. O restante do cdigo da classe define as propriedades getter e setter das variveis de instncia privadas. Para criar uma propriedade somente leitura, voc definiria uma funo getter, mas no uma funo setter. Por exemplo, para garantir que um nome de usurio no seja alterado aps ser definido, voc excluiria a funo setter username do arquivo de classe User.

5. 6.

Selecione File > New e, em seguida, selecione Flash Document (Documento Flash). Selecione File > Save As e atribua o nome user_test.fla ao arquivo. Salve o arquivo no mesmo diretrio que User.as. Digite o seguinte ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
import User; var user1:User = new User("un1", "pw1"); trace("Before:"); trace("\t username = " + user1.username); trace("\t password = " + user1.password); user1.username = "1nu"; user1.password = "1wp"; trace("After:"); trace("\t username = " + user1.username); trace("\t password = " + user1.password);

7.

// un1 // pw1

// 1nu // 1wp

Como a classe User criada anteriormente muito bsica, o ActionScript contido no documento do Flash tambm muito simples. A primeira linha do cdigo importa a classe User personalizada para o documento do Flash. A importao dessa classe permite us-la como um tipo de dados personalizado.

Criando arquivos de classes personalizados

251

Uma nica instncia da classe User definida e atribuda a uma varivel chamada user1. Voc atribui um valor ao objeto User user1 e define username como un1 e password como pw1. As duas instrues trace apresentadas a seguir exibem o valor atual de user1.username e user1.password utilizando as funes getter da classe User, que retornam seqncias de caracteres. A duas prximas linhas usam as funes setter da classe User a fim de definir novos valores para as variveis username e password. Finalmente, voc exibe os valores de username e password no painel Output (Sada). As instrues trace exibem os valores modificados definidos com as funes setter.
8.

Salve o arquivo FLA e selecione Control (Controlar) > Test Movie (Testar filme) para testar os arquivos. Voc ver os resultados das instrues trace no painel Output. Nos prximos exemplos, voc usar esses arquivos em um aplicativo.

Um arquivo de exemplo no disco rgido demonstra como criar um menu dinmico com dados XML e um arquivo de classe personalizado. O exemplo chama o construtor XmlMenu() do ActionScript e passa dois parmetros: o caminho para o arquivo de menu XML e uma referncia 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 rgido.

No Windows, navegue at unidade de inicializao\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.

Sobre como trabalhar com classes personalizadas em um aplicativo


Em Criando arquivos de classes personalizados na pgina 249, voc criou um arquivo de classe personalizado. Nas sees a seguir, voc usar esse arquivo em um aplicativo. O fluxo de trabalho para a criao de classes envolve, no mnimo, as seguintes etapas:
1.

Definir uma classe em um arquivo de classe externo do ActionScript. Para obter informaes sobre como definir e criar um arquivo de classe, consulte Criando arquivos de classes personalizados na pgina 249.

252

Classes

2.

Salvar o arquivo de classe no diretrio de caminho de classe designado (o local em que o Flash procura as classes) ou no mesmo diretrio que o arquivo FLA do aplicativo. Para obter mais informaes sobre como definir o caminho de classe, consulte Sobre a definio e a modificao do caminho de classe na pgina 255. Para ver uma comparao e obter mais informaes sobre a importao de arquivos de classes, consulte Sobre a importao de arquivos de classes na pgina 254. Criar uma instncia 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 informaes sobre a criao de instncias de uma classe, consulte Criando instncias de classes em um exemplo na pgina 294.

3.

As sees subseqentes deste captulo contm exemplos de cdigo que voc poder usar para se familiarizar com a criao de classes no ActionScript 2.0. Se no estiver familiarizado com o ActionScript 2.0, leia o Captulo 4, Dados e tipos de dados, na pgina 75 e o Captulo 5, Fundamentos da sintaxe e da linguagem, na pgina 119 Para obter mais informaes sobre como trabalhar com classes personalizadas, consulte os seguintes tpicos:

Sobre a importao de arquivos de classes na pgina 254 Usando um arquivo de classe no Flash na pgina 259 Usando mtodos e propriedades de um arquivo de classe na pgina 260 Sobre membros de classe na pgina 265 Sobre os mtodos getter e setter na pgina 270 Como o compilador resolve as referncias de classes na pgina 258 Sobre classes dinmicas na pgina 273 Sobre o uso de encapsulamento na pgina 276 Sobre o uso da palavra-chave this em classes na pgina 277

Um arquivo de exemplo no disco rgido demonstra como criar um menu dinmico com dados XML e um arquivo de classe personalizado. O exemplo chama o construtor XmlMenu() do ActionScript e passa dois parmetros: o caminho para o arquivo de menu XML e uma referncia 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 rgido.

No Windows, navegue at unidade de inicializao\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.

Sobre como trabalhar com classes personalizadas em um aplicativo

253

Sobre a importao de arquivos de classes


Para usar uma classe ou uma interface definida, o Flash deve localizar os arquivos externos do ActionScript que contm a definio da classe ou da interface de modo que possa importar o arquivo. A lista de diretrios na qual o Flash procura as definies de classes, interfaces, funes e variveis denominada caminho de classe. O Flash possui duas configuraes de caminho de classe, um caminho de classe global e um em nvel de documento:

Caminho de classe global

um caminho de classe compartilhado por todos os documentos do Flash e Voc deve configur-lo na caixa de dilogo Preferences (Preferncias) (Edit (Editar) > Preferences (Windows) ou Flash > Preferences (Macintosh), clique em ActionScript na lista Category (Categoria) e, em seguida, clique em ActionScript 2.0 Settings (Configuraes do ActionScript 2.0)).

Caminho de classe em nvel de documento um caminho de classe definido especificamente para um nico documento do Flash, Ele configurado na caixa de dilogo Publish Settings (Configuraes de publicao) (File > Publish Settings, selecione a guia Flash e, em seguida, clique no boto Settings, Configuraes).

As seguintes regras se aplicam importao de arquivos de classes:

As instrues import podem existir nos seguintes locais:


Qualquer local antes da definio de classe nos arquivos de classe Qualquer local nos scripts de quadro ou de objetos Qualquer local nos arquivos ActionScript que voc incluir em um aplicativo (usando a instruo #include).

Para importar definies empacotadas individuais, use esta sintaxe:


import flash.display.BitmapData;

Voc pode importar pacotes inteiros com a sintaxe de caracteres curingas:


import flash.display.*;

Voc tambm pode incluir cdigo ActionScript em um arquivo de documento do Flash (FLA) usando uma instruo include. As seguintes regras se aplicam instruo include:

Essencialmente, as instrues include copiam e colam o contedo no arquivo includo do ActionScript. As instrues include dentro dos arquivos de classe do ActionScript so relativas ao subdiretrio que contm o arquivo.

254

Classes

Em um arquivo do Flash (FLA), as instrues include s podem inserir cdigo vlido em arquivos FLA, e a mesma regra se aplica aos outros locais em que as instrues include podem residir. Por exemplo, se uma definio de classe contiver uma instruo include, somente definies de propriedades e de mtodos podero existir no arquivo includo do ActionScript:
// Foo.as class Foo { #include "FooDef.as" } // FooDef.as: var fooProp; function fooMethod() {} trace("Foo"); // Essa instruo no permitida na definio de classe.

Para obter mais informaes sobre a instruo include, consulte %{#include directive}% em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript). Para obter mais informaes sobre caminhos de classes, consulte Sobre a definio e a modificao do caminho de classe na pgina 255.

Sobre a definio e a modificao do caminho de classe


Para usar uma classe ou uma interface definida, o Flash deve localizar os arquivos ActionScript externos que contm a definio da classe ou da interface. A lista de diretrios na qual o Flash procura as definies de classes e interfaces denominada caminho de classe. Depois de criar um arquivo de classe do ActionScript, voc precisa salvar o arquivo em um dos diretrios especificados no caminho de classe ou em um subdiretrio desse caminho. (Voc pode modificar o caminho de classe para incluir o caminho de diretrio desejado). Caso contrrio, o Flash no poder resolver, ou seja, localizar a classe ou a interface especificada no script. Os subdiretrios criados em um diretrio do caminho de classe chamam-se pacotes e permitem a voc organizar as suas classes. (Para obter mais informaes sobre pacotes, consulte Criando e empacotando arquivos de classes na pgina 281.) O Flash tem duas configuraes de caminho de classe: um caminho de classe global e um caminho de classe em nvel de documento. O caminho de classe global compartilhado por todos os documentos do Flash. O caminho de classe em nvel de documento definido especificamente para um nico documento do Flash.

Sobre como trabalhar com classes personalizadas em um aplicativo

255

O caminho de classe global aplica-se aos arquivos ActionScript e FLA externos, e definido na caixa de dilogo Preferences (Preferncias) (Windows: Edit (Editar) > Preferences (Windows) ou Flash > Preferences (Macintosh), selecione ActionScript da lista Category (Categoria) e, em seguida, clique em ActionScript 2.0 Settings (Configuraes do ActionScript)). Voc pode definir o caminho de classe em nvel de documento na caixa de dilogo Publish Settings (Configuraes de publicao) do documento do Flash (File (Arquivo) > Publish Settings, selecione a guia Flash e, em seguida, clique no boto Settings (Configuraes).
N OT A

Quando voc clica no boto 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 no so associados a arquivos FLA no modo de edio e no possuem o seu prprio caminho de classe.

Usando um caminho de classe global O caminho de classe global compartilhado por todos os documentos do Flash. Voc pode modificar o caminho de classe global usando a caixa de dilogo Preferences. Para modificar a configurao do caminho de classe em nvel de documento, use a caixa de dilogo Publish Settings para o arquivo FLA. Nos dois casos, voc pode adicionar caminhos de diretrio absolutos (por exemplo, C:/my_classes) e caminhos de diretrio relativos (por exemplo, ../my_classes ou .). A ordem dos diretrios na caixa de dilogo reflete a ordem em que eles so pesquisados. Por padro, o caminho de classe global contm um caminho absoluto e outro relativo. O caminho absoluto denotado por $(LocalData)/Classes na caixa de dilogo Preferences. O local do caminho absoluto mostrado aqui: Windows: Hard Disk\Documents and Settings\user\Local Settings\Application Data\Macromedia\Flash 8\idioma\Configuration\Classes. Macintosh: Hard Disk/Users/usurio/Library/Application Support/Macromedia/Flash 8/ idioma/Configuration/Classes.
NO T A 256

No 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, restabelea-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 diretrio de documentos atual. Saiba que os caminhos de classe relativos podem apontar para diretrios 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.

Classes

Para modificar o caminho de classe global:


1.

Selecione Edit (Editar) > Preferences (Preferncias) (Windows) ou Flash > Preferences (Macintosh) para abrir a caixa de dilogo Preferences. Clique no ActionScript na coluna esquerda e, em seguida, clique no boto ActionScript 2.0 Settings (Configuraes do ActionScript 2.0). Clique no boto Browse to Path (Navegar at caminho) para navegar at o diretrio que deseja adicionar. Navegue at o caminho desejado e clique em OK.

2.

3.

4.

Para excluir um diretrio do caminho de classe:


1. 2.

Selecione o caminho na lista Classpath (Caminho de classe). Clique no boto Remove from Path (Remover do caminho).
NO T A

No 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, restabelea-o adicionando $(LocalData)/Classes como um novo caminho de classe.

Para obter informaes sobre a importao de pacotes, consulte Trabalhando com pacotes na pgina 244. Usando um caminho de classe em nvel de documento O caminho de classe em nvel de documento se aplica somente a arquivos FLA. Para defini-lo, use a caixa de dilogo Publish Settings (Configuraes de publicao) referente a um arquivo FLA, em File (Arquivo) > Publish Settings, clique na guia Flash e, em seguida, clique em ActionScript 2.0 Settings (Configuraes do ActionScript 2.0). O padro que o caminho de classe em nvel de documento fique vazio. Quando voc cria e salva um arquivo FLA em um diretrio, esse diretrio torna-se um diretrio de caminho de classe designado. Ao criar classes, possvel que, algumas vezes, voc deseje armazen-las em um diretrio que ser adicionado posteriormente lista de diretrios de caminho de classe global nas seguintes situaes:

Se voc tiver um conjunto de classes utilitrias que sejam usadas em todos os seus projetos Se voc desejar verificar a sintaxe do seu cdigo (clique no boto Check Syntax (Verificar sintaxe)) dentro do arquivo ActionScript externo

A criao de um diretrio evita a perda de classes personalizadas se voc desinstalar e reinstalar o Flash, especialmente se o diretrio de caminho de classe global padro for excludo e substitudo, porque todas as classes armazenadas nesse diretrio seriam perdidas.

Sobre como trabalhar com classes personalizadas em um aplicativo

257

Por exemplo, voc pode criar para suas classes personalizadas um diretrio como o apresentado a seguir:

Windows: Hard Disk\Documents and Settings\usurio\custom classes. Macintosh: Hard Disk/Users/usurio/custom classes.

Em seguida, voc adicionaria esse caminho lista de caminhos de classe global (consulte Usando um caminho de classe global na pgina 256). Quando o Flash tenta resolver as referncias de classes em um script FLA, ele pesquisa primeiro o caminho de classe em nvel de documento especificado para esse arquivo FLA. Se ele no encontrar a classe nesse caminho ou se o caminho estiver vazio, ele pesquisar o caminho de classe global. Se ele no encontrar a classe nesse caminho, ocorrer um erro do compilador.
Para modificar o caminho de classe no nvel do documento:
1. 2. 3.

Selecione File > Publish Settings para abrir a caixa de dilogo Publish Settings. Clique na guia Flash. Clique no boto Settings perto do menu pop-up ActionScript Version (Verso do ActionScript). Voc pode digitar manualmente um caminho de arquivo ou clicar no boto Browse to Path (Navegar at caminho) para navegar at o diretrio que deseja adicionar ao caminho de classe.
NO T A N OT A

4.

Para editar um diretrio de caminho de classe existente, selecione o caminho na lista Classpath (Caminho de classe), clique no boto Browse to Path, navegue at o diretrio que deseja adicionar e clique em OK. Para excluir um diretrio do caminho de classe, selecione o caminho na lista Classpath e clique no boto Remove Selected Path (-) (Remover o caminho selecionado).

Para obter mais informaes sobre pacotes, consulte Sobre pacotes na pgina 242.

Como o compilador resolve as referncias de classes


Quando o Flash tenta resolver as referncias de classes em um script FLA, ele pesquisa primeiro o caminho de classe em nvel de documento especificado para esse arquivo FLA. Se a classe no for encontrada nesse caminho ou se o caminho estiver vazio, o Flash pesquisar o caminho de classe global. Se a classe no for encontrada nesse caminho, ocorrer um erro do compilador.

258

Classes

No Flash Professional, quando voc clica no boto Check Syntax (Verificar sintaxe) ao editar um arquivo ActionScript, o compilador examina somente o caminho de classe global; os arquivos ActionScript no so associados a arquivos FLA no modo de edio nem possuem o seu prprio caminho de classe.

Usando um arquivo de classe no Flash


Para criar uma instncia de uma classe do ActionScript, use o operador new para chamar a funo construtora da classe. A funo construtora sempre tem o mesmo nome da classe e retorna uma instncia da classe, que voc normalmente atribui a uma varivel. Por exemplo, se estivesse usando a classe User criada em Criando arquivos de classes personalizados na pgina 249, voc escreveria o seguinte cdigo para criar um objeto User:
var firstUser:User = new User();
N OT A

Em alguns casos, no necessrio criar uma instncia de uma classe para usar suas propriedades e mtodos. Para obter mais informaes sobre membros (estticos) de classes, consulte Sobre os membros de classe (estticos) na pgina 315 e Propriedades e mtodos estticos na pgina 264.

Use o operador ponto (.) para acessar o valor de uma propriedade em uma instncia. Digite o nome da instncia esquerda do ponto e o nome da propriedade direita. Por exemplo, na instruo a seguir, firstUser a instncia e username a propriedade:
firstUser.username

Voc tambm pode usar em um documento do Flash as classes de nvel superior ou internas da linguagem ActionScript. Por exemplo, o cdigo 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 informaes sobre o uso de classes personalizadas no Flash, consulte o Exemplo: Usando arquivos de classes personalizados no Flash na pgina 291. Para obter informaes sobre a funo construtora, consulte Criando a funo construtora na pgina 283.

Sobre como trabalhar com classes personalizadas em um aplicativo

259

Usando mtodos e propriedades de um arquivo de classe


Na OOP, os membros (propriedades ou mtodos) de uma classe podem ser membros de instncia ou membros de classe. Os membros de instncia so criados para cada instncia da classe; eles so definidos para o prottipo da classe quando so inicializados na definio de classe. Os membros de classe, por outro lado, so criados uma vez por classe. (Os membros da classe tambm so conhecidos como membros estticos.) Propriedades so atributos que definem um objeto. Por exemplo, length uma propriedade de todos os arrays que especifica o nmero de elementos do array. Mtodos so funes associadas a uma classe. Para obter mais informaes sobre funes e mtodos, consulte o Captulo 6, Funes e mtodos, na pgina 213. O exemplo a seguir mostra como criar um mtodo em um arquivo de classe:
class Sample { public function myMethod():Void { trace("myMethod"); } }

Depois, voc poderia chamar esse mtodo em seu documento. Para chamar um mtodo de instncia ou acessar uma propriedade de instncia, voc faz referncia a uma instncia da classe. No exemplo a seguir, picture01, uma instncia da classe personalizada Picture (disponvel no exerccio a seguir), chama o mtodo showInfo():
var img1:Picture = new Picture("http://www.helpexamples.com/flash/images/ image1.jpg"); // Chame o mtodo showInfo(). img1.showInfo();

O prximo exemplo demonstra como criar uma classe personalizada Picture para armazenar vrias informaes sobre uma foto.
Para usar as classes Picture e PictureClass em um arquivo FLA:
1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione ActionScript File (Arquivo ActionScript). Salve o documento como Picture.as e, em seguida, clique em OK. Crie sua classe Picture personalizada nesse documento. Digite o seguinte cdigo ActionScript na janela Script:
/** Picture class author: John Doe version: 0.53 modified: 6/24/2005 copyright: Macromedia, Inc.

2.

260

Classes

A classe Picture usada como um recipiente para uma imagem e seu URL. */ class Picture { private var __infoObj:Object; public function Picture(src:String) { this.__infoObj = new Object(); this.__infoObj.src = src; } public function showInfo():Void { trace(this.toString()); } private function toString():String { return "[Picture src=" + this.__infoObj.src + "]"; } public function get src():String { return this.__infoObj.src; } public function set src(value:String):Void { this.__infoObj.src = value; } } 3. 4.

Salve o arquivo do ActionScript. Selecione File > New Flash Document (Documento do Flash) para criar um arquivo FLA. Salve-o como picture_test.fla no mesmo diretrio em que salvou o arquivo de classe Picture. Digite o seguinte cdigo ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var picture1:Picture = new Picture("http://www.helpexamples.com/flash/ images/image1.jpg"); picture1.showInfo(); this.createEmptyMovieClip("img_mc", 9); img_mc.loadMovie(picture1.src);

5.

6. 7.

Salve o documento do Flash. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. O seguinte texto exibido no painel Output:
[Picture src=http://www.helpexamples.com/flash/images/image1.jpg]

Sobre como trabalhar com classes personalizadas em um aplicativo

261

Um arquivo de exemplo no disco rgido demonstra como criar um menu dinmico com dados XML e um arquivo de classe personalizado. O exemplo chama o construtor XmlMenu() do ActionScript e passa dois parmetros: o caminho para o arquivo de menu XML e uma referncia 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 rgido.

No Windows, navegue at unidade de inicializao\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.

Sobre propriedades (membros) e mtodos pblicos, privados e estticos


Ao criar arquivos de classes do ActionScript em um arquivo de script externo, voc poder criar quatro tipos de mtodos e propriedades: mtodos pblicos e propriedades, mtodos privados e propriedades, mtodos estticos pblicos e propriedades e mtodos estticos privados e propriedades. Esses mtodos e propriedades definem como o Flash pode acessar variveis e permitem especificar quais partes do cdigo podem acessar determinados mtodos ou propriedades. Ao criar aplicativos pequenos ou grandes baseados em classes, importante considerar se um mtodo ou propriedade deve ser privado ou pblico. Isso garantir a segurana mxima do cdigo. Por exemplo, se voc criar uma classe User, talvez no deseje que os usurios dessa classe sejam capazes de alterar a ID de outros usurios. Definindo a propriedade da classe (s vezes chamada membro de instncia) como privada, voc poder limitar ao cdigo da classe ou das subclasses dessa classe o acesso propriedade, o que significa que nenhum usurio poder alterar essa propriedade diretamente. Propriedades e mtodos pblicos A palavra-chave public especifica que uma varivel ou funo est disponvel para qualquer chamador. Como as variveis e as funes so pblicas por padro, a palavra-chave this usada principalmente por razes estilsticas e de legibilidade, indicando que a varivel existe no escopo atual. Por exemplo, voc pode us-la para manter a consistncia em um bloco de cdigo que tambm contm variveis privadas ou estticas. Ela pode ser usada como palavrachave pblica ou privada.

262

Classes

A classe Sample a seguir j contm um mtodo pblico 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 pblica, use a palavra public em vez de private, como mostra o seguinte cdigo de exemplo:
class Sample { private var ID:Number; public var email:String; public function myMethod():Void { trace("myMethod"); } }

Como a propriedade email pblica, voc pode alter-la na classe Sample ou diretamente em um FLA. Propriedades e mtodos privados A palavra-chave private determina que uma varivel ou funo est disponvel apenas para a classe que a declara ou a define ou para subclasses dessa classe. Por padro, uma varivel ou funo pblica e est disponvel para qualquer chamador. Use a palavra-chave this se desejar restringir o acesso a uma varivel ou funo, como mostra o seguinte exemplo:
class Sample { private var ID:Number; public function myMethod():Void { this.ID = 15; trace(this.ID); // 15 trace("myMethod"); } }

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 (Sada). A mensagem indica que o membro privado e no pode ser acessado.

Sobre como trabalhar com classes personalizadas em um aplicativo

263

Propriedades e mtodos estticos A palavra-chave static determina que uma varivel ou funo seja criada somente uma vez por classe, em vez de em todos os objetos baseados nessa classe. Voc pode acessar um membro de classe esttico sem criar uma instncia da classe. As propriedades e os mtodos estticos podem ser definidos no escopo pblico ou privado. Os membros estticos, tambm chamados membros de classe, so atribudos classe, e no a uma instncia da classe. Para chamar um mtodo ou acessar uma propriedade da classe, voc faz referncia ao nome da classe, em vez de a uma instncia especfica dela, como mostra o seguinte cdigo:
trace(Math.PI / 8); // 0.392699081698724

Se voc digitar essa linha de cdigo no painel de script do painel Actions (Aes), ser exibido um resultado no painel Output (Sada). Por exemplo, no exemplo da classe Sample anterior, voc poderia criar uma varivel esttica para controlar quantas instncias da classe foram criadas, como demonstrado no seguinte cdigo:
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 instncia da classe Sample criada, o mtodo construtor apresenta o nmero total de instncias de classe Sample definidas at o momento. Algumas das classes de nvel superior do ActionScript tm membros de classe (ou membros estticos), como voc viu anteriormente nesta seo ao chamar a propriedade Math.PI. Os membros de classe (propriedades e mtodos) so acessados ou chamados no nome da classe, e no em uma instncia dela. Portanto, voc no cria uma instncia da classe para usar essas propriedades e mtodos. Por exemplo, a classe Math de nvel superior consiste apenas em mtodos e propriedades estticos. Para chamar qualquer um dos seus mtodos, voc no cria uma instncia dessa classe. Em vez disso, basta chamar os mtodos na prpria classe Math. O cdigo a seguir chama o mtodo sqrt() da classe Math:

264

Classes

var squareRoot:Number = Math.sqrt(4); trace(squareRoot); // 2

O cdigo a seguir chama o mtodo max() da classe Math, que determina o maior de dois nmeros:
var largerNumber:Number = Math.max(10, 20); trace(largerNumber); // 20

Para obter mais informaes sobre a criao de membros de classe, consulte Sobre membros de classe na pgina 265 e Usando membros de classe na pgina 269. Um arquivo de exemplo no disco rgido demonstra como criar um menu dinmico com dados XML e um arquivo de classe personalizado. O exemplo chama o construtor XmlMenu() do ActionScript e passa dois parmetros: o caminho para o arquivo de menu XML e uma referncia 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 rgido.

No Windows, navegue at unidade de inicializao\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.

Sobre membros de classe


A maioria dos membros (mtodos e propriedades) abordados at agora neste captulo so de um tipo denominado membros de instncia. Para cada membro de instncia, h uma cpia exclusiva desse membro em cada instncia da classe. Por exemplo, a varivel de membro email da classe Sample tem um membro de instncia, pois cada pessoa tem um endereo eletrnico diferente. Outro tipo de membro o membro de classe. H somente uma cpia de um membro de classe, e ela usada para a classe inteira. Qualquer varivel declarada em uma classe, mas fora de uma funo, uma propriedade da classe. No exemplo a seguir, a classe Person tem duas propriedades, age e name, de tipo Number e String, respectivamente.
class Person { public var age:Number; public var username:String; }

Igualmente, qualquer funo declarada em uma classe considerada um mtodo da classe. No exemplo da classe Person, voc pode criar um mtodo chamado getInfo().

Sobre como trabalhar com classes personalizadas em um aplicativo

265

class Person { public var age:Number; public var username:String; public function getInfo():String { // definio do mtodo getInfo() } }

No trecho de cdigo anterior, o mtodo getInfo() da classe Person, bem como as propriedades age e username, so membros de instncia pblicos. A propriedade age no poderia ser considerada com um membro de classe, pois cada pessoa tem uma idade diferente. Somente as propriedades e os mtodos compartilhados por todos os indivduos da classe devem ser membros de classe. Suponha que toda classe deva ter uma varivel species que indique o nome em latim da espcie que a classe representa. Para cada objeto Person, a espcie Homo sapiens. Como no valeria a pena armazenar uma cpia exclusiva da seqncia de caracteres "Homo sapiens" para cada instncia da classe, esse membro deve ser um membro de classe. Os membros de classe so declarados com a palavra-chave static. Por exemplo, voc poderia declarar o membro de classe species com o seguinte cdigo:
class Person { public static var species:String = "Homo sapiens"; // ... }

Voc tambm pode declarar os mtodos de uma classe como estticos, como no seguinte cdigo:
public static function getSpecies():String { return Person.species; }

Os mtodos estticos podem acessar somente propriedades estticas, e no propriedades de instncia. Por exemplo, o cdigo a seguir resultar em um erro do compilador, porque o mtodo getAge() da classe faz referncia varivel de instncia age.
class Person { public var age:Number = 15; // ... public static function getAge():Number { return age; /* **Error**: No possvel acessar variveis de instncia em funes estticas. */ } }

Para resolver esse problema, voc pode transformar o mtodo em um mtodo de instncia ou transformar a varivel em uma varivel de classe.

266

Classes

Para obter mais informaes sobre membros de classe (tambm chamados propriedades estticas), consulte Propriedades e mtodos estticos na pgina 264. Um arquivo de exemplo no disco rgido demonstra como criar um menu dinmico com dados XML e um arquivo de classe personalizado. O exemplo chama o construtor XmlMenu() do ActionScript e passa dois parmetros: o caminho para o arquivo de menu XML e uma referncia 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 rgido.

No Windows, navegue at unidade de inicializao\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.

Usando o padro de design Singleton


Uma forma comum de usar membros de classe com o padro de design Singleton. Um padro de design define uma abordagem formal para estruturar o cdigo. Geralmente, voc estrutura um padro de design como uma soluo para um problema comum de programao. H vrios padres de design estabelecidos, como o Singleton. Esse padro garante que uma classe tenha apenas uma instncia e permite acessar globalmente a instncia. Para obter informaes detalhadas sobre o padro de design Singleton, consulte www.macromedia.com/devnet/mx/coldfusion/articles/design_patterns.html. Freqentemente, h situaes em que necessrio ter exatamente um objeto de determinado tipo em um sistema. Por exemplo, em um jogo de xadrez, h somente um tabuleiro; da mesma maneira, em cada pas, h somente uma capital. Embora exista apenas um objeto, voc deve encapsular a funcionalidade desse objeto em uma classe. Entretanto, talvez voc precise gerenciar e acessar a instncia nica desse objeto. Uma das maneiras de fazer isso usar uma varivel global; contudo, as variveis globais no so desejveis para a maioria dos objetos. Uma abordagem melhor fazer com que a classe gerencie a instncia nica do objeto usando membros de classe. O exemplo a seguir mostra um uso padro tpico do design Singleton, em que a instncia Singleton criada apenas uma vez.
Para usar o padro de design Singleton:
1.

Selecione File (Arquivo) > New (Novo) e, em seguida, selecione ActionScript File (Arquivo ActionScript). Salve o documento como Singleton.as.

Sobre como trabalhar com classes personalizadas em um aplicativo

267

2.

Digite o seguinte cdigo ActionScript na janela Script:


/** Singleton class author: John Doe version: 0.53 modified: 6/24/2008 copyright: Macromedia, Inc. */ 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; } }

3. 4.

Salve o documento Singleton.as. Selecione File > New e, em seguida, selecione Flash Document (Documento do Flash) para criar um arquivo FLA, e salve-o como singleton_test.fla no mesmo diretrio em que foi salvo o arquivo de classe Singleton. Digite o seguinte cdigo ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
Singleton.getInstance().trackChanges(); // controlando alteraes. var s:Singleton = Singleton.getInstance(); // controlando alteraes. s.trackChanges();

5.

6. 7.

Salve o documento do Flash. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.

O objeto Singleton s ser criado quando for necessrio; ou seja, quando outro cdigo solicit-lo chamando o mtodo getInstance(). Esse procedimento geralmente chamado criao lenta e pode ajudar a tornar o seu cdigo mais eficiente em vrias circunstncias.

268

Classes

Lembre-se de no 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 cdigo 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 situaes podem indicar design inadequado.

Usando membros de classe


possvel usar os membros de classe para manter as informaes de estado de uma classe e suas instncias. Por exemplo, para acompanhar o nmero de instncias que foram criadas de uma determinada classe. Uma maneira fcil de fazer isso usar uma propriedade da classe que incrementada sempre que uma nova instncia criada. No exemplo a seguir, voc criar uma classe Widget que define um contador de instncia simples e esttico chamado widgetCount. Sempre que uma nova instncia da classe criada, o valor de widgetCount incrementado em 1, e o valor atual de widgetCount exibido no painel Output (Sada).
Para criar um contador de instncia usando uma varivel de classe:
1.

Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript) e, em seguida, clique em OK. Digite o seguinte cdigo na janela Script:
class Widget { //Inicialize a varivel de classe public static var widgetCount:Number = 0; public function Widget() { Widget.widgetCount++; trace("Creating widget #" + Widget.widgetCount); } }

2.

A varivel widgetCount declarada como esttica, portanto, inicializada como 0 somente uma vez. Sempre que a instruo construtora da classe Widget chamada, ela adiciona 1 a widgetCount e exibe o nmero da instncia atual que est sendo criada.
3. 4.

Salve o arquivo como Widget.as. Selecione File > New Flash document (Documento do Flash) para criar um arquivo FLA e salve-o como widget_test.fla no mesmo diretrio que Widget.as. Em widget_test.fla, digite o seguinte cdigo no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
// Antes que voc crie qualquer instncia da classe, // Widget.widgetCount igual a zero (0).

5.

Sobre como trabalhar com classes personalizadas em um aplicativo

269

trace("Widget count at start: " + Widget.widgetCount); // 0 var widget1:Widget = new Widget(); // 1 var widget2:Widget = new Widget(); // 2 var widget3:Widget = new Widget(); // 3 trace("Widget count at end: " + Widget.widgetCount); // 3 6. 7.

Salve as alteraes em widget_test.fla. Selecione Control > Test Movie para testar o arquivo. O Flash exibe as seguintes informaes no painel Output (Sada):
Widget count at Creating widget Creating widget Creating widget Widget count at start: 0 # 1 # 2 # 3 end: 3

Sobre os mtodos getter e setter


Getter e setter so mtodos de acesso, ou seja, eles so geralmente uma interface pblica para alterar os membros privados de uma classe. Esses mtodos so usados para definir uma propriedade. Voc acessa esses mtodos como propriedades fora da classe, embora defina-os na classe como mtodos. As propriedades externas classe podem ter um nome diferente do nome da propriedade na classe. O uso dos mtodos getter e setter oferece algumas vantagens, como a capacidade de criar, com uma funcionalidade sofisticada, membros que podem ser acessados como propriedades. Eles tambm permitem criar propriedades somente leitura e somente gravao. Embora os mtodos getter e setter sejam teis, evite uso excessivo porque, entre outros problemas, eles podem dificultar a manuteno do cdigo em determinadas situaes. Alm disso, eles permitem o acesso sua implementao de classes, como membros pblicos. A prtica de OOP no recomenda o acesso direto s propriedades em uma classe. Ao criar classes, procure sempre tornar o maior nmero possvel de suas variveis de instncia privadas e adicionar mtodos getter e setter conforme adequado. Isso recomendvel porque, muitas vezes, voc no desejar permitir que os usurios alterem determinadas variveis de suas classes. Por exemplo, se tiver um mtodo esttico privado que controle o nmero de instncias criadas para uma classe especfica, voc no desejar que os usurios modifiquem esse contador usando o cdigo. Somente a instruo construtora dever incrementar essa varivel quando for chamada. Nesse caso, voc pode criar uma varivel de instncia privada e permitir um mtodo getter somente para a varivel de contador; dessa maneira, os usurios s podero recuperar o valor atual usando o mtodo getter e no podero definir novos valores com o mtodo setter. A criao de um mtodo getter sem um setter uma forma simples de tornar somente leitura determinadas variveis de sua classe.

270

Classes

Usando mtodos getter e setter


A sintaxe dos mtodos getter e setter a seguinte:

O mtodo getter no usa parmetros e sempre retorna um valor. O mtodo setter sempre usa um parmetro e nunca retorna um valor.

As classes normalmente definem mtodos getter que fornecem acesso de leitura e mtodos setter que fornecem acesso de gravao a uma propriedade especfica. Por exemplo, imagine uma classe que contenha uma propriedade userName:
private var userName:String;

Em vez de permitir que instncias da classe acessem diretamente essa propriedade (user.userName = "Buster", por exemplo), a classe pode ter dois mtodos, getUserName() e setUserName(), que sero implementados como mostra o seguinte exemplo:
Para usar mtodos getter e setter:
1.

Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript) e, em seguida, clique em OK. Digite o seguinte cdigo na janela Script:
class Login { private var __username:String; public function Login(username:String) { this.__username = username; } public function getUserName():String { return this.__username; } public function setUserName(value:String):Void { this.__username = value; } }

2.

3.

Salve o documento do ActionScript como Login.as. Como voc pode observar, getUserName retorna o valor atual de userName, e setUserName() define o valor de userName como o parmetro de seqncia de caracteres passado para o mtodo.

4.

Selecione File > New Flash document (Documento do Flash) para criar um arquivo FLA e salve-o como login_test.fla no mesmo diretrio que Login.as. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var user:Login = new Login("RickyM"); // chamando o mtodo getUserName()

5.

Sobre como trabalhar com classes personalizadas em um aplicativo

271

var userName:String = user.getUserName(); trace(userName); // RickyM // chamando o mtodo setUserName() user.setUserName("EnriqueI"); trace(user.getUserName()); // EnriqueI 6.

Selecione Control > Test Movie para testar o arquivo. O Flash exibe as seguintes informaes no painel Output (Sada):
RickyM EnriqueI

Entretanto, se desejar uma sintaxe mais concisa, use os mtodos getter e setter implcitos. Esses mtodos permitem acessar as propriedades da classe de maneira direta e, ao mesmo tempo, seguir as prticas recomendadas de OOP. Para definir esses mtodos, use os atributos de mtodo get e set. Crie mtodos que obtenham ou definam o valor de uma propriedade e adicione a palavra-chave get ou set antes do nome do mtodo, como mostra o prximo exemplo:
N OT A

Os mtodos getter/setter implcitos so abreviaes sintticas do mtodo Object.addProperty() encontrado no ActionScript 1.0.

Para usar mtodos getter e setter implcitos:


1.

Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript) e, em seguida, clique em OK. Digite o seguinte cdigo na janela Script:
class Login2 { private var __username:String; public function Login2(username:String) { this.__username = username; } public function get userName():String { return this.__username; } public function set userName(value:String):Void { this.__username = value; } }

2.

3.

Salve o documento do ActionScript como Login2.as.

272

Classes

Lembre-se de que os mtodos getter no utilizam parmetros. Os mtodos setter devem ter exatamente um parmetro obrigatrio. Um mtodo setter pode ter o mesmo nome de um mtodo getter no mesmo escopo. Os mtodos getter e setter no podem ter o mesmo nome de outras propriedades. Por exemplo, no cdigo anterior em que voc definiu mtodos getter e setter chamados userName, no poderia existir tambm 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 diretrio que Login2.as. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var user:Login2 = new Login2("RickyM"); // chamando o mtodo "get" var userNameStr:String = user.userName; trace(userNameStr); // RickyM // chamando o mtodo "set" user.userName = "EnriqueI"; trace(user.userName); // EnriqueI

5.

Diferentemente dos mtodos comuns, os mtodos getter e setter so chamados sem parnteses ou argumentos. Os mtodos getter e setter so 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 informaes no painel Output (Sada):
RickyM EnriqueI
N OT A

No possvel usar atributos de mtodos getter e setter em declaraes de mtodo de interface.

Sobre classes dinmicas


Ao adicionar a palavra-chave dynamic a uma definio de classe, voc especifica que os objetos com base nessa classe podem adicionar e acessar propriedades dinmicas durante a execuo. Voc deve criar classes dinmicas somente se precisar especificamente dessa funcionalidade. A verificao de tipo em classes dinmicas menos estrita que em classes no-dinmicas, pois os membros acessados na definio de classe e em instncias da classe no so comparados com aqueles definidos no escopo da classe. No entanto, ainda possvel realizar a verificao de tipo das funes de membros de classes para detectar tipos de retorno e tipos de parmetro.

Sobre como trabalhar com classes personalizadas em um aplicativo

273

Para obter informaes sobre a criao de classes dinmicas, consulte Criando classes dinmicas na pgina 274.

Criando classes dinmicas


O padro que as propriedades e os mtodos de uma classe sejam fixos. Ou seja, uma instncia de uma classe no pode criar ou acessar as propriedades ou os mtodos que no foram originalmente declarados ou definidos pela classe. Por exemplo, considere uma classe Person que define duas propriedades, userName e age.
Para criar uma classe que no seja dinmica:
1.

Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript) e, em seguida, clique em OK. Digite o seguinte ActionScript na janela Script:
class Person { public var userName:String; public var age:Number; }

2.

Se, em outro script, voc criar uma instncia da classe Person e tentar acessar uma propriedade da classe que no existe, o compilador gerar um erro.
3. 4.

Salve o arquivo no disco rgido como Person.as. Selecione File > New Flash Document (Documento do Flash) para criar um arquivo FLA e clique em OK. Selecione File > Save As (Salvar como), atribua um nome ao arquivo person_test.fla e salve o arquivo no mesmo diretrio que a classe Person criada anteriormente. Adicione o cdigo a seguir para criar uma nova instncia da classe Person (firstPerson) e tente atribuir um valor a uma propriedade chamada hairColor (que no existe na classe Person):
var firstPerson:Person = new Person(); firstPerson.hairColor = "blue"; // Erro. No existe uma propriedade com o nome 'hairColor'.

5.

6.

7. 8.

Salve o documento do Flash. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. Esse cdigo gera um erro do compilador porque a classe Person no declara uma propriedade chamada hairColor. Na maioria dos casos, exatamente isso que voc deseja que acontea. Embora os erros do compilador no sejam desejveis, eles so muito teis para os programadores: mensagens de erro adequadas o ajudam a criar o cdigo correto apontando os erros no incio do processo de codificao.

274

Classes

Entretanto, em alguns casos, voc poder adicionar e acessar, durante a execuo, propriedades ou mtodos de uma classe que no foram definidos na classe original. O modificador de classe dynamic permite que voc faa exatamente isso.
Para criar uma classe dinmica:
1.

Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript) e, em seguida, clique em OK. Selecione File > Save As (Salvar como) e atribua o nome Person2.as ao arquivo. Salve o arquivo no disco rgido. Digite o seguinte cdigo na janela Script:
dynamic class Person2 { public var userName:String; public var age:Number; }

2.

3.

Esse ActionScript adiciona a palavra-chave dynamic classe Person no exemplo anterior. As instncias da classe Person2 podem adicionar e acessar as propriedades e os mtodos no definidos nessa classe.
4. 5.

Salve as alteraes no arquivo do ActionScript. Selecione File > New Flash Document (Documento do Flash) para criar um arquivo FLA e clique em OK. Selecione File > Save As (Salvar como) e atribua o nome person2_test.fla ao novo arquivo. Salve-o no mesmo diretrio que Person2.as. Digite o cdigo a seguir para criar uma nova instncia da classe Person2 (firstPerson) e atribua um valor a uma propriedade chamada hairColor (que no existe na classe Person2).
var firstPerson:Person2 = new Person2(); firstPerson.hairColor = "blue"; trace(firstPerson.hairColor); // azul

6.

7.

8. 9.

Salve as alteraes no arquivo person2_test.fla. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. Como a classe personalizada do Flash dinmica, possvel adicionar mtodos e propriedades a ela durante a execuo (quando o arquivo SWF reproduzido). Quando voc testar o cdigo, o texto azul dever ser exibido no painel Output (Sada).

Sobre como trabalhar com classes personalizadas em um aplicativo

275

Ao desenvolver aplicativos, no convm tornar as classes dinmicas, a menos que isso seja necessrio. Um dos motivos disso que a verificao de tipo em classes dinmicas menos estrita do que em classes no-dinmicas, pois os membros acessados na definio e nas instncias da classe no so comparados com os definidos no escopo da classe. No entanto, ainda possvel realizar a verificao de tipo das funes de membros de classes para detectar tipos de retorno e tipos de parmetro. As subclasses de classes dinmicas tambm so dinmicas, com uma exceo. As subclasses da classe MovieClip no so dinmicas por padro, embora a classe MovieClip seja dinmica. Essa implementao permite maior controle sobre as subclasses da classe MovieClip, pois voc tem a opo de torn-las dinmicas ou no:
class A dynamic class C class D dynamic extends class B extends extends class E MovieClip {} extends A {} B {} A {} extends MovieClip{} // // // // // A B C D E no dinmico dinmico dinmico no dinmico dinmico

Para obter informaes sobre subclasses, consulte Captulo 8, Herana, na pgina 319.

Sobre o uso de encapsulamento


Em um projeto orientado a objeto bem elaborado, os objetos so considerados como caixaspretas que contm ou encapsulam funcionalidade. O programador deve ser capaz de interagir com um objeto conhecendo somente suas propriedades, mtodos e eventos (sua interface de programao), sem conhecer os detalhes de sua implementao. Essa abordagem permite que os programadores utilizem nveis mais elevados de abstrao e fornece uma estrutura de organizao para a criao de sistemas complexos. O encapsulamento o motivo pelo qual o ActionScript 2.0 inclui, por exemplo, controle de acesso a membros, de modo que os detalhes da implementao possam permanecer privados e invisveis para o cdigo externo aos objetos. O cdigo externo ao objeto forado a interagir com a interface de programao do objeto em vez de com os detalhes da implementao. Essa abordagem oferece algumas vantagens importantes; por exemplo, ela permite que o criador do objeto altere a sua implementao sem a necessidade de alterar o cdigo externo ao objeto, desde que a interface de programao no seja alterada. Um exemplo de encapsulamento no Flash seria definir todas as variveis de membro e de classe como privadas e forar as pessoas que implementam suas classes a acessar essas variveis com os mtodos getter e setter. Essa forma de encapsulamento garante que, se houver necessidade de alterar a estrutura das variveis no futuro, voc precisar alterar somente o comportamento das funes getter e setter, em vez de forar todos os desenvolvedores a alterarem o modo como acessam as variveis da classe.

276

Classes

O cdigo a seguir mostra como voc poderia modificar a classe Person dos exemplos anteriores, definir seus membros de instncia como privados e definir mtodos 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; } }

Sobre o uso da palavra-chave this em classes


Use a palavra-chave this como prefixo nas suas classes para mtodos e variveis membro. Embora no seja necessria, a palavra-chave this permite identificar facilmente se uma propriedade ou um mtodo pertence a uma classe quando tem um prefixo; sem a palavrachave, no possvel saber se a propriedade ou o mtodo pertence superclasse. Voc tambm pode usar um prefixo de nome de classe para variveis e mtodos, mesmo dentro de uma classe. Isso ajuda a qualificar as referncias que voc faz, tornando o cdigo legvel. Dependendo do ambiente de codificao usado, a adio de prefixos tambm poder ativar referncias de cdigo.
N OT A

No necessrio adicionar esses prefixos, e alguns desenvolvedores consideram isso desnecessrio. A Macromedia recomenda a adio da palavra-chave this como um prefixo, pois ela pode melhorar a legibilidade e o ajuda a criar um cdigo claro fornecendo contexto para seus mtodos e variveis.

Sobre como trabalhar com classes personalizadas em um aplicativo

277

Exemplo: Criando classes personalizadas


Depois de explorar os conceitos bsicos de arquivos de classes e os tipos de elementos que eles contm, hora de aprender algumas diretrizes gerais para a criao desses arquivos. O primeiro exemplo deste captulo mostra como criar classes e empacot-las. O segundo exemplo mostra como usar os arquivos de classes com um arquivo FLA.
A T E N O

O cdigo do ActionScript em arquivos externos compilado em um arquivo SWF quando voc publica, exporta, testa ou depura um arquivo FLA. Portanto, se voc fizer qualquer alterao em um arquivo externo, ser preciso salv-lo e recompilar os arquivos FLA que o utilizam.

Como vimos em Criando arquivos de classes personalizados na pgina 249, uma classe consiste em duas partes principais: a declarao e o corpo. A declarao da classe consiste pelo menos na instruo 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, no possvel definir uma classe em um script de quadro no arquivo FLA. Portanto, voc criar um novo arquivo para este exemplo. Na sua forma mais bsica, 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 mtodos da classe so definidos. No final deste exemplo, a organizao bsica de seus arquivos de classes ser a seguinte: Comentrios de documentao Declarao da classe Funo construtora Corpo da classe

Voc no cria subclasses neste captulo. Para obter mais informaes sobre herana e subclasses, consulte o Captulo 8, Herana, na pgina 319. Este exemplo contm os seguintes tpicos: Sobre as diretrizes gerais para criao de classes na pgina 279 Criando e empacotando arquivos de classes na pgina 281 Criando a funo construtora na pgina 283 Adicionando mtodos e propriedades na pgina 285

278

Classes

Controlando o acesso de membros em classes na pgina 288 Documentando as classes na pgina 290

Um arquivo de exemplo no disco rgido demonstra como criar um menu dinmico com dados XML e um arquivo de classe personalizado. O exemplo chama o construtor XmlMenu() do ActionScript e passa dois parmetros: o caminho para o arquivo de menu XML e uma referncia 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 rgido.

No Windows, navegue at unidade de inicializao\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.

Sobre as diretrizes gerais para criao de classes


Voc deve usar as diretrizes a seguir ao criar arquivos de classes personalizados. Elas o ajudaro a criar classes corretas e bem estruturadas. Voc praticar essas diretrizes nos prximos exemplos.

Em geral, coloque apenas uma declarao por linha e no coloque o mesmo tipo ou tipos diferentes de declaraes na mesma linha. Formate as declaraes como no seguinte exemplo:
private var SKU:Number; // nmero SKU do produto (identificao) private var quantity:Number; // quantidade do produto

Inicialize as variveis locais ao declar-las, a menos que o valor inicial seja determinado por um clculo. Para obter informaes sobre a inicializao de variveis, consulte Adicionando mtodos e propriedades na pgina 285. Declare as variveis antes de us-las (incluindo repeties). Por exemplo, o cdigo a seguir predeclara a varivel de iterador de repetio (i) antes de us-la para a repetio 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 declaraes locais que ocultem declaraes de nvel superior. Por exemplo, no declare uma varivel duas vezes, como mostra o seguinte exemplo:

Exemplo: Criando classes personalizadas

279

// cdigo incorreto var counter:Number = 0; function myMethod() { var counter:Number; for (counter = 0; counter <= 4; counter++) { // instrues; } }

Esse cdigo declara a mesma varivel dentro de um bloco interno.

No atribua diversas variveis a um nico valor em uma instruo, pois isso dificulta a leitura, como voc pode observar nos seguintes exemplos de cdigo ActionScript:
// formulrio incorreto xPos = yPos = 15;

ou
// formulrio incorreto class User { private var m_username:String, m_password:String; }

S crie variveis de instncia pblicas ou variveis de membro ou de classe estticas pblicas se houver um bom motivo para isso. Verifique se essas variveis so explicitamente pblicas antes de cri-las dessa maneira. Defina a maioria das variveis de membro como privadas a menos que haja um bom motivo para torn-las pblicas. Do ponto de vista do design, prefervel tornar as variveis de membro privadas e permitir o acesso a essas variveis somente por meio de um pequeno grupo de funes getter e setter.

Sobre a atribuio de nomes a arquivos de classes


Os nomes de classes devem ser identificadores; ou seja, o primeiro caractere deve ser uma letra, sublinhado (_) ou cifro ($), e os caracteres subseqentes devem ser uma letra, nmero, sublinhado ou cifro. Como prtica recomendada, tente usar somente letras em nomes de classes. O nome da classe deve corresponder exatamente ao do arquivo ActionScript que o contm, incluindo o uso de maisculas e minsculas. No exemplo a seguir, se voc criar uma classe chamada Rock, o arquivo ActionScript que contm a definio da classe dever se chamar Rock.as:
// No arquivo Rock.as class Rock { // Corpo da classe Rock }

280

Classes

Voc ir nomear e criar uma definio de classe na seo a seguir. Consulte a seo Criando e empacotando arquivos de classes na pgina 281 para criar, nomear e empacotar os arquivos de classes. Para obter mais informaes sobre nomeao de arquivos de classe, consulte Nomeando classes e objetos na pgina 776.

Criando e empacotando arquivos de classes


Nesta seo, voc ir criar, nomear e empacotar os arquivos de classe usados neste exemplo (Exemplo: Criando classes personalizadas na pgina 278). As sees subseqentes mostram como criar arquivos de classes completos (embora simples). Para obter informaes detalhadas sobre pacotes, consulte Sobre pacotes na pgina 242, Comparao de classes e pacotes na pgina 243 e Trabalhando com pacotes na pgina 244. Ao criar um arquivo de classe, decida onde deseja armazen-lo. Nas etapas a seguir, voc salvar o arquivo de classe e o arquivo FLA de aplicativo que usa esse arquivo no mesmo diretrio para fins de simplicidade. Entretanto, se desejar verificar a sintaxe, tambm ser necessrio informar ao Flash como ele poder encontrar o arquivo. Normalmente, ao criar um aplicativo, voc adiciona ao caminho de classe do Flash o diretrio onde deseja armazenar o aplicativo e os arquivos de classes. Para obter informaes sobre caminhos de classe, consulte Sobre a definio e a modificao do caminho de classe na pgina 255. Os arquivos de classes tambm so denominados arquivos do ActionScript (AS). Os arquivos AS so criados com a ferramenta de criao do Flash ou com um editor externo. Vrios editores externos, como o Macromedia Dreamweaver e o Macromedia Flex Builder, podem criar esses arquivos.
N OT A

O nome da classe (Person) deve corresponder exatamente ao nome do arquivo AS que a contm (ClassA.as). Isso muito importante; se esses dois nomes forem diferentes, incluindo o uso de maisculas e minsculas, a classe no ser compilada.

Para criar um arquivo de classe e uma declarao de classe:


1.

Selecione File (Arquivo) > New (Novo) Flash Document (Documento do Flash) para criar um documento FLA e clique em OK. Selecione File > Save as (Salvar como) e atribua o nome package_test.fla ao novo arquivo; em seguida, salve o documento do Flash no diretrio atual. Voc adicionar contedo a esse documento do Flash em uma etapa posterior. Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript) e, em seguida, clique em OK. Selecione File > Save As e crie um novo subdiretrio chamado com e, em seguida, faa o seguinte:

2.

3.

4.

Exemplo: Criando classes personalizadas

281

a. b. c.

No subdiretrio com, crie um novo subdiretrio chamado macromedia. No subdiretrio macromedia, crie um novo subdiretrio chamado utils. Salve o documento atual do ActionScript no diretrio utils e atribua o nome ClassA.as ao arquivo.

5.

Digite o seguinte cdigo na janela Script:


class com.macromedia.utils.ClassA { }

O cdigo anterior cria uma nova classe chamada ClassA no pacote com.macromedia.utils.
6. 7.

Salve o documento do ActionScript ClassA.as. Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript) e, em seguida, clique em OK. Selecione File > Save As, atribua o nome ClassB.as ao novo arquivo e salve-o no mesmo diretrio que o arquivo ClassA.as criado em uma etapa anterior. Digite o seguinte cdigo na janela Script:
class com.macromedia.utils.ClassB { }

8.

9.

O cdigo anterior cria uma nova classe chamada ClassB no pacote com.macromedia.utils.
10. Salve

as alteraes nos arquivos de classes ClassA.as e ClassB.as.

Os arquivos de classes usados em um arquivo FLA so importados para um arquivo SWF quando compilados. O cdigo criado em um arquivo de classe deve ter determinada metodologia e organizao, as quais so abordadas nas sees subseqentes. Se estiver criando vrias classes personalizadas, use pacotes para organizar seus arquivos de classes. Um pacote um diretrio que contm um ou mais arquivos de classes e reside em um diretrio 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 diretrio (pacote) em que esto armazenados. Para obter mais informaes sobre caminhos de classes, consulte Sobre a definio e a modificao do caminho de classe na pgina 255. Por exemplo, uma classe chamada com.macromedia.docs.YourClass armazenada no diretrio com/macromedia/docs. A declarao da classe no arquivo YourClass.as deve ser semelhante seguinte:
class com.macromedia.docs.YourClass { // sua classe }
N O TA 282

Voc criar a declarao de classe que reflete o diretrio de pacotes na seo a seguir, Exemplo: Criando classes personalizadas na pgina 278.

Classes

Por essa razo, recomendvel planejar a sua estrutura de pacotes antes de comear a criar as classes. De outra forma, se voc decidir mover os arquivos das classes depois de cri-los, ser necessrio modificar as instrues de declarao dessas classes para refletir sua nova localizao.
Para empacotar os arquivos de classes:
1.

Escolha o nome de pacote que deseja usar. Os nomes de pacotes devem ser intuitivos e facilmente identificveis pelos desenvolvedores. Lembre-se de que o nome do pacote tambm corresponde estrutura de diretrio determinada. Por exemplo, todas as classes do pacote com.macromedia.utils precisaro ser colocadas na pasta com/macromedia/utils de seu disco rgido.

2.

Crie a estrutura de diretrio necessria aps escolher o nome do pacote. Por exemplo, se tiver atribudo o nome com.macromedia.utils ao pacote, voc precisar criar a estrutura de diretrio com/macromedia/utils e colocar suas classes na pasta utils.

3.

Use o prefixo com.macromedia.utils para todas as classes criadas nesse pacote. Por exemplo, se o nome da classe for ClassA, o nome completo da classe precisar ser com.macromedia.utils.ClassA no arquivo de classe com/macromedia/utils/ ClassA.as.

4.

Se a estrutura do pacote for alterada no futuro, lembre-se de modificar no s a estrutura de diretrio como tambm o nome do pacote em cada arquivo de classe; alm disso, todas as instrues de importao ou referncias a uma classe desse pacote precisaro ser modificadas.

Para continuar a criar os arquivos de classes, consulte Criando a funo construtora na pgina 283.

Criando a funo construtora


Voc j aprendeu a criar a declarao da classe em Criando e empacotando arquivos de classes na pgina 281. Nesta parte do captulo, voc criar o que chamamos de funo construtora do arquivo de classe.
N O TA

Voc aprender a criar comentrios, instrues e declaraes em sees posteriores.

Exemplo: Criando classes personalizadas

283

Construtores so funes usadas para inicializar (definir) as propriedades e os mtodos de uma classe. Por definio, construtores so funes em uma definio de classe que tm o mesmo nome da classe. Por exemplo, o cdigo a seguir define uma classe Person e implementa uma funo construtora. Na OOP, a funo construtora inicializa cada nova instncia de uma classe. Uma funo construtora de classe uma funo especial chamada automaticamente quando voc cria uma instncia de uma classe usando o operador new. A funo construtora tem o mesmo nome da classe que a contm. Por exemplo, a classe Person criada anteriormente continha a seguinte funo construtora:
// Funo construtora da classe Person public function Person (uname:String, age:Number) { this.__name = uname; this.__age = age; }

Considere os seguintes pontos ao criar funes construtoras:

Se nenhuma funo construtora for explicitamente declarada, ou seja, se voc no criar uma funo cujo nome corresponda ao da classe, o compilador automaticamente criar uma funo construtora vazia. Uma classe pode conter apenas uma funo construtora; funes construtoras sobrecarregadas no so permitidas no ActionScript 2.0. Uma funo construtora no deve ter nenhum tipo de retorno.

O termo construtor tambm normalmente usado quando voc cria (instancia) um objeto com base em uma classe especfica. As instrues a seguir so chamadas das funes construtoras relativas classe Array de nvel superior e classe Person personalizada:
var day_array:Array = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); var somePerson:Person = new Person("Tom", 30);

Em seguida, voc adicionar uma funo especial denominada funo construtora.


NO T A

Este exerccio faz parte do Exemplo: Criando classes personalizadas na pgina 278. Se voc no desejar avanar no exemplo, faa o download dos arquivos de classe em www.helpexamples.com/flash/learnas/classes/.

Para adicionar funes construtoras aos arquivos de classes:


1. 2.

Abra o arquivo de classe ClassA.as na ferramenta de criao do Flash. Modifique o arquivo de classe existente de acordo com o seguinte cdigo (as alteraes a serem feitas esto em negrito):

284

Classes

class com.macromedia.utils.ClassA { function ClassA() { trace("ClassA constructor"); } }

O cdigo anterior define um mtodo construtor para a classe ClassA. Esse construtor envia uma seqncia de caracteres simples para o painel Output (Sada) que informa quando uma nova instncia da classe foi criada.
3. 4.

Abra o arquivo de classe ClassB.as na ferramenta de criao do Flash. Modifique o arquivo de classe de acordo com o seguinte cdigo (as alteraes a serem feitas esto em negrito):
class com.macromedia.utils.ClassB { function ClassB() { trace("ClassB constructor"); } }

5.

Salve os dois arquivos do ActionScript antes de continuar.

Para continuar a criar o arquivo de classe, consulte Adicionando mtodos e propriedades na pgina 285.

Adicionando mtodos e propriedades


Para criar as propriedades das classes ClassA e ClassB, use a palavra-chave var para definir variveis.
N OT A

Os trs exerccios a seguir fazem parte do Exemplo: Criando classes personalizadas na pgina 278. Se voc no desejar avanar no exemplo, faa o download dos arquivos de classe em www.helpexamples.com/flash/learnas/classes/.

Para adicionar propriedades s classes ClassA e ClassB:


1. 2.

Abra ClassA.as e ClassB.as na ferramenta de criao do Flash. Modifique o arquivo ActionScript ClassA.as de acordo com o seguinte cdigo (as alteraes a serem feitas esto em negrito):
class com.macromedia.utils.ClassA { static var _className:String; function ClassA() { trace("ClassA constructor"); } }

O bloco de cdigo anterior adiciona uma nova varivel esttica, _className, que contm o nome da classe atual.

Exemplo: Criando classes personalizadas

285

3.

Modifique a classe ClassB e adicione a varivel esttica para tornar essa classe semelhante ao cdigo anterior. Salve os dois arquivos do ActionScript antes de continuar.
D IC A

4.

Por conveno, as propriedades da classe so definidas na parte superior do corpo da classe. A sua definio nesse local facilita a compreenso do cdigo, mas no obrigatria.

A sintaxe ps-dois-pontos (por exemplo, var username:String e var age:Number) usada nas declaraes de variveis. Esse um exemplo de atribuio estrita de tipos de dados. Quando voc atribui um tipo a uma varivel usando o formato var variableName:variableType, o compilador ActionScript verifica se os valores atribudos a essa varivel correspondem ao tipo especificado. Se o tipo de dados correto no for usado no arquivo FLA que importa essa classe, o compilador gerar um erro. Para obter mais informaes sobre como atribuir tipos de dados estritos, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85. Os membros de uma classe consistem em propriedades (declaraes de variveis) e mtodos (definies de funes). Voc deve declarar e definir todas as propriedades e mtodos no corpo da classe (entre as chaves [{}]); caso contrrio, ocorrer um erro durante a compilao. Para obter informaes sobre membros, consulte Sobre propriedades (membros) e mtodos pblicos, privados e estticos na pgina 262.
Para adicionar mtodos s classes ClassA e ClassB:
1. 2.

Abra ClassA.as e ClassB.as na ferramenta de criao do Flash. Modifique o arquivo de classe ClassA de acordo com o seguinte cdigo (as alteraes a serem feitas esto em negrito):
class com.macromedia.utils.ClassA { static var _className:String; function ClassA() { trace("ClassA constructor"); } function doSomething():Void { trace("ClassA - doSomething()"); } }

O bloco de cdigo em negrito cria um novo mtodo na classe que envia uma seqncia de caracteres para o painel Output (Sada).

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 cdigo completo criado na etapa anterior. Se no for possvel corrigir os erros do cdigo, copie e cole o cdigo 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 cdigo 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()"); } }

5.

Salve os dois arquivos do ActionScript antes de continuar.

Voc pode inicializar as propriedades inline, ou seja, quando as declara, com os valores padro, como mostra o seguinte exemplo:
class Person { var age:Number = 50; var username:String = "John Doe"; }

Quando voc inicializa as propriedades inline, a expresso direita de uma atribuio deve ser uma constante de tempo de compilao. Ou seja, a expresso no pode se referir a algo definido durante a execuo. As constantes de tempo de compilao incluem literais de seqncia de caracteres, nmeros, valores booleanos, null e undefined, bem como funes construtoras para as seguintes classes de nvel superior: Array, Boolean, Number, Object e String.
Para inicializar propriedades inline:
1. 2.

Abra ClassA.as e ClassB.as na ferramenta de criao do Flash. Modifique o arquivo de classe ClassA de acordo com o seguinte ActionScript (as alteraes a serem feitas esto em negrito):
class com.macromedia.utils.ClassA { static var _className:String = "ClassA"; function ClassA() { trace("ClassA constructor");

Exemplo: Criando classes personalizadas

287

} function doSomething():Void { trace("ClassA - doSomething()"); } }

A nica diferena entre o arquivo de classe existente e o bloco de cdigo anterior que agora h um valor definido para a varivel esttica _className, ClassA.
3.

Modifique o arquivo de classe ClassB e adicione a propriedade inline, alterando o valor para ClassB. Salve os dois arquivos do ActionScript antes de continuar.

4.

Essa regra aplica-se apenas a variveis de instncia (variveis que so copiadas em cada instncia de uma classe), e no a variveis de classe (variveis que pertencem classe).
N OT A 288

Quando voc inicializa arrays inline, apenas um array criado para todas as instncias da classe.

Para continuar a criar o arquivo de classe, consulte Controlando o acesso de membros em classes na pgina 288.

Controlando o acesso de membros em classes


O padro que qualquer propriedade ou mtodo de uma classe possa ser acessado por qualquer outra classe: todos os membros de uma classe so pblicos por padro. Entretanto, em alguns casos, talvez voc queira proteger os dados ou os mtodos de uma classe do acesso de outras classes. Voc precisar tornar esses membros privados (disponveis apenas para a classe que os declara ou os define). Especifique membros pblicos ou privados usando o atributo de membro public ou private. Por exemplo, o cdigo a seguir declara uma varivel privada (uma propriedade) e um mtodo privado (uma funo). A classe a seguir (LoginClass) define uma propriedade privada chamada userName e um mtodo privado chamado getUserName().
class LoginClass { private var userName:String; private function getUserName():String { return this.userName; } // Construtor: public function LoginClass(user:String) { this.userName = user; } }

Classes

Os membros privados (propriedades e mtodos) so acessveis apenas para a classe que define esses membros e para as subclasses dessa classe original. As instncias da classe original, ou as instncias das subclasses dessa classe, no podem acessar as propriedades e os mtodos declarados de forma privada; ou seja, os membros privados s podem ser acessados nas definies da classe, e no no nvel da instncia. No exemplo a seguir, voc alterar o acesso a membros em seus arquivos de classes.
NO TA

Este exerccio faz parte do Exemplo: Criando classes personalizadas na pgina 278. Se voc no desejar avanar no exemplo, faa o download dos arquivos de classe em www.helpexamples.com/flash/learnas/classes/.

Para controlar o acesso a membros:


1. 2.

Abra ClassA.as e ClassB.as na ferramenta de criao do Flash. Modifique o arquivo ActionScript ClassA.as para que o contedo esteja de acordo com o seguinte ActionScript (as alteraes a serem feitas esto em negrito):
class com.macromedia.utils.ClassA { private static var _className:String = "ClassA"; public function trace("ClassA } public function trace("ClassA } } ClassA() { constructor"); doSomething():Void { - doSomething()");

O cdigo anterior define os dois mtodos (o construtor de ClassA e o mtodo doSomething()) como pblicos; isso significa que eles podem ser acessados por scripts externos. A varivel esttica _className definida como privada e, portanto, s pode ser acessada a partir da classe, e no por scripts externos.
3.

Modifique o arquivo ClassB.as do ActionScript e adicione o acesso aos mesmos mtodos e propriedades que os da classe ClassA. Salve os dois arquivos do ActionScript antes de continuar.

4.

Uma instncia de classe ClassA ou ClassB no pode acessar membros privados. Por exemplo, o cdigo a seguir, adicionado ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) em um arquivo FLA, resultar em um erro do compilador indicando que o mtodo privado e no pode ser acessado:
import com.macromedia.utils.ClassA; var a:ClassA = new ClassA(); trace(a._className); // Erro. O membro privado e no pode ser acessado.

Exemplo: Criando classes personalizadas

289

O controle de acesso a membros um recurso somente de tempo de compilao; durante a execuo, o Flash Player no distingue entre membros privados e pblicos. Para continuar a criar o arquivo de classe, consulte Documentando as classes na pgina 290.

Documentando as classes
O uso de comentrios em suas classes e interfaces importante ao document-las para outros usurios. Por exemplo, talvez voc deseje distribuir seus arquivos de classes na comunidade Flash ou esteja trabalhando com uma equipe de designers ou desenvolvedores que usaro esses arquivos em seu trabalho ou como parte de um projeto do qual voc participe. A documentao ajuda outros usurios a compreender a finalidade e as origens da classe. H dois tipos de comentrios em uma classe ou arquivo de interface tpico: comentrios de documentao e comentrios de implementao. Use comentrios de documentao para descrever as especificaes do cdigo, mas no a implementao. Use comentrios de implementao para fazer comentrios sobre o cdigo ou sobre a implementao de sees especficas do cdigo. Os dois tipos de comentrios usam delimitadores ligeiramente diferentes. Os comentrios de documentao so delimitados por /** e */, e os de implementao so delimitados por /* e */.
N OT A

Os comentrios da documentao no so uma construo de linguagem no ActionScript 2.0. No entanto, eles so uma maneira comum de estruturar comentrios em um arquivo de classe que voc pode usar nos arquivos AS.

Use os comentrios de documentao para descrever interfaces, classes, mtodos e constues. Inclua um comentrio de documentao para cada classe, interface ou membro e coloque-o diretamente antes da declarao. Se precisar documentar mais informaes que no caibam nos comentrios de documentao, use comentrios de implementao (no formato de bloco ou de uma nica linha, conforme descrito em Sobre comentrios na pgina 139). Quando adicionados, os comentrios de implementao devem vir logo aps a declarao.
N OT A

No inclua comentrios que no estejam diretamente relacionados classe que est sendo lida. Por exemplo, no inclua comentrios que descrevam o pacote correspondente. Este exerccio faz parte do Exemplo: Criando classes personalizadas na pgina 278. Se voc no desejar avanar no exemplo, faa o download dos arquivos de classe em www.helpexamples.com/flash/learnas/classes/.

Para documentar os arquivos de classes:


1.

290

N O TA

Abra ClassA.as e ClassB.as na ferramenta de criao do Flash.

Classes

2.

Modifique o arquivo de classe ClassA e adicione o novo cdigo ao incio do arquivo (as alteraes a serem feitas esto em negrito):
/** ClassA class version 1.1 6/21/2005 copyright Macromedia, Inc. */ class com.macromedia.utils.ClassA { private static var _className:String = "ClassA"; public function trace("ClassA } public function trace("ClassA } } ClassA() { constructor"); doSomething():Void { - doSomething()");

O cdigo acima adicionou um comentrio ao incio do arquivo de classe. sempre recomendvel adicionar comentrios aos arquivos do ActionScript e do Flash para que voc possa incluir informaes teis, como autor da classe, data da ltima modificao, informaes de copyright ou possveis problemas/erros existentes no arquivo.
3.

Adicione um comentrio semelhante ao incio do arquivo ClassB.as do ActionScript, alterando o nome da classe e outras informaes aplicveis. Salve os dois arquivos do ActionScript antes de continuar.

4.

Voc tambm pode adicionar comentrios em bloco, de uma linha ou finais ao cdigo da classe. Para obter informaes sobre a criao de comentrios teis no cdigo, consulte Criando comentrios adequados na pgina 780. Para obter informaes gerais sobre comentrios, consulte Comentrios de linha nica na pgina 140, Comentrios de vrias linhas na pgina 140 e Comentrios finais na pgina 142. Para aprender a usar esses arquivos de classes personalizados em um arquivo SWF, consulte Exemplo: Usando arquivos de classes personalizados no Flash na pgina 291.

Exemplo: Usando arquivos de classes personalizados no Flash


Esse exemplo usa arquivos de classe criados no exemplo chamado Exemplo: Criando classes personalizadas na pgina 278, ou voc pode fazer download deles em www.helpexamples.com/flash/learnas/classes/. Se voc concluiu Exemplo: Criando classes personalizadas na pgina 278, localize os arquivos ClassA.as e ClassB.as no disco rgido.

Exemplo: Usando arquivos de classes personalizados no Flash

291

Como o nome do pacote do arquivo de classe ClassA com.macromedia.utils.ClassA, voc precisar salvar os arquivos de classes na estrutura de diretrio adequada. Crie uma subpasta chamada com no diretrio atual. Na pasta com, adicione uma nova pasta chamada macromedia. Nessa pasta, adicione um terceiro e ltimo subdiretrio chamado utils. Salve os arquivos de classes ClassA.as e ClassB.as na pasta utils. Agora voc est pronto para continuar com o exemplo. Voc poder usar as classes personalizadas criadas no Exemplo: Criando classes personalizadas na pgina 278 com um arquivo FLA. Neste exemplo, voc usar as classes personalizadas para criar um pequeno aplicativo no Flash. Suas classes sero compiladas no arquivo SWF quando voc publicar o documento e, depois, tudo funcionar de forma integrada. Nos exerccios a seguir, voc aprender o funcionamento dos caminhos de classe, aprender a usar os arquivos de classe no aplicativo, e a importar classes e pacotes. Para continuar esse exemplo, v para Importando classes e pacotes na pgina 292.

Importando classes e pacotes


Para fazer referncia a uma classe em outro script, voc deve incluir o nome do pacote da classe antes do nome da classe. A combinao do nome da classe e do caminho do pacote correspondente o nome da classe totalmente qualificado. Se uma classe estiver em um diretrio do caminho de classe de nvel superior, e no em um subdiretrio do diretrio do caminho de classe, seu nome de classe totalmente qualificado ser o nome da classe. Para especificar caminhos de pacote, use a notao de ponto (.) para separar os nomes de diretrios de pacote. Os caminhos de pacote so hierrquicos; ou seja, cada ponto representa um diretrio aninhado. Por exemplo, suponha que voc tenha criado uma classe chamada ClassName que resida no pacote com/macromedia/docs/learnAs2 no caminho de classe. Para criar uma instncia dessa classe, voc pode especificar o seu nome totalmente qualificado. Tambm possvel usar o nome totalmente qualificado da classe para atribuir um tipo s variveis, como mostra o seguinte exemplo:
var myInstance:com.macromedia.docs.learnAs2.ClassName = new com.macromedia.docs.learnAs2.ClassName();

Voc pode usar a instruo 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. Tambm pode usar o caractere curinga (*) para importar todas as classes de um pacote. Se usar o caractere curinga, voc no 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 instruo import, como mostra o seguinte exemplo:
import com.macromedia.docs.learnAs2.util.UserClass;

Posteriormente, no mesmo script, voc poderia fazer referncia 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 cdigo:
import com.macromedia.utils.*;

O exemplo a seguir mostra que possvel fazer referncia s duas classes diretamente no mesmo script:
var myA:ClassA = new ClassA(); var myB:ClassB = new ClassB();

A instruo import aplica-se apenas ao script atual (quadro ou objeto) no qual ela chamada. Se uma classe importada no for utilizada em um script, ela no ser includa no bytecode do arquivo SWF resultante e no estar disponvel para os arquivos SWF que podero ser carregados pelo arquivo FLA que contm a instruo import.
NO T A

O exerccio a seguir faz parte do Exemplo: Usando arquivos de classes personalizados no Flash na pgina 291 que continua os exemplos de Exemplo: Criando classes personalizadas. Se voc precisar das classes ClassA e ClassB, faa o download dos arquivos de classe em www.helpexamples.com/flash/learnas/classes/.

Para importar uma classe ou um pacote:


1. 2.

Abra o arquivo chamado package_test.fla. Digite o seguinte cdigo na janela Script:


import com.macromedia.utils.*; var a = new ClassA(); // Construtor ClassA var b = new ClassB(); // Construtor ClassB

O bloco de cdigo anterior importa primeiro cada uma das classes do pacote com.macromedia.utils usando o caractere curinga (*). Em seguida, voc cria uma nova instncia da classe ClassA, que faz com que o mtodo construtor envie uma mensagem para o painel Output (Sada). Uma instncia da classe ClassB tambm criada e envia mensagens de depurao para o painel Output.
3.

Salve as alteraes no documento do Flash antes de continuar.

Exemplo: Usando arquivos de classes personalizados no Flash

293

Para continuar usando esses arquivos de classes em um arquivo do Flash, consulte Criando instncias de classes em um exemplo na pgina 294.

Criando instncias de classes em um exemplo


As instncias so objetos que contm todas as propriedades e mtodos de determinada classe. Por exemplo, arrays so instncias da classe Array; portanto, voc pode usar quaisquer mtodos ou propriedades dessa classe com qualquer instncia de um array. Voc tambm poderia criar sua prpria classe, como UserSettings, e, depois, criar uma instncia dessa classe. No exemplo iniciado em Exemplo: Usando arquivos de classes personalizados no Flash na pgina 291, voc modificou um arquivo FLA para importar as classes de modo que no precisasse fazer sempre referncia a elas por seus nomes totalmente qualificados. A prxima etapa deste exemplo (Exemplo: Usando arquivos de classes personalizados no Flash na pgina 291) ser criar uma instncia das classes ClassA e ClassB em um script, como um script de quadro no documento do Flash package_test.fla, e atribuir uma varivel a ela. Para criar uma instncia de uma classe personalizada, use o operador new, como faria ao criar uma instncia de uma classe de nvel superior do ActionScript (como a classe Date ou Array). Faa referncia classe usando o seu nome totalmente qualificado ou importe-a (como demonstrado em Importando classes e pacotes na pgina 292.)
NO TA

O exerccio a seguir faz parte do Exemplo: Usando arquivos de classes personalizados no Flash na pgina 291 que continua os exemplos de Exemplo: Criando classes personalizadas.

Para criar uma nova instncia das classes ClassA e ClassB:


1. 2.

Abra o arquivo chamado package_test.fla. Digite o seguinte cdigo em negrito na janela Script:
import com.macromedia.utils.*; var a:ClassA = new ClassA(); // Construtor ClassA a.doSomething(); // chama o mtodo doSomething() do ClassA var b:ClassB = new ClassB(); // Construtor ClassB b.doSomething(); // chama o mtodo doSomething() do ClassB

A atribuio de um tipo de dados aos objetos nesse exemplo de cdigo permite ao compilador garantir que voc no tentar acessar as propriedades ou os mtodos que no esto definidos em sua classe personalizada. Para obter mais informaes sobre como atribuir tipos de dados estritos, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85. A exceo se voc declarar a classe como dinmica usando a palavra-chave dynamic. Consulte Criando classes dinmicas na pgina 274.

294

Classes

3.

Salve as alteraes no arquivo FLA antes de continuar.

Agora voc j deve saber como criar e usar classes em documentos do Flash. Lembre-se de que tambm possvel criar instncias de classes internas ou de nvel superior do ActionScript (consulte Sobre como trabalhar com classes internas na pgina 312.). Para continuar usando esses arquivos de classes em um arquivo do Flash, consulte Atribuindo uma classe a smbolos no Flash na pgina 295.

Atribuindo uma classe a smbolos no Flash


Voc tambm pode atribuir uma classe aos smbolos usados em um arquivo do Flash, como um objeto de clipe de filme no Stage (Palco).
Para atribuir uma classe a um smbolo de clipe de filme:
1.

Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript) e, em seguida, clique em OK. Selecione File > Save As (Salvar como), atribua o nome Animal.as e salve o arquivo no disco rgido. Digite o seguinte cdigo na janela Script:
class Animal { public function Animal() { trace("Animal::constructor"); } }

2.

3.

Esse ActionScript cria uma nova classe chamada Animal que possui um mtodo construtor que envia uma seqncia de caracteres para o painel Output (Sada).
4. 5.

Salve as alteraes no arquivo do ActionScript. Selecione File > New Flash Document (Documento do Flash) para criar um arquivo FLA e clique em OK. 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. Selecione Insert (Inserir) > New Symbol (Novo smbolo) para iniciar a caixa de dilogo Create New Symbol (Criar novo smbolo). Insira o nome do smbolo de animal e selecione a opo Movie Clip (Clipe de filme). Clique no boto Advanced (Avanado) no canto inferior direito da caixa de dilogo Create New Symbol (Criar novo smbolo) para ativar mais opes.

6.

7.

8. 9.

Atribuindo uma classe a smbolos no Flash

295

O boto Advanced est disponvel quando se est no modo bsico da caixa de dilogo Create New Symbol.
10. Clique

na caixa de seleo Export for ActionScript (Exportar para ActionScript) na seo Linkage (Vinculao). A ativao dessa opo permite anexar instncias desse smbolo dinamicamente aos documentos do Flash durante a execuo.

11.

Insira o valor de identificador animal_id e defina a classe ActionScript 2.0 como Animal (para que corresponda ao nome de classe especificado na etapa 3). a caixa de seleo Export in First Frame (Exportar no primeiro quadro) e clique em OK para aplicar as alteraes e fechar a caixa de dilogo. Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme). O painel Output exibe o texto da funo construtora da classe Animal.
NO TA

12. Selecione

13.

Se precisar modificar as propriedades de vinculao de Movie Clip, clique com o boto direito do mouse no smbolo na biblioteca do documento e selecione Properties (Propriedades) ou Linkage no menu de contexto.

Compilando e exportando classes


Por padro, as classes usadas por um arquivo SWF so empacotadas e exportadas no primeiro quadro desse arquivo. Tambm possvel especificar um quadro diferente onde as classes sero empacotadas e exportadas. Esse recurso til, por exemplo, quando um arquivo SWF usa muitas classes que exigem um longo tempo de download (como componentes). Se as classes forem exportadas no primeiro quadro, o usurio dever aguardar o download de todo o cdigo das classes at o quadro aparecer. Especificando um quadro posterior na Timeline, voc pode exibir uma curta animao do carregamento nos primeiros quadros da Timeline durante o download do cdigo das classes do quadro posterior.
Para especificar o quadro de exportao das classes de um documento Flash:
1.

Selecione File > New e, em seguida, selecione Flash Document (Documento Flash). Salve o novo documento como exportClasses.fla. Renomeie a camada padro como content, arraste um componente ProgressBar do painel Components (Components) at o Stage e atribua o nome de instncia my_pb. Crie uma nova camada, arraste-a por cima da camada de contedo e renomeia-a como actions.

2.

3.

296

Classes

4.

Adicione o seguinte cdigo ActionScript ao Frame 1 (Quadro 1) da camada actions na Timeline principal:
my_pb.indeterminate = true;

5.

Crie um novo quadro-chave no Frame 2 (Quadro 2) da camada actions e adicione o seguinte cdigo ActionScript:
var classesFrame:Number = 10; if (_framesloaded < classesFrame) { trace(this.getBytesLoaded() + " of " + this.getBytesTotal() + " bytes loaded"); gotoAndPlay(1); } else { gotoAndStop(classesFrame); }

6.

Crie um novo quadro-chave no Frame 10 da camada actions e adicione o seguinte ActionScript:


stop();

7.

Crie um novo quadro-chave no Frame 10 da camada de contedo e arraste diversos componentes para o Stage. Clique com o boto direito do mouse em cada componente (exceto ProgressBar) no painel Library (Biblioteca) e selecione Linkage (Vinculao) em um menu de contexto para iniciar a caixa de dilogo Linkage Properties (Propriedades de vinculao). Na caixa de dilogo Linkage Properties, verifique se Export for ActionScript (Exportar para ActionScript) est selecionada, desmarque a seleo da caixa Export in First Frame (Exportar no primeiro quadro) e clique em OK. File > Publish Settings (Configuraes de publicao). Na caixa de dilogo Publish Settings, selecione a guia Flash. no boto Settings perto do menu pop-up da verso do ActionScript para abrir a caixa de dilogo ActionScript Settings (Configuraes do ActionScript). Na caixa de texto Export Frame for Classes (Exportar quadro para classes), digite o nmero do quadro para o qual deseja exportar o cdigo das classes (Frame 10). Se o quadro especificado no existir na Timeline, voc receber uma mensagem de erro ao publicar o arquivo SWF.

8.

9.

10. Selecione 11.

12. Clique

13.

14. Clique

em OK para fechar a caixa de dilogo ActionScript Settings e, em seguida, clique em OK para fechar a caixa de dilogo Publish Settings.

Compilando e exportando classes

297

15.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. Se o painel Components for carregado rpido demais, selecione View (Exibir) > Simulate Download (Simular download) no arquivo SWF. O Flash simula o download do documento Flash em uma velocidade menor, o que permite que voc veja a animao do componente de barra de progresso enquanto ocorre o download dos arquivos de classe.

Para obter mais informaes sobre arquivos ASO, consulte Usando arquivos ASO na pgina 298.

Usando arquivos ASO


Durante a compilao, o Flash cria, s vezes, arquivos com extenses .aso no subdiretrio /aso do diretrio de caminho de classe global padro (consulte Sobre a definio e a modificao do caminho de classe na pgina 255). A extenso .aso significa ActionScript object(ASO, objeto do ActionScript). Para cada arquivo do ActionScript 2.0 importado implcita ou explicitamente e compilado com xito, o Flash gera um arquivo ASO. O arquivo contm o bytecode produzido a partir do arquivo ActionScript (AS) associado. Portanto, esses arquivos contm a forma compilada (o bytecode) de um arquivo de classe. O Flash s precisar gerar novamente um arquivo ASO quando ocorrerem os seguintes cenrios:

O arquivo AS correspondente tiver sido modificado. Os arquivos do ActionScript que contm as definies importadas ou usadas pelo arquivo correspondente do ActionScript tiverem sido modificados. Os arquivos do ActionScript includos pelo arquivo correspondente do ActionScript tiverem sido modificados.

O compilador cria arquivos ASO para fins de armazenamento em cache. Observe que a sua primeira compilao mais lenta do que as compilaes subseqentes. Isso ocorre porque somente os arquivos AS que foram alterados so compilados em arquivos ASO. No caso dos arquivos AS no alterados, o compilador l o bytecode j compilado diretamente do arquivo ASO, em vez de recompilar o arquivo AS. O formato de arquivo ASO um formato intermedirio desenvolvido apenas para uso interno. Ele no um formato documentado e no deve ser redistribudo. Se perceber que o Flash est compilando verses mais antigas de um arquivo que voc editou, exclua os arquivos ASO e recompile-os. Se planejar excluir os arquivos ASO, exclua-os quando o Flash no estiver executando outras operaes, como verificao de sintaxe ou exportao de SWFs.

298

Classes

Para excluir arquivos ASO:

Se voc estiver editando um arquivo FLA e desejar excluir um arquivo ASO, selecione uma das opes a seguir no ambiente de criao:

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. 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.

Se voc estiver editando um documento ActionScript na janela Script:


H um limite para a quantidade de cdigo que pode ser colocada em uma nica classe: o bytecode de uma definio de classe em um arquivo SWF exportado no poder ser superior a 32.767 bytes. Se o bytecode exceder esse limite, ser exibida uma mensagem de aviso. No possvel prever o tamanho da representao de bytecode de determinada classe, mas classes com at 1.500 linhas geralmente no ultrapassam o limite. Caso a classe ultrapasse o limite, mova parte do cdigo para outra classe. Em geral, uma prtica recomendada de OOP manter as classes relativamente curtas.

Noes bsicas sobre classes e escopo


Ao mover o cdigo ActionScript para classes, talvez voc precise alterar o modo como a palavra-chave this usada. Por exemplo, se um mtodo de determinada classe usar uma funo de retorno de chamada (como o mtodo onLoad() da classe LoadVars), poder ser difcil saber se a palavra-chave this se refere classe ou ao objeto LoadVars. Nessa situao, talvez seja necessrio criar um ponteiro para a classe atual, como mostra o exemplo a seguir.
Para compreender o escopo e os arquivos de classes externos:
1.

Selecione File (Arquivo) > New (Novo), selecione ActionScript File (Arquivo ActionScript) e, em seguida, clique em OK. Digite ou cole o seguinte cdigo na janela Script:
/** Classe do produto Product.as */ class Product { private var productsXml:XML; // construtor

2.

Noes bsicas sobre classes e escopo

299

// targetXmlStr - seqncia de caracteres, contm o caminho para um arquivo XML function Product(targetXmlStr:String) { /* Cria uma referncia local classe atual. Mesmo que esteja dentro do manipulador de eventos onLoad do XML, voc pode fazer referncia classe atual, em vez de somente ao pacote XML. */ var thisObj:Product = this; // Cria uma varivel local, usada para carregar o arquivo XML. var prodXml:XML = new XML(); prodXml.ignoreWhite = true; prodXml.onLoad = function(success:Boolean) { if (sucesso) { /* Se o XML for carregado e analisado com sucesso, defina a varivel productsXml da classe para o documento XML analisado e chame a funo init. */ thisObj.productsXml = this; thisObj.init(); } else { /* Houve erro ao carregar o arquivo XML. */ trace("error loading XML"); } }; // Comece a carregar o documento XML. prodXml.load(targetXmlStr); } public function init():Void { // Exiba o pacote XML. trace(this.productsXml); } }

Como voc est tentando fazer referncia varivel de membro privada em um manipulador onLoad, a palavra-chave this se refere instncia prodXml, e no classe Product, como era de se esperar. Por isso, voc deve criar um ponteiro para o arquivo de classes local para que possa fazer referncia direta classe do manipulador onLoad. Agora voc poder usar essa classe com um documento do Flash.
3. 4. 5. 6.

Salve o cdigo anterior do ActionScript como Product.as. Crie um novo documento do Flash chamado testProduct.fla no mesmo diretrio. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal. Digite o seguinte ActionScript no painel Actions (Aes):
var myProduct:Product = new Product("http://www.helpexamples.com/ crossdomain.xml");

300

Classes

7.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar esse cdigo no ambiente de teste. O contedo do documento XML especificado exibido no painel Output (Sada).

Outro tipo de escopo que voc encontrar ao trabalhar com essas classes so as variveis e as funes estticas. A palavra-chave static determina que uma varivel ou funo seja criada somente uma vez por classe, em vez de ser criada em todas as instncias dessa classe. Voc pode acessar um membro esttico da classe sem criar uma instncia da classe usando a sintaxe someClassName.username. Para obter mais informaes sobre variveis e funes estticas, consulte Sobre propriedades (membros) e mtodos pblicos, privados e estticos na pgina 262 e Usando membros de classe na pgina 269. Outra vantagem das variveis estticas que elas no 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 instncias da classe o Flash criou. Como a varivel numInstances esttica, ela criada apenas uma vez para a classe inteira, e no para cada instncia.
Para usar a palavra-chave static:
1. 2.

Selecione File > New, selecione ActionScript File e, em seguida, clique em OK. Digite o seguinte cdigo na janela Script:
class User { private static var numInstances:Number = 0; public function User() { User.numInstances++; } public static function get instances():Number { return User.numInstances; } }

O cdigo anterior define uma classe User que controla o nmero de vezes que o construtor foi chamado. Uma varivel esttica privada (User.numInstances) incrementada no mtodo construtor.
3. 4.

Salve o documento como User.as. Selecione File > New, selecione Flash Document (Documento do Flash) para criar um novo arquivo FLA e salve-o no mesmo diretrio que o arquivo User.as. Digite o seguinte cdigo ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
trace(User.instances); // 0 var user1:User = new User(); trace(User.instances); // 1

5.

Noes bsicas sobre classes e escopo

301

var user2:User = new User(); trace(User.instances); // 2

A primeira linha de cdigo chama o mtodo getter instances() esttico, que retorna o valor da varivel numInstances esttica privada. O restante do cdigo cria novas instncias da classe User e exibe o valor atual retornado pelo mtodo getter instances().
6.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar os documentos.

Para obter informaes sobre o uso da palavra-chave this em classes, consulte Sobre o uso da palavra-chave this em classes na pgina 277.

Sobre classes de nvel superior e internas


Alm das construes e dos elementos de linguagem bsicos do ActionScript (as repeties for e while loops, por exemplo) e dos tipos de dados primitivos (nmeros, seqncias de carateres e booleanos) descritos anteriormente nesse manual (consulte o Captulo 4, Dados e tipos de dados, na pgina 75 e o Captulo 5, Fundamentos da sintaxe e da linguagem, na pgina 119), o ActionScript tambm fornece vrias classes internas (tipos de dados complexos). Essas classes oferecem vrios recursos e funcionalidades de script. Nos captulos anteriores, voc usou classes de nvel superior e outras classes internas que fazem parte da linguagem ActionScript e continuar a us-las nos captulos restantes. Vrias classes fornecidas com o Flash so usadas para criar interatividade e funcionalidade nos arquivos SWF e tambm podem ser usadas para criar aplicativos complexos. Por exemplo, voc pode usar a classe Math para executar equaes em seus aplicativos ou a classe BitmapData para criar pixels e animaes com script. As classes de nvel superior, listadas em Classes de nvel superior na pgina 304, so criadas no Flash Player. Na caixa de ferramentas Actions (Aes), essas classes esto localizadas no diretrio Classes do ActionScript 2.0. Algumas dessas classes se baseiam na especificao de linguagem ECMAScript (ECMA-262) edio 3 e so chamadas classes bsicas do ActionScript. Array, Boolean, Date e Math so exemplos de classes bsicas. Para obter mais informaes sobre pacotes, consulte Trabalhando com pacotes na pgina 244. Voc pode encontrar as classes ActionScript instaladas no disco rgido. Voc pode encontrar as pastas de classes aqui:

Windows: Hard Disk\Documents and Settings\user\Local Settings\Application Data\Macromedia\Flash 8\idioma\Configuration\Classes. Macintosh: Hard Disk/Users/usurio/Library/Application Support/Macromedia/Flash 8/ idioma/Configuration/Classes.

Leia o documento Read Me localizado nesse diretrio para obter mais informaes sobre a estrutura.

302

Classes

Para entender a diferena entre as classes bsicas do ActionScript e as classes especficas do Flash, considere a distino entre JavaScript bsico e cliente. As classes JavaScript do cliente permitem controlar o ambiente do cliente (o contedo do navegador e da pgina da Web), e as classes especficas do Flash permitem controlar, durante a execuo, a aparncia e o comportamento de um aplicativo Flash. As demais classes internas do ActionScript so especficas do modelo de objeto do Macromedia Flash e do Flash Player. Camera, MovieClip e LoadVars so exemplos dessas classes. Outras classes so organizadas em pacotes, como flash.display. Todas essas classes so s vezes chamadas classes internas (classes predefinidas que podem ser usadas para adicionar funcionalidade aos aplicativos). As sees a seguir apresentam classes internas do ActionScript e descrevem as tarefas bsicas que podem ser realizadas com essas classes. Para obter uma viso geral sobre o trabalho com classes e objetos na programao orientada a objeto, consulte Sobre como trabalhar com classes internas na pgina 312. Exemplos de cdigo usando essas classes esto includos em todo o manual Learning ActionScript 2.0 in Flash. Para obter informaes sobre elementos de linguagem (como constantes, operadores e diretivas), consulte o Captulo 5, Fundamentos da sintaxe e da linguagem, na pgina 119. Para obter mais informaes sobre classes internas e de nvel superior, consulte os seguintes tpicos:

Classes de nvel superior na pgina 304 Pacote flash.display na pgina 308 Pacote flash.external na pgina 309 Pacote flash.filters na pgina 309 Pacote flash.geom na pgina 310 Pacote flash.net na pgina 311 Pacote flash.text na pgina 311 Pacote mx.lang na pgina 311 Pacotes System e TextField na pgina 312

Sobre classes de nvel superior e internas

303

Outros elementos de linguagem


H outros elementos de linguagem que compem o ActionScript, fora das classes. So eles: diretivas, constantes, funes globais, propriedades globais, operadores e instrues. Para obter informaes sobre como usar cada um desses elementos de linguagem, consulte os seguintes tpicos:

Captulo 5, Fundamentos da sintaxe e da linguagem Captulo 6, Funes e mtodos

Voc pode encontrar uma lista desses elementos de linguagem nas seguintes sees do ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript):

%{Compiler Directives}% %{Constants}% %{Global Functions}% %{Global Properties}% %{Operators}% %{Statements}%

Classes de nvel superior


O nvel superior contm as classes e as funes globais do ActionScript, muitas das quais fornecem funcionalidade bsica a seus aplicativos. As classes bsicas, emprestadas diretamente do ECMAScript, incluem Array, Boolean, Date, Error, Function, Math, Number, Object, String e System. Para descobrir mais informaes sobre cada classe, consulte a seguinte tabela.
N OT A 304

As classes CustomActions e XMLUI esto disponveis somente no ambiente de criao do Flash.

Classe
Acessibilidade

Description (Descrio)
A classe Accessibility gerencia a comunicao entre os arquivos SWF e os aplicativos de leitura de tela. Use os mtodos dessa classe junto com a propriedade _accProps global para controlar as propriedades acessveis de clipes de filme, botes e campos de texto durante a execuo. Consulte %{Accessibility}%. A classe Array representa os arrays no ActionScript, e todos os objetos de array so instncias dessa classe. A classe Array contm mtodos e propriedades para o trabalho com os objetos de array. Consulte %{Array}%.

Array

Classes

Classe
AsBroadcaster

Description (Descrio)
Fornece recursos de notificao de eventos e gerenciamento de ouvinte que podem ser adicionados a outros objetos. Consulte %{AsBroadcaster}%. A classe Boolean um envoltrio para valores booleanos (true ou false). Consulte %{Boolean}%.>. A classe Button fornece mtodos, propriedades e manipuladores de eventos para trabalhar com botes. Consulte %{Button}%. Observe que a classe interna Button diferente da classe de componente Button, associada ao componente Button de verso 2. A classe Camera fornece acesso cmera do usurio, se houver uma instalada. Quando ela usada com o Flash Communication Server, o arquivo SWF pode capturar, transmitir e gravar imagens e vdeo da cmera do usurio. Consulte %{Camera}%. A classe Color permite definir o valor de cor RGB (vermelho, verde e azul) e a transformao de cor de instncias de clipes de filme, bem como recuperar esses valores aps eles serem definidos. A classe Color tornou-se obsoleta no Flash Player 8 tendo sido substituda pela classe ColorTransform. Para obter mais informaes sobre transformaes de cores, consulte %{ColorTransform (flash.geom.ColorTransform)}%. A classe ContextMenu permite controlar o contedo do menu de contexto do Flash Player durante a execuo. Voc pode associar objetos ContextMenu separados a objetos MovieClip, Button ou TextField usando a propriedade menu disponvel para essas classes. Tambm possvel adicionar itens de menu personalizados a um objeto ContextMenu usando a classe ContextMenuItem. Consulte %{ContextMenu}%. 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}%. A classe CustomActions permite que voc gerencie qualquer ao do cliente registrada com a ferramenta de criao. Consulte %{CustomActions}%. A classe Date mostra como as datas e as horas so representadas no ActionScript e oferece suporte s operaes de manipulao de datas e horas. Essa classe tambm permite obter a data e a hora atuais a partir do sistema operacional. Consulte %{Date}%.

Boolean Button

Camera (Cmera)

Color

ContextMenu

ContextMenuItem

CustomActions

Date

Sobre classes de nvel superior e internas

305

Classe
Error

Description (Descrio)
A classe Error contm informaes sobre os erros que ocorrem nos scripts durante a execuo. Em geral, use a instruo throw para gerar uma condio de erro, que voc pode manipular com uma instruo try..catch..finally. Consulte %{Error}%. A classe Function a representao de classe de todas as funes do ActionScript, incluindo aquelas que so nativas do ActionScript e as que voc define. Consulte %{Function}%. A classe Key fornece mtodos e propriedades para obter informaes sobre o teclado e os pressionamentos de teclas. Consulte %{Key}%. A classe LoadVars permite transferir variveis entre um arquivo SWF e um servidor em pares nome/valor. Consulte %{LoadVars}%. A classe LocalConnection permite desenvolver arquivos SWF que enviam instrues uns para os outros sem usar o mtodo fscommand() ou o JavaScript. Consulte %{LocalConnection}%. A classe Math permite o acesso conveniente a constantes matemticas comuns, bem como fornece vrias funes matemticas comuns. Todas as propriedades e mtodos da classe Math so estticos e devem ser chamados com a sintaxe Math.mtodo(parmetro) ou Math.constante. Consulte %{Math}%. A classe Microphone fornece acesso ao microfone do usurio, se houver um instalado. Quando ela usada com o Flash Communication Server, o arquivo SWF pode transmitir e gravar udio a partir do microfone do usurio. Consulte %{Microphone}%. A classe Mouse fornece controle sobre o mouse em um arquivo SWF; por exemplo, essa classe permite que voc oculte ou mostre o ponteiro do mouse. Consulte %{Mouse}%. Cada clipe de filme em um arquivo SWF uma instncia da classe MovieClip. Use os mtodos e propriedades dessa classe para controlar objetos de clipe de filme. Consulte %{MovieClip}%. Esta classe permite implementar retornos de chamada de ouvinte que fornecem informaes de status enquanto os arquivos SWF, JPEG, GIF e PNG esto sendo carregados em instncias de clipes de filme. Consulte %{MovieClipLoader}%. A classe NetConnection estabelece uma conexo de fluxo local para reproduzir um arquivo FLV (Flash Video) de um endereo HTTP (Hypertext Transfer Protocol, Protocolo de Transferncia de Hipertexto) ou do sistema de arquivos local. Consulte %{NetConnection}%.

Function

Key LoadVars LocalConnection

Math

Microphone (Microfone)

Mouse

MovieClip

MovieClipLoader

NetConnection

306

Classes

Classe
NetStream

Description (Descrio)
A classe NetStream controla a reproduo de arquivos FLV de um sistema de arquivos local ou de um endereo HTTP. Consulte %{NetStream}%. A classe Number um envoltrio para o tipo de dados de nmero primitivo. Consulte %{Number}%. A classe Object encontra-se na raiz da hierarquia de classes do ActionScript; todas as outras classes herdam seus mtodos e propriedades. Consulte %{Object}%. A classe PrintJob permite imprimir o contedo de um arquivo SWF, incluindo o contedo renderizado dinamicamente, e documentos de vrias pginas. Consulte %{PrintJob}%. A classe Selection permite definir e controlar o campo de texto no qual est localizado o ponto de insero (o campo de texto que possui o foco). Consulte %{Selection}%. A classe SharedObject oferece o armazenamento de dados local persistente no computador cliente, de maneira semelhante aos cookies. Essa classe permite o compartilhamento de dados em tempo real entre objetos no computador do cliente. Consulte %{SharedObject}%. A classe Sound fornece controle sobre os sons em um arquivo SWF. Consulte %{Sound}%. A classe Stage fornece informaes sobre as dimenses, o alinhamento e o modo de escala de um arquivo SWF. Ela tambm informa eventos de redimensionamento do Stage (Palco). Consulte %{Stage}%. A classe String um envoltrio para o tipo de dados String primitivo, que permite o uso dos mtodos e das propriedades do objeto String para manipular tipos de valores String primitivos. Consulte %{String}%. A classe System fornece informaes sobre o Flash Player e o sistema em que o Flash Player est em execuo (por exemplo, resoluo da tela e linguagem do sistema atual). Ela tambm permite que voc mostre ou oculte o painel Settings (Configuraes) do Flash Player e modifique as configuraes de segurana do arquivo SWF. Consulte %{System}%. A classe TextField fornece controle sobre campos de texto dinmicos e de entrada, como a recuperao de informaes de formatao, a chamada de manipuladores de eventos e a alterao de propriedades como alfa ou cor de fundo. Consulte %{TextField}%.

Number Object

PrintJob

Selection

SharedObject

Sound Stage

String

System

TextField

Sobre classes de nvel superior e internas

307

Classe
TextFormat TextSnapshot Video

Description (Descrio)
A classe TextFormat permite aplicar estilos de formatao a caracteres e pargrafos em um objeto TextField. Consulte %{TextFormat}%. O objeto TextSnapshot permite acessar texto esttico, bem como criar o seu layout, em um clipe de filme. Consulte %{TextSnapshot}%. A classe Video permite exibir objetos de vdeo em um arquivo SWF. Voc pode us-la com o Flash Communication Server para exibir fluxos de vdeo ao vivo em um arquivo SWF file ou no Flash para exibir um arquivo FLV (Flash Video). Consulte %{Video}%. Esta classe contm mtodos e propriedades usados com objetos XML. Consulte %{XML}%. A classe XMLNode representa um nico n em uma rvore de documentos XML. Trata-se da superclasse da classe XML. Consulte %{XMLNode}%. A classe XMLSocket permite criar uma conexo de soquete persistente entre um computador servidor e um cliente que executa o Flash Player. Os soquetes do cliente permitem a transferncia de dados de baixa latncia, como a necessria para aplicativos de batepapo em tempo real. Consulte %{XMLSocket}%. O objeto XMLUI permite a comunicao com arquivos SWF que so usados como uma interface do usurio personalizada para os recursos de extensibilidade da ferramenta de criao do Flash (como Behaviors, Commands, Effects e Tools). Consulte %{XMLUI}%.

XML XMLNode

XMLSocket

XMLUI

Pacote flash.display
O pacote flash.display contm a classe BitmapData que pode ser usada para criar exibies visuais.
Classe
BitmapData

Description (Descrio)
A classe BitmapData permite criar imagens bitmaps opacas ou transparentes, dimensionadas de forma arbitrria, no documento e manipul-las de vrias maneiras durante a execuo. Consulte %{BitmapData (flash.display.BitmapData)}%.

308

Classes

Pacote flash.external
O pacote flash.external permite que voc se comunique com o recipiente do Flash Player usando cdigo ActionScript. Por exemplo, se voc incorporar um arquivo SWF em uma pgina HTML, essa pgina ser o recipiente. Voc poderia se comunicar com a pgina HTML usando a classe ExternalInterface e o JavaScript. Tambm chamada de API externa.
Classe
ExternalInterface

Description (Descrio)
A classe ExternalInterface a API External, um subsistema que permite a comunicao entre o ActionScript e o recipiente do Flash Player (como uma pgina HTML que usa o JavaScript) ou um aplicativo desktop que usa o Flash Player. Consulte %{ExternalInterface (flash.external.ExternalInterface)}%.

Pacote flash.filters
O pacote flash.filters contm classes para os efeitos de filtro de bitmap disponveis no Flash Player 8. Os filtros permitem aplicar efeitos visuais sofisticados, como embaamento, chanfro, brilho e sombreamento, s instncias de Image e MovieClip. Para obter mais informaes sobre cada classe, consulte as referncias cruzadas fornecidas na tabela a seguir.
Classe
BevelFilter

Description (Descrio)
A classe BevelFilter permite adicionar um efeito de chanfro a uma instncia de clipe de filme. Consulte %{BevelFilter
(flash.filters.BevelFilter)}%. A classe BitmapFilter uma classe base para todos os efeitos de filtro. Consulte %{BitmapFilter (flash.filters.BitmapFilter)}%.

BitmapFilter BlurFilter

A classe BlurFilter permite aplicar um efeito de embaamento a instncias de clipes de filme. Consulte %{BlurFilter
(flash.filters.BlurFilter)}%. A classe ColorMatrixFilter permite aplicar uma matriz de transformao 4x5 aos valores alfa e de cor RGBA (vermelho, verde, azul e alfa) de cada pixel na imagem de entrada. Aps aplicar a transformao, voc poder produzir um resultado com um novo conjunto de valores alfa e de cor RGBA. Consulte %{ColorMatrixFilter (flash.filters.ColorMatrixFilter)}%. A classe ConvolutionFilter permite aplicar um efeito de filtro de convoluo de matriz. Consulte %{ConvolutionFilter (flash.filters.ConvolutionFilter)}%.

ColorMatrixFilter

ConvolutionFilter

Sobre classes de nvel superior e internas

309

Classe

Description (Descrio)

DisplacementMapFilte A classe DisplacementMapFilter permite usar os valores de pixel de r uma imagem especificada (imagem de mapa de deslocamento) para deslocar espacialmente a instncia original (um clipe de filme) qual o filtro foi aplicado. Consulte %{DisplacementMapFilter (flash.filters.DisplacementMapFilter)}%. DropShadowFilter A classe DropShadowFilter permite adicionar um sombreamento a um clipe de filme. Consulte %{DropShadowFilter (flash.filters.DropShadowFilter)}%. A classe GlowFilter permite adicionar um efeito de brilho a um clipe de filme. Consulte %{GlowFilter (flash.filters.GlowFilter)}%. A classe GradientBevelFilter permite aplicar um efeito de chanfro gradiente a um clipe de filme. Consulte %{GradientBevelFilter (flash.filters.GradientBevelFilter)}%. A GradientGlowFilter permite aplicar um efeito de gradiente de brilho a um clipe de filme. Consulte %{GradientGlowFilter (flash.filters.GradientGlowFilter)}%.

GlowFilter GradientBevelFilter

GradientGlowFilter

Pacote flash.geom
O pacote flash.geom contm classes de geometria, como pontos, retngulos e matrizes de transformao. Essas classes oferecem suporte classe BitmapData e ao recurso de armazenamento de bitmap em cache. Para obter mais informaes sobre cada classe, consulte as referncias cruzadas fornecidas na tabela a seguir.
Classe
ColorTransform

Description (Descrio)
A classe ColorTransform permite definir matematicamente o valor de cor RGB (vermelho, verde e azul) e a transformao de cor de uma instncia. possvel recuperar esses valores aps eles serem definidos. Consulte %{ColorTransform (flash.geom.ColorTransform)}%. Representa uma matriz de transformao que determina como mapear pontos de um espao de coordenadas para outro. Consulte %{Matrix (flash.geom.Matrix)}%. O objeto Point representa um local em um sistema de coordenadas bidimensional, onde x representa o eixo horizontal e y representa o eixo vertical. Consulte %{Point (flash.geom.Point)}%.

Matrix

Point

310

Classes

Classe
Rectangle (Retngulo) Transform (Transformar)

Description (Descrio)
A classe Rectangle usada para criar e modificar objetos Rectangle. Consulte %{Rectangle (flash.geom.Rectangle)}%. Coleta dados sobre transformaes de cores e manipulaes coordenadas que so aplicadas em uma instncia de objeto. Consulte %{Transform (flash.geom.Transform)}%.

Pacote flash.net
O pacote flash.net contm classes que permitem fazer upload e download de um ou mais arquivos entre o computador do usurio e o servidor. Para obter mais informaes sobre cada classe, consulte as referncias cruzadas fornecidas na tabela a seguir.
Classe
FileReference

Description (Descrio)
A classe FileReference permite fazer upload e download de um ou mais arquivos entre o computador do usurio e um servidor. Consulte %{FileReference (flash.net.FileReference)}%. A classe FileReferenceList permite fazer upload de um ou mais arquivos do computador do usurio em um servidor. Consulte %{FileReferenceList (flash.net.FileReferenceList)}%.

FileReferenceList

Pacote flash.text
O pacote flash.text contm a classe TextRenderer para trabalhar com o recurso sem serrilhado avanado disponvel no Flash Player 8.
Classe
TextRenderer

Description (Descrio)
Esta classe oferece a funcionalidade para o recurso sem serrilhado avanado no Flash Player 8. Consulte %{TextRenderer (flash.text.TextRenderer)}%.

Pacote mx.lang
O pacote mx.lang contm a classe Locale para trabalhar com texto multilnge.
Classe
Locale

Description (Descrio)
Essa classe permite controlar como o texto multilnge exibido em um arquivo SWF. Consulte %{Locale (mx.lang.Locale)}%.

Sobre classes de nvel superior e internas

311

Pacotes System e TextField


O pacote System contm as classes capabilities, IME e security. Essas classes controlam as configuraes do cliente que podem afetar o seu aplicativo no Flash Player. Para obter mais informaes sobre cada classe, consulte as referncias cruzadas fornecidas na tabela a seguir.
Classe
capabilities

Description (Descrio)
A classe Capabilities determina as capacidades do sistema e do Flash Player que est hospedando o arquivo SWF. Isso permite personalizar o contedo para diversos formatos. Consulte %{capabilities (System.capabilities)}%. A classe IME permite manipular diretamente o IME (Input Method Editor, Editor de mtodo de entrada) do sistema operacional no aplicativo Flash Player executado em um computador cliente. Consulte %{IME (System.IME)}%. A classe Security contm mtodos que especificam como os arquivos SWF de diversos domnios podem se comunicar uns com os outros. Consulte %{security (System.security)}%.

IME

segurana

O pacote TextField contm a classe StyleSheet que usada para aplicar estilos CSS (Cascading StyleSheets, Folhas de estilos em cascata) ao texto.
Classe
StyleSheet

Description (Descrio)
A classe StyleSheet permite criar um objeto de folha de estilos que contm as regras de formatao de texto, como tamanho da fonte, cor e outros estilos de formatao. Consulte %{StyleSheet (TextField.StyleSheet)}%.

Sobre como trabalhar com classes internas


Na programao orientada a objeto, uma classe define uma categoria de objeto. Uma classe descreve as propriedades (dados) e o comportamento (mtodos) de um objeto, da mesma maneira que uma planta arquitetnica descreve as caractersticas de uma construo. Para obter informaes sobre classes e outros conceitos de programao orientada a objetos, consulte as seguintes sees:

Princpios da programao orientada a objeto na pgina 246 Criando arquivos de classes personalizados na pgina 249

312

Classes

O Flash 8 possui muitas classes internas que voc pode usar no cdigo (consulte Sobre classes de nvel superior e internas na pgina 302), para ajudar a adicionar interatividade aos aplicativos. Para usar as propriedades e os mtodos definidos por uma classe interna, voc geralmente cria primeiro uma instncia dessa classe (exceto no caso de classes com membros estticos). A relao entre uma instncia e sua classe semelhante relao entre uma casa e sua planta arquitetnica, conforme discutido em Sobre classes de nvel superior e internas na pgina 302. Para obter mais informaes sobre o uso de classes internas no Flash 8, consulte os seguintes tpicos:

Sobre a criao de uma nova instncia de uma classe interna na pgina 313 Acessando propriedades de objetos internos na pgina 313 Sobre a chamada de mtodos de objetos internos na pgina 314 Sobre os membros de classe (estticos) na pgina 315 Pr-carregando arquivos de classe na pgina 316 Excluindo classes na pgina 315

Sobre a criao de uma nova instncia de uma classe interna


Para criar uma instncia de uma classe do ActionScript, use o operador new para chamar a funo construtora da classe. A funo construtora sempre tem o mesmo nome da classe e retorna uma instncia da classe, que voc normalmente atribui a uma varivel. Por exemplo, o cdigo a seguir cria um novo objeto Sound:
var song_sound:Sound = new Sound();

Em alguns casos, no necessrio criar uma instncia de uma classe para usar suas propriedades e mtodos. Para obter mais informaes, consulte Sobre os membros de classe (estticos) na pgina 315.

Acessando propriedades de objetos internos


Use o operador ponto (.) para acessar o valor de uma propriedade em um objeto. Insira o nome do objeto esquerda do ponto e o nome da propriedade direita. Por exemplo, na instruo a seguir, my_obj o objeto e firstName a propriedade:
my_obj.firstName

O cdigo a seguir cria um novo objeto Array e, em seguida, mostra sua propriedade length:

Sobre como trabalhar com classes internas

313

var my_array:Array = new Array("apples", "oranges", "bananas"); trace(my_array.length); // 3

Tambm possvel usar o operador de acesso de array ([]) para acessar as propriedades de um objeto; por exemplo, voc pode us-lo para fins de depurao. O exemplo a seguir executa uma repetio em um objeto para exibir cada uma de suas propriedades.
Para executar uma repetio no contedo de um objeto:
1. 2.

Crie um novo documento do Flash e salve-o como forin.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var results:Object = {firstName:"Tommy", lastName:"G", age:7, avg:0.336, b:"R", t:"L"}; for (var i:String in results) { trace("the value of [" + i + "] is: " + results[i]); }

O cdigo anterior define um novo objeto chamado de resultados e define valores para firstName, lastName, age, avg, b e t. Uma repetio for..in apresenta cada propriedade no objeto de resultados e apresenta o valor para o painel Output (Sada).
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.

Para obter mais informaes sobre operadores, incluindo operadores de acesso dot e array, consulte Sobre operadores na pgina 185. Para obter mais informaes sobre mtodos e propriedades, consulte Captulo 6, Funes e mtodos, na pgina 213. Para obter exemplos de como trabalhar com propriedades da classe interna MovieClip, consulte o Captulo 11, Trabalhando com clipes de filme, na pgina 369. Para obter exemplos de como trabalhar com propriedades das classes TextField, String, TextRenderer e TextFormat, consulte o Captulo 12, Trabalhando com texto e seqncias de caracteres, na pgina 403.

Sobre a chamada de mtodos de objetos internos


Voc pode chamar o mtodo de um objeto usado o operador ponto (.) seguido do mtodo. Por exemplo, o cdigo a seguir cria um novo objeto Sound e chama o seu mtodo setVolume():
var my_sound:Sound = new Sound(this); my_sound.setVolume(50);

Para obter exemplos de como trabalhar com mtodos da classe interna MovieClip, consulte o Captulo 11, Trabalhando com clipes de filme, na pgina 369. Para obter exemplos de como trabalhar com mtodos das classes internas TextField, String, TextRenderer e TextFormat, consulte o Captulo 12, Trabalhando com texto e seqncias de caracteres, na pgina 403.

314

Classes

Sobre os membros de classe (estticos)


Algumas classes internas do ActionScript apresentam membros de classe (membros estticos). Os membros de classe (propriedades e mtodos) so acessados ou chamados no em uma instncia da classe, mas no prprio nome da classe. Portanto, no necessrio criar uma instncia da classe para usar essas propriedades e mtodos. Por exemplo, todas as propriedades da classe Math so estticas. O cdigo a seguir chama o mtodo max() da classe Math para determinar o maior de dois nmeros:
var largerNumber:Number = Math.max(10, 20); trace(largerNumber); // 20

Para obter mais informaes sobre mtodos estticos da classe Math, e exemplos de como uslos, consulte %{Math}% em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript).

Excluindo classes
Para reduzir o tamanho de um arquivo SWF, voc poder excluir classes da compilao, mas ainda ser capaz de acess-las e us-las para verificao de tipo. Por exemplo, voc poder fazer isso se estiver desenvolvendo um aplicativo que utilize vrios arquivos SWF ou bibliotecas compartilhadas, especialmente os que acessam vrias das mesmas classes. A excluso das classes ajudar a evitar que elas sejam duplicadas nesses arquivos. Para obter mais informaes sobre como excluir classes, consulte os seguintes tpicos:

Pr-carregando arquivos de classe na pgina 316

Para excluir classes da compilao:


1. 2.

Crie um novo arquivo XML. Atribua o nome Nome_do_arquivo_FLA_exclude.xml ao arquivo XML, onde Nome_do_arquivo_FLA o nome do arquivo FLA sem a extenso. Por exemplo, se o arquivo FLA for sellStocks.fla, o nome do arquivo XML dever ser sellStocks_exclude.xml.

3. 4.

Salve o arquivo no mesmo diretrio que o arquivo FLA. Coloque as seguintes marcas no arquivo XML:
<excludeAssets> <asset name="className1" /> <asset name="className2" /> </excludeAssets>

Sobre como trabalhar com classes internas

315

Os valores especificados para os atributos de nome nas marcas <asset> so os nomes das classes que voc deseja excluir do arquivo SWF. Adicione quantas classes precisar para o seu aplicativo. Por exemplo, o arquivo XML a seguir exclui as classes mx.core.UIObject e mx.screens.Slide do arquivo SWF:
<excludeAssets> <asset name="mx.core.UIObject" /> <asset name="mx.screens.Slide" /> </excludeAssets>

Para obter informaes sobre o pr-carregamento de classes, consulte Pr-carregando arquivos de classe na pgina 316.

Pr-carregando arquivos de classe


Essa seo descreve algumas das metodologias usadas para pr-carregamento e exportao de classes no Flash 8 (incluindo as classes usadas por componentes na verso 2 do Macromedia Component Architecture). Pr-carregamento envolve o carregamento de alguns dados para o arquivo SWF antes que o usurio comece a interagir com ele. O Flash importa classes no primeiro quadro de um arquivo SWF quando so usadas classes externas e esses dados so os primeiros elementos a serem carregados no arquivo SWF. Isso semelhante para as classes de componente, porque o framework para componentes tambm carregado no primeiro quadro de um arquivo SWF. Ao criar grandes aplicativos, o tempo de carregamento pode ser demorado quando necessrio importar dados; sendo assim, preciso lidar com esses dados de forma inteligente, conforme mostrado nos seguintes procedimentos. Como as classes so os primeiros dados a serem carregados, voc pode ter problemas ao criar uma barra de progresso ou ao carregar animaes se as classes forem carregadas antes da barra de progresso, porque desejvel que ela reflita o progresso do carregamento de todos os dados (incluindo classes). Portanto, carregue as classes depois de outras partes do arquivo SWF, mas antes de usar componentes. O seguinte procedimento mostra como alterar o quadro no qual as classes so carregadas no arquivo SWF.
Para selecionar um quadro diferente para o carregamento das classes no arquivo SWF:
1. 2. 3.

Selecione File > Publish Settings (Configuraes de publicao). Selecione a guia Flash e clique no boto Settings (Configuraes). Na caixa de texto Export Frame for Classes (Exportar quadro para classes), digite o nmero de um novo quadro para determinar quando as classes devem ser carregadas. Clique em OK.

4.

316

Classes

Voc no pode usar classes at que a reproduo atinja o quadro escolhido para o qual as classes devem ser carregadas. Por exemplo, como os componentes da verso 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), no poder usar nenhuma classe at que a reproduo atinja o Frame 3 e carregue os dados. Se voc quiser pr-carregar um arquivo que use classes, como as classes de componente da verso 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 padro, os componentes de interface de usurio exportam no Frame 1 do arquivo SWF; portanto, desmarque a opo Export in First Frame (Exportar no primeiro quadro) da caixa de dilogo Linkage (Vinculao) do componente. Se os componentes no forem carregados no primeiro quadro, voc pode criar uma barra de progresso personalizada para o primeiro quadro do arquivo SWF. No faa referncia 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 aps as classes ActionScript que eles usam.

Sobre como trabalhar com classes internas

317

318

Classes

CAPTULO 8

Herana
No Captulo 7, Classes,, voc aprendeu a criar arquivos de classes e como as classes podem ajud-lo a organizar o cdigo em arquivos externos. Voc tambm viu como organizar arquivos de classes em pacotes relacionados. O objetivo deste captulo mostrar como criar classes mais avanadas 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 mtodos e propriedades. Para obter mais informaes sobre herana, consulte Sobre herana na pgina 319. Para obter mais informaes sobre mtodos e propriedades, consulte Captulo 6, Funes e mtodos, na pgina 213. Para obter mais informaes sobre herana, consulte os seguintes tpicos:
Sobre herana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Sobre a criao de subclasses no Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Usando o polimorfismo em um aplicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

Sobre herana
No Captulo 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 cdigo da Timeline (Linha de tempo) para arquivos externos. Quando o cdigo movido para arquivos externos, mais fcil edit-lo. Agora que est familiarizado com os conceitos bsicos de criao de classes personalizadas, voc aprender uma tcnica de OOP (Object-Oriented Programming, Programao orientada a objeto) chamada criao de subclasses ou extenso 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 mtodos 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 mtodos da classe MovieClip. Tambm possvel criar um conjunto de classes como uma extenso de uma superclasse personalizada. Por exemplo, a classe Lettuce pode ser uma extenso da superclasse Vegetable. A subclasse geralmente define mtodos e propriedades adicionais que podem ser usados em seu aplicativo; portanto, ela estende a superclasse. As subclasses tambm substituem (fornecem suas prprias definies para) os mtodos herdados de uma superclasse. Se uma subclasse substituir um mtodo herdado da superclasse correspondente, voc no poder mais acessar a definio da superclasse dentro da subclasse. A nica exceo regra acima que, caso esteja na funo construtura da subclasse, voc poder acessar o construtor da superclasse usando a instruo super. Para obter mais informaes sobre substituio, consulte Substituindo mtodos e propriedades na pgina 324. Por exemplo, voc pode criar uma classe chamada Mammal, que define certas propriedades e comportamentos comuns a todos os mamferos e, em seguida, criar uma classe Cat que estenda essa classe. O uso de subclasses permite reutilizar o cdigo de modo que, em vez de recriar todo o cdigo 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 herana e a criao de subclasses so muito teis em aplicativos maiores, pois permitem criar vrias classes relacionadas que podem compartilhar funcionalidade. Por exemplo, voc poderia criar uma classe Employee que define as propriedades e os mtodos bsicos de um funcionrio tpico de uma empresa. Em seguida, poderia criar uma nova classe chamada Contractor que estende a classe Employee e herda todos os seus mtodos e propriedades. A classe Contractor poderia adicionar os seus prprios mtodos e propriedades ou substituir os mtodos e as propriedades definidos na classe Employee. Depois, voc poderia criar uma nova classe chamada Manager, que tambm estende a classe Employee e define mtodos e propriedades adicionais, como hire(), fire(), raise() e promote(). Voc tambm poderia estender uma subclasse, como Manager, e criar uma nova classe chamada Director, que, por sua vez, adiciona novos mtodos ou substitui os mtodos existentes. Toda vez que uma classe estendida, a nova classe herda todos os mtodos e propriedades atuais da subclasse. Se as classes no estivessem relacionadas, voc precisaria recriar cada mtodo e propriedade em cada arquivo de classe separado, mesmo que as classes relacionadas tivessem a mesma funcionalidade. Voc gastaria muito mais tempo no s codificando, como tambm depurando o aplicativo e mantendo um projeto caso uma lgica semelhante fosse alterada em vrios arquivos.

320

Herana

No ActionScript, voc usa a palavra-chave extends para estabelecer a herana entre uma classe e sua superclasse ou para estender uma interface. Para obter mais informaes sobre o uso da palavra-chave extends, consulte Sobre a criao de subclasses no Flash na pgina 321 e Sobre a criao de uma subclasse na pgina 322. Para obter mais informaes sobre a palavra-chave extends, consulte %{extends statement}% em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0).

Sobre a criao de subclasses no Flash


Na programao orientada a objeto, uma subclasse pode herdar as propriedades e os mtodos de outra classe, a superclasse. Voc pode estender suas classes personalizadas, bem como vrias das classes bsicas e do ActionScript do Flash Player, mas no pode estender a classe TextField nem as classes estticas, como Math, Key e Mouse. Para criar esse tipo de relacionamento entre duas classes, use a clusula extends da instruo class. Para especificar uma superclasse, use a seguinte sintaxe:
class SubClass extends SuperClass {}

A classe especificada em SubClass herda todas as propriedades e mtodos definidos em SuperClass. Por exemplo, voc pode criar uma classe Mammal, que define propriedades e mtodos comuns a todos os mamferos. Para criar uma variao da classe Mammal, por exemplo, uma classe Marsupial, voc estender a classe Mammal, ou seja, criar uma subclasse dessa classe, da seguinte maneira:
class Marsupial extends Mammal {}

A subclasse herda todas as propriedades e mtodos da superclasse, incluindo as propriedades ou os mtodos declarados como privados usando a palavra-chave private. Para obter mais informaes sobre a extenso de classes, consulte os seguintes tpicos:

Sobre a criao de uma subclasse na pgina 322 Substituindo mtodos e propriedades na pgina 324

Para obter mais informaes sobre membros privados, consulte Sobre propriedades (membros) e mtodos pblicos, privados e estticos na pgina 262. Para ver um exemplo que cria uma subclasse, consulte Exemplo: Estendendo a classe Widget na pgina 322.

Sobre a criao de subclasses no Flash

321

Sobre a criao de uma subclasse


O cdigo a seguir define a classe personalizada JukeBox, que estende a classe Sound. Ele define um array chamado song_arr e um mtodo chamado playSong(), que reproduz uma msica e chama o mtodo loadSound(), que herda as caractersticas da classe Sound.
class JukeBox extends Sound { public var song_arr:Array = new Array("beethoven.mp3", "bach.mp3", "mozart.mp3"); public function playSong(songID:Number):Void { super.loadSound(song_arr[songID], true); } }

Se voc no fizer uma chamada para super() na funo construtora de uma subclasse, o compilador gerar automaticamente uma chamada para o construtor da superclasse imediata, sem parmetros como a primeira instruo da funo. Se a superclasse no tiver um construtor, o compilador criar uma funo vazia e depois gerar a chamada para ela a partir da subclasse. Entretanto, se a superclasse utilizar parmetros em sua definio, ser necessrio criar um construtor na subclasse e chamar a superclasse com os parmetros necessrios. A herana mltipla, ou herana de mais de uma classe, no permitida no ActionScript 2.0. Entretanto, as classes podero herdar efetivamente as caractersticas de diversas classes se voc utilizar instrues extends individuais, como mostra o seguinte exemplo:
// no permitido class C extends A, B {} // **Error: Uma classe no pode estender mais do que uma classe. // permitido class B extends A {} class C extends B {}

Tambm possvel usar interfaces para implementar uma forma limitada de herana mltipla. Para obter mais informaes sobre interfaces, consulte Captulo 9, Interfaces, na pgina 331. Para ver um exemplo que cria uma subclasse, consulte Exemplo: Estendendo a classe Widget na pgina 322. Para obter mais informaes sobre super, consulte %{super statement}% em ActionScript 2.0 Language Reference.

Exemplo: Estendendo a classe Widget


Os membros da classe propagam-se para as subclasses da superclasse que define esses membros. O exemplo a seguir demonstra como criar uma classe Widget, que pode ser estendida (subclasse) com a criao de outra chamada SubWidget.
Para criar a classe Widget e a subclasse SubWidget:
1.

Crie um novo arquivo do ActionScript e salve-o como Widget.as.

322

Herana

2.

Adicione o seguinte cdigo ao novo documento:


class Widget { public static var widgetCount:Number = 0; public function Widget() { Widget.widgetCount++; } }

3. 4.

Salve as alteraes no arquivo do ActionScript. Crie um novo arquivo do ActionScript e salve-o como SubWidget.as no mesmo diretrio que a classe Widget. Em SubWidget.as, digite o seguinte cdigo na janela Script:
class SubWidget extends Widget { public function SubWidget() { trace("Creating subwidget # "+Widget.widgetCount); } }

5.

6. 7.

Salve as alteraes em SubWidget.as. Crie um novo arquivo FLA e salve-o como subWidgetTest.fla no mesmo diretrio dos arquivos de classes anteriores do ActionScript. Nesse arquivo, digite o seguinte cdigo no Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var sw1:SubWidget = new SubWidget(); var sw2:SubWidget = new SubWidget(); trace("Widget.widgetCount = " + Widget.widgetCount); trace("SubWidget.widgetCount = " + SubWidget.widgetCount);

8.

O cdigo anterior cria duas instncias da classe SubWidget: sw1 e sw2. Cada chamada do construtor de SubWidget rastreia o valor atual da propriedade esttica Widget.widgetCount. Como SubWidget uma subclasse da classe Widget, voc poder acessar a propriedade widgetCount por meio dessa subclasse, e o compilador recriar a referncia (no bytecode, no no arquivo ActionScript) como Widget.widgetCount. Se voc tentar acessar a propriedade esttica widgetCount a partir de instncias da classe Widget ou SubWidget, como sw1 ou sw2, o compilador gerar um erro.
9.

Salve as alteraes no documento. Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. O painel Output (Sada) exibir o seguinte:
Creating subwidget #1 Creating subwidget #2

10. Selecione

Sobre a criao de subclasses no Flash

323

Widget.widgetCount = 2 SubWidget.widgetCount = 2

Essa sada 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 varivel esttica widgetCount dessa classe. O compilador ActionScript 2.0 pode resolver as referncias a membros estticos nas definies de classes. Se voc no especificar o nome da classe da propriedade Widget.widgetCount, mas fizer referncia somente a widgetCount, o compilador ActionScript 2.0 resolver a referncia como Widget.widgetCount e exportar corretamente essa propriedade. Da mesma forma, se voc fizer referncia propriedade como SubWidget.widgetCount, o compilador recriar a referncia (no bytecode, e no no arquivo do ActionScript) como Widget.widgetCount porque SubWidget uma subclasse da classe Widget.
A TE N O

Se voc tentar acessar a varivel esttica widgetCount da classe Widget usando a instncia sw1 ou sw2, o Flash gerar um erro informando que s possvel acessar os membros estticos diretamente atravs de classes.

Para garantir a legibilidade mxima do seu cdigo, a Macromedia recomenda que voc use sempre referncias explcitas a variveis de membro esttico no cdigo, como no exemplo anterior. O uso de referncias explcitas permite identificar facilmente onde a definio de um membro esttico reside.

Substituindo mtodos e propriedades


Quando uma subclasse estende uma superclasse, a subclasse herda todos os mtodos e as propriedades da superclasse. Uma das vantagens de se trabalhar com classes e estend-las que isso permite adicionar uma nova funcionalidade s classes existentes, bem como modificar uma funcionalidade j existente. Por exemplo, considere a classe Widget criada no Exemplo: Estendendo a classe Widget na pgina 322. Voc poderia criar um novo mtodo na superclasse (Widget) e, em seguida, substituir o mtodo na subclasse (SubWidget) ou simplesmente usar o mtodo herdado da classe Widget. O exemplo a seguir mostra como substituir os mtodos existentes nas classes.
Para substituir os mtodos em uma subclasse:
1. 2.

Crie um novo documento do ActionScript e salve-o como Widget.as. Em Widget.as, digite o seguinte cdigo ActionScript na janela Script:
Nota: Se tiver criado a classe Widget em um exemplo anterior, modifique o cdigo

existente adicionando o mtodo doSomething(), da seguinte maneira:

324

Herana

class Widget { public static var widgetCount:Number = 0; public function Widget() { Widget.widgetCount++; } public function doSomething():Void { trace("Widget::doSomething()"); } } 3.

Salve as alteraes no documento do ActionScript. Agora a classe Widget define um construtor e um mtodo pblico chamado doSomething().

4.

Crie um novo arquivo do ActionScript chamado SubWidget.as e salve-o no mesmo diretrio que Widget.as.
NO TA

Se tiver criado a classe SubWidget no Exemplo: Estendendo a classe Widget na pgina 322, voc poder us-la.

5.

Em SubWidget.as, digite o seguinte cdigo ActionScript na janela Script:


class SubWidget extends Widget { public function SubWidget() { trace("Creating subwidget # "+Widget.widgetCount); doSomething(); } }

6.

Salve as alteraes em SubWidget.as. Observe que o construtor da classe SubWidget chama o mtodo doSomething() definido na superclasse.

7.

Crie um novo documento do Flash e salve-o como subWidgetTest.fla no mesmo diretrio que os documentos do ActionScript. Em subWidgetTest.fla, digite o seguinte ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal :
var sw1:SubWidget = new SubWidget(); var sw2:SubWidget = new SubWidget();

8.

9.

Salve as alteraes no documento do Flash. Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. Voc observa o seguinte no painel Output (Sada):
Creating subwidget # 1 Widget::doSomething() Creating subwidget # 2 Widget::doSomething()

10. Selecione

Sobre a criao de subclasses no Flash

325

Essa sada mostra que o construtor da classe SubWidget chama o construtor de sua superclasse (Widget), que incrementa a propriedade esttica widgetCount. O construtor de SubWidget rastreia a propriedade esttica da superclasse e chama o mtodo doSomething(), que herda as caractersticas da superclasse.
11.

Abra a classe SubWidget e adicione um novo mtodo chamado doSomething(). Modifique sua classe de acordo com o seguinte cdigo (adicione o cdigo em negrito):
class SubWidget extends Widget { public function SubWidget() { trace("Creating subwidget # "+Widget.widgetCount); doSomething(); } public function doSomething():Void { trace("SubWidget::doSomething()"); } }

12. Salve 13.

as alteraes no arquivo de classe e, em seguida, abra subwidgetTest.fla novamente.

Selecione Control > Test Movie para testar o arquivo. Voc observa o seguinte no painel Output:
Creating subwidget # 1 SubWidget::doSomething() Creating subwidget # 2 SubWidget::doSomething()

A sada anterior mostra que o mtodo doSomething() do construtor da classe SubWidget chama o mtodo doSomething() da classe atual, e no da superclasse. Abra a classe SubWidget novamente e modifique o construtor dessa classe para chamar o mtodo doSomething() (adicione o cdigo em negrito):
public function SubWidget() { trace("Creating subwidget # "+Widget.widgetCount); super.doSomething(); }

Como demonstrado, voc pode adicionar a palavra-chave super para chamar o mtodo doSomething() da superclasse, em vez do mtodo doSomething() da classe atual. Para obter mais informaes 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 contedo do mtodo doSomething() da classe Widget.

326

Herana

Usando o polimorfismo em um aplicativo


A programao orientada a objeto permite expressar as diferenas entre classes individuais com uma tcnica chamada polimorfismo, pela qual as classes podem substituir os mtodos de suas superclasses e definir implementaes especializadas desses mtodos. Por exemplo, voc pode criar inicialmente uma classe chamada Mammal com os mtodos play() e sleep() e, em seguida, criar as subclasses Cat, Monkey e Dog para estender essa classe. As subclasses substituem o mtodo play() da classe Mammal para refletir os hbitos desses tipos especficos de animais. Monkey implementa o mtodo play() para pendurar-se nos galhos de rvores; Cat implementa o mtodo play() para avanar em um novelo de l; Dog implementa o mtodo play() para apanhar uma bola. Como a funcionalidade sleep() semelhante entre os animais, voc usaria a implementao de superclasse. O procedimento a seguir demonstra esse exemplo no Flash.
Para usar o polimorfismo em um aplicativo:
1.

Crie um novo documento do ActionScript e salve-o como Mammal.as. Esse documento a classe base de vrias classes diferentes de animais que voc criar na etapas subseqentes.

2.

Em Mammal.as, digite o seguinte cdigo ActionScript na janela Script:


class Mammal { private var _gender:String; private var _name:String = "Mammal"; // construtor public function Mammal(gender:String) { this._gender = gender; } public function toString():String { return "[object " + speciesName + "]"; } public function play():String { return "Chase another of my kind."; } public function sleep():String { return "Close eyes."; } public function get gender():String { return this._gender; } public function get speciesName():String { return this._name; }

Usando o polimorfismo em um aplicativo

327

public function set speciesName(value:String):Void { this._name = value; } }

A classe anterior define duas variveis privadas, __gender e __name, que so usadas para armazenar o tipo de mamfero e o sexo do animal. Em seguida, o construtor Mammal definido. O construtor precisa de um nico parmetro, gender, que usado para definir a varivel privada _gender especificada anteriormente. Trs mtodos pblicos adicionais tambm so especificados: toString(), play() e sleep(), sendo que cada um retorna objetos String. Os trs mtodos finais so getters e setters das propriedades _gender e _name do mamfero.
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 mtodo toString() da classe Mammal para exibir uma representao de seqncia de caracteres de qualquer instncia dessa classe (ou de qualquer instncia que estendesse essa classe).

4.

Crie um novo arquivo do ActionScript e salve-o como Cat.as no mesmo diretrio do arquivo de classe Mammal.as criada na etapa 1. Em Cat.as, digite o seguinte cdigo ActionScript na janela Script:
class Cat extends Mammal { // construtor public function Cat(gender:String) { super(gender); speciesName = "Cat"; } public function play():String { return "Pounce a ball of yarn."; } }

5.

Observe que voc est substituindo o mtodo play() da superclasse Mammal. A classe Cat define somente dois mtodos, um mtodo construtor e outro play(). Como a classe Cat estende a classe Mammal, os mtodos e as propriedades dessa classe so herdados pela classe Cat. Para obter mais informaes sobre substituio, consulte Substituindo mtodos e propriedades na pgina 324.
6. 7.

Salve as alteraes no documento do ActionScript. Crie um novo documento do ActionScript e salve-o como Dog.as no mesmo diretrio que os dois arquivos de classes anteriores. Em Dog.as, digite o seguinte cdigo ActionScript na janela Script:
class Dog extends Mammal {

8.

328

Herana

// construtor public function Dog(gender:String) { super(gender); speciesName = "Dog"; } public function play():String { return "Fetch a stick."; } }

Observe que a classe Dog tem uma estrutura muito semelhante da classe Cat, com exceo de alguns valores que foram alterados. Mais uma vez, a classe Dog estende a classe Mammal e herda todos os seus mtodos e propriedades. O construtor de Dog utiliza uma nica propriedade, gender, que ele passa classe pai da classe Dog, Mammal. A varivel speciesName tambm substituda e definida como a seqncia de caracteres Dog. O mtodo play() tambm substitudo a partir da classe pai.
9.

Salve as alteraes no documento do ActionScript. outro documento do ActionScript no mesmo diretrio que os seus outros arquivos e salve-o como Monkey.as. Em Monkey.as, digite o seguinte cdigo ActionScript na janela Script:
class Monkey extends Mammal { // construtor public function Monkey(gender:String) { super(gender); speciesName = "Monkey"; } public function play():String { return "Swing from a tree."; } }

10. Crie

11.

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 seqncia de caracteres Monkey. A classe Monkey tambm substitui o comportamento do mtodo play().
12. Salve 13.

as alteraes no documento do ActionScript.

Agora que voc criou trs subclasses da classe Mammal, crie um novo documento do Flash chamado mammalTest.fla. mammalTest.fla, digite o seguinte cdigo ActionScript no Frame (Quadro) 1 da Timeline (Linha de tempo) principal:
var mammals_arr:Array = new Array();

14. Em

Usando o polimorfismo em um aplicativo

329

this.createTextField("info_txt", 10, 10, 10, 450, 80); info_txt.html = true; info_txt.multiline = true; info_txt.border = true; info_txt.wordWrap = true; 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 informaes de Mammal em quatro colunas de texto HTML usando interrupes de tabulao. 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 instruo trace chama o mtodo Mammal.toString(). trace(mammals_arr[i]); } info_txt.htmlText += "</textformat>"; }

O cdigo de mammalTest.fla um pouco mais complexo do que as classes anteriores. Primeiro ele importa as trs classes de animal.
15.

Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. Voc ver as informaes de Mammal exibidas em um campo de texto no Stage (Palco) e o seguinte texto no painel Output (Sada):
[object [object [object [object Dog] Cat] Monkey] Mammal]

330

Herana

CAPTULO 9

Interfaces
Na OOP (Object-Oriented Programming, Programao orientada a objeto), uma interface um documento que permite declarar (porm no definir) os mtodos 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 mtodos base das classes do ActionScript. Esses mtodos devem ser implementados quando os desenvolvedores usam cada interface. Este captulo examina algumas interfaces de exemplo e, ao conclu-lo, voc ser capaz de criar seus prprios arquivos de interface. Se no estiver familiarizado com a criao de classes, leia o Captulo 7, Classes, antes de tentar fazer os tutoriais e ler os exemplos apresentados neste captulo. Para obter mais informaes sobre o trabalho com interfaces, consulte os seguintes tpicos:
Sobre interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Criando interfaces como tipos de dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Noes bsicas sobre herana e interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339 Exemplo: Usando interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Exemplo: Criando uma interface complexa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342

Sobre interfaces
Na programao orientada a objeto, as interfaces assemelham-se a classes cujos mtodos no so implementados (definidos), ou seja, elas no fazem nada. Portanto, uma interface consiste em mtodos vazios. Outra classe poder implementar os mtodos declarados pela interface. No ActionScript, a distino entre interface e objeto aplica-se somente verificao de erros durante a compilao e imposio de regras de linguagem.

331

Uma interface no uma classe; porm, essa afirmativa no completamente verdadeira no ActionScript durante a execuo pois uma interface abstrata. As interfaces do ActionScript realmente existem na execuo para permitir a converso de tipos (a alterao de um tipo existente de dados em outro tipo). O modelo de objeto do ActionScript 2.0 no oferece suporte herana mltipla. Portanto, uma classe pode herdar as caractersticas de uma nica classe pai. Essa classe pai pode ser uma classe bsica ou do Flash Player ou, ainda, uma classe definida pelo usurio (personalizada). possvel usar interfaces para implementar uma forma limitada de herana mltipla, 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 contm os mtodos chaseTail() e eatCatNip(). Como o Java, o ActionScript 2.0 no permite que uma classe estenda vrias classes diretamente, mas permite que ela estenda uma nica classe e implemente vrias interfaces. Portanto, voc pode criar uma interface Playful que declara os mtodos chaseTail() e eatCatNip(). Uma classe Gato, ou qualquer outra classe, pode implementar essa interface e fornecer definies para esses mtodos. Uma interface tambm pode ser considerada como um contrato de programao que pode ser usado para impor os relacionamentos entre classes no relacionadas de outra maneira. Por exemplo, suponha que voc esteja trabalhando com uma equipe de programadores, cada um responsvel por uma classe diferente do mesmo aplicativo. Ao projetar o aplicativo, voc estabelece um conjunto de mtodos que as diferentes classes usaro para se comunicar. Voc cria uma interface que declara esses mtodos, seus parmetros e tipos de retorno. Qualquer classe que implemente essa interface deve fornecer definies para esses mtodos; caso contrrio, ocorrer um erro do compilador. A interface como um protocolo de comunicao ao qual todas as classes devem aderir. Uma maneira de fazer isso criar uma classe que defina todos esses mtodos e, em seguida, fazer com que cada classe seja estendida a partir dessa superclasse ou herde as caractersticas dela. Como o aplicativo consiste em classes que no esto relacionadas, no faz sentido impor uma hierarquia de classe comum a elas. Uma soluo melhor criar uma interface que declare os mtodos que essas classes usam para se comunicar e, em seguida, fazer cada classe implementar (fornecer suas prprias definies para) esses mtodos. Normalmente, voc pode programar bem sem usar interfaces. Entretanto, quando usadas apropriadamente, as interfaces podem tornar o projeto dos aplicativos mais elegante, dimensionvel e fcil de manter.

332

Interfaces

As interfaces do ActionScript existem durante a execuo para permitir a converso de tipos; consulte Captulo 4, Sobre a converso de objetos, na pgina 117. Embora uma interface no seja um objeto ou uma classe, o fluxo de trabalho semelhante ao existente quando se trabalha com classes. Para obter mais informaes sobre o fluxo de trabalho de classes, consulte Criando arquivos de classes personalizados na pgina 249. Para ver um tutorial sobre como criar um aplicativo com interfaces, consulte Exemplo: Usando interfaces na pgina 340. Para obter mais informaes sobre o uso de interfaces, consulte as seguintes sees:

Sobre a palavra-chave interface na pgina 333 Sobre a atribuio de nomes a interfaces na pgina 334 Definindo e implementado interfaces na pgina 334

Sobre a palavra-chave interface


A palavra-chave interface define uma interface. Uma interface semelhante a uma classe, com as seguintes diferenas relevantes:

As interfaces contm somente descries de mtodos e no sua implementao. Ou seja, toda classe que implementa uma interface deve fornecer uma implementao para cada mtodo definido na interface. Somente membros pblicos so permitidos em uma definio de interface; membros estticos e de classe no so permitidos. As instrues get e set no so permitidas em definies de interface. Para usar a palavra-chave interface, necessrio especificar ActionScript 2.0 e Flash Player 6 ou uma verso posterior na guia Flash da caixa de dilogo Publish Settings (Configuraes de publicao) do arquivo FLA.

A palavra-chave interface suportada somente quando usada em arquivos de script externos, no em scripts criados no painel Actions (Aes).

Sobre interfaces

333

Sobre a atribuio de nomes a interfaces


Como os nomes de classes, os nomes de interfaces iniciam em letra maiscula. Esses nomes so geralmente adjetivos como Printable. O nome de interface a seguir, IEmployeeRecords, usa uma inicial maiscula e palavras concatenadas em letras maisculas e minsculas:
interface IEmployeeRecords {}
NO TA

Alguns desenvolvedores iniciam os nomes das interfaces com um I maisculo para diferenci-las das classes. A adoo dessa prtica recomendada, pois permite distinguir rapidamente entre interfaces e classes comuns.

Para obter mais informaes sobre convenes de atribuio de nome, consulte Captulo 19, Melhores prticas e convenes de codificao para ActionScript 2.0, na pgina 767.

Definindo e implementado interfaces


O processo de criao de uma interface igual ao de criao de uma classe. Assim como as classes, s possvel definir interfaces nos arquivos externos do ActionScript. O fluxo de trabalho para a criao de uma interface envolve, no mnimo, as seguintes etapas: Definir uma interface em um arquivo externo do ActionScript. Salvar o arquivo da interface em um diretrio de caminho de classe designado (o local em que o Flash procura as classes) ou no mesmo diretrio que o arquivo FLA do aplicativo Criar uma instncia da classe em outro script, em um documento do Flash (FLA) ou em um arquivo de script externo, ou criar subinterfaces com base na interface original Criar uma classe que implemente a interface em um arquivo de script externo

Para declarar uma interface, use a palavra-chave interface, seguida do nome da interface e de chaves ({}), que definem o corpo da interface, como mostra o seguinte exemplo:
interface IEmployeeRecords { // declaraes de mtodo de interface }

Uma interface s pode conter declaraes de mtodos (funes), incluindo parmetros, tipos de parmetro e tipos de retorno de funo. Para obter mais informaes sobre convenes de estruturao de classes e interfaces, consulte Captulo 19, Melhores prticas e convenes de codificao para ActionScript 2.0, na pgina 767. Para ver um tutorial sobre a criao de um aplicativo que usa uma interface, consulte Exemplo: Usando interfaces na pgina 340.

334

Interfaces

Por exemplo, o cdigo a seguir declara uma interface chamada IMyInterface que contm dois mtodos, method1() e method2(). O primeiro mtodo, method1(), no possui parmetros e especifica o tipo de retorno Void (que indica que ele no retorna um valor). O segundo mtodo, method2(), tem um nico parmetro de tipo String e especifica um tipo de retorno Boolean.
Para criar uma interface simples:
1. 2.

Crie um novo arquivo do ActionScript e salve-o como IMyInterface.as. Digite o seguinte cdigo ActionScript na janela Script:
interface IMyInterface { public function method1():Void; public function method2(param:String):Boolean; }

3.

Salve as alteraes no arquivo do ActionScript. Para usar a interface em um aplicativo, necessrio criar primeiro uma classe que implemente a nova interface.

4.

Crie um novo arquivo do ActionScript e salve-o como MyClass.as no mesmo diretrio que IMyInterface.as. No arquivo de classe MyClass, digite o seguinte cdigo ActionScript na janela Script:
class MyClass { }

5.

Para instruir a classe personalizada (MyClass) a usar a interface (IMyInterface), necessrio usar a palavra-chave implements, a qual especifica que uma classe deve definir todos os mtodos declarados na(s) interface(s) implementada(s).
6.

Modifique o cdigo ActionScript em MyClass.as (adicione o cdigo em negrito) de acordo com o seguinte trecho:
class MyClass implements IMyInterface { }

Coloque a palavra-chave implements depois do nome da classe.


7.

Clique no boto Check Syntax (Verificar sintaxe). O Flash exibe um erro no painel Output (Sada) informando que MyClass deve implementar o mtodo X da interface IMyInterface. Essa mensagem de erro exibida porque toda classe que estende uma interface deve definir cada mtodo listado no documento da interface.

8.

Modifique o documento MyClass novamente (adicione o cdigo em negrito) e crie o cdigo ActionScript para os mtodos method1() e method2(), como mostra o seguinte trecho:

Sobre interfaces

335

class MyClass implements IMyInterface { public function method1():Void { // ... }; public function method2(param:String):Boolean { // ... return true; } } 9.

Salve o documento MyClass.as e clique em Check Syntax. O painel Output no exibe mais mensagens de erro ou avisos porque agora voc definiu os dois mtodos.

O arquivo de classe criado no se limita aos mtodos pblicos definidos no arquivo de interface. O arquivo de interface descreve apenas os mtodos mnimos que devem ser implementados, bem como os tipos de retorno e as propriedades desses mtodos. As classes que implementam uma interface quase sempre incluem mtodos getter e setter, variveis e mtodos adicionais. Os arquivos de interface no podem conter declaraes de variveis nem atribuies. As funes declaradas em uma interface no podem conter chaves. Por exemplo, a interface a seguir no compilada:
interface IBadInterface { // Erro do compilador. Declaraes de variveis no permitidas em interfaces. public var illegalVar:String; // Erro do compilador. Corpos de funo no permitidos em interfaces. public function illegalMethod():Void { } // Erro do compilador. No so permitidos mtodos privados em interfaces. private function illegalPrivateMethod():Void; // Erro do compilador. No so permitidos getters/setters em interfaces. public function get illegalGetter():String; }

Para ver um tutorial que demonstra como criar uma interface complexa, consulte Exemplo: Usando interfaces na pgina 340. As regras para atribuir nome a interfaces e armazen-las nos pacotes so as mesmas usadas para as classes; consulte Sobre a atribuio de nomes a arquivos de classes na pgina 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 especfico implementa uma determinada interface. Por exemplo, considere a interface IMovable, criada no exemplo a seguir.
Para criar uma interface como um tipo de dados:
1. 2.

Crie um novo documento do ActionScript e salve-o no disco rgido como IMovable.as. Em IMovable.as, digite o seguinte cdigo ActionScript na janela Script:
interface IMovable { public function moveUp():Void; public function moveDown():Void; }

3. 4.

Salve as alteraes no arquivo do ActionScript. Crie um novo documento do ActionScript e salve-o como Box.as no mesmo diretrio que IMovable.as. Nesse documento, crie uma classe Box que implementa a interface IMovable criada em uma etapa anterior.

5.

Em Box.as, digite o seguinte cdigo ActionScript na janela Script:


class Box implements Movable { public var xPos:Number; public var yPos:Number; public function Box() { } public function moveUp():Void { trace("moving up"); // definio de mtodo } public function moveDown():Void { trace("moving down"); // definio de mtodo } }

6. 7.

Salve as alteraes no documento do ActionScript. Crie um novo documento do Flash chamado boxTest.fla e salve-o no mesmo diretrio que os dois documentos anteriores do ActionScript.

Criando interfaces como tipos de dados

337

8.

Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo), abra o editor do ActionScript e digite o seguinte cdigo ActionScript no painel Actions (Aes) (ou janela Script):
var newBox:Box = new Box();

Esse cdigo ActionScript cria uma instncia da classe Box, que voc declara como uma varivel do tipo Box.
9.

Salve as alteraes no documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF. No Flash Player 7 e verses posteriores, voc pode converter uma expresso em um tipo de interface ou em outro tipo de dados durante a execuo. Diferentemente das interfaces do Java, as interfaces do ActionScript existem durante a execuo, o permite a converso de tipos. Se a expresso for um objeto que implemente a interface ou tenha uma superclasse que implemente a interface, o objeto ser retornado. Caso contrrio, ser retornado null. Esse recurso til para verificar se determinado objeto implementa uma interface especfica. Para obter mais informaes sobre converso de tipos, consulte Captulo 4, Sobre a converso de objetos, na pgina 117.

10. Adicione

o cdigo a seguir ao final do cdigo ActionScript em boxTest.fla:

if (IMovable(newBox) != null) { newBox.moveUp(); else { trace("box instance is not movable"); }

Esse cdigo ActionScript verifica se a instncia newBox implementa a interface IMovable antes da chamada do mtodo moveUp() no objeto.
11.

Salve o documento do Flash e selecione Control > Test Movie para testar o arquivo SWF. Como a instncia Box implementa a interface IMovable, o mtodo Box.moveUp() chamado, e o texto moving up exibido no painel Output (Sada).

Para obter mais informaes sobre converso, consulte Captulo 4, Sobre a converso de objetos, na pgina 117.

338

Interfaces

Noes bsicas sobre herana 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 mtodos. Esses mtodos devem ser definidos por todas as classes que implementam essa interface. Uma considerao a ser feita ao estender interfaces que sero exibidas mensagens de erro no Flash se vrios arquivos de interface declararem funes com os mesmos nomes, mas tiverem parmetros 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.
Para estender uma interface:
1. 2.

Crie um novo arquivo do ActionScript e salve-o como Ia.as. Em Ia.as, digite o seguinte cdigo ActionScript na janela Script:
interface Ia { public function f1():Void; public function f2():Void; }

3. 4.

Salve as alteraes no arquivo do ActionScript. Crie um novo arquivo do ActionScript e salve-o como Ib.as na mesma pasta que o arquivo Ia.as criado na etapa 1. No arquivo Ib.as, digite o seguinte cdigo ActionScript na janela Script:
interface Ib extends Ia { public function f8():Void; public function f9():Void; }

5.

6. 7.

Salve as alteraes no arquivo do ActionScript. Crie um novo arquivo do ActionScript e salve-o como ClassA.as no mesmo diretrio que os dois arquivos anteriores. Em ClassA.as, digite o seguinte cdigo ActionScript na janela Script:
class ClassA implements Ib { // f1() e f2() so definidos na interface Ia. public function f1():Void { } public function f2():Void { }

8.

Noes bsicas sobre herana e interfaces

339

// f8() e f9() so definidos na interface Ib, que estende Ia. public function f8():Void { } public function f9():Void { } } 9.

Salve o arquivo de classe e clique no boto Check Syntax (Verificar sintaxe) acima da janela Script. O Flash no gerar mensagens de erro desde que todos os quatro mtodos sejam definidos e correspondam s definies de seus respectivos arquivos de interface.
NO T A

No ActionScript 2.0, as classes s podem estender uma classe, embora seja possvel us-las para implementar tantas interfaces quantas forem desejadas.

Para que a classe ClassA implemente vrias interfaces no exemplo anterior, separe simplesmente as interfaces com vrgulas. Ou, se uma classe estendesse uma superclasse e implementasse vrias interfaces, voc usaria um cdigo semelhante ao seguinte:
class ClassA extends ClassB implements Ib, Ic, Id {...}.

Exemplo: Usando interfaces


Neste exemplo, voc criar uma interface simples que poder ser reutilizada entre vrias classes diferentes.
Para criar uma interface:
1. 2.

Crie um novo arquivo do ActionScript e salve-o como IDocumentation.as. Em IDocumentation.as, digite o seguinte cdigo ActionScript na janela Script:
interface IDocumentation { public function downloadUpdates():Void; public function checkForUpdates():Boolean; public function searchHelp(keyword:String):Array; }

3. 4.

Salve as alteraes efetuadas no arquivo de interface do ActionScript. Crie um novo arquivo do ActionScript no mesmo diretrio que IDocumentation.as e salveo como FlashPaper.as. Em FlashPaper.as, digite o seguinte cdigo ActionScript na janela Script:
class FlashPaper implements IDocumentation { }

5.

6.

Salve as alteraes efetuadas no arquivo do ActionScript.

340

Interfaces

7.

Clique no boto 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 no define nenhum dos mtodos pblicos que voc definiu na interface IDocumentation.
8.

Abra o arquivo de classe FlashPaper.as novamente e modifique o cdigo ActionScript de acordo com o seguinte cdigo:
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 [] }; }

9.

Salve as alteraes no arquivo do ActionScript e clique em Check Syntax novamente. Desta vez, nenhum erro exibido no painel Output (Sada).
N OT A

Voc pode adicionar ao arquivo de classe FlashPaper quantas variveis ou mtodos estticos, pblicos ou privados desejar. O arquivo de interface define somente um conjunto de mtodos mnimos que devem aparecer em qualquer classe que implemente essa interface.

10. Abra o documento de interface IDocumentation novamente e adicione a seguinte linha de

cdigo em negrito (abaixo do mtodo searchHelp()):


interface IDocumentation { public function downloadUpdates():Void; public function checkForUpdates():Boolean; public function searchHelp(keyword:String):Array; public function addComment(username:String, comment:String):Void; } 11.

Salve as alteraes no arquivo de interface e reabra o documento FlashPaper.as.

Exemplo: Usando interfaces

341

12. Ao

clicar no boto Check Syntax, voc v uma nova mensagem de erro no painel Output:

**Error** path\FlashPaper.as: Line 1: The class must implement method 'addComment' from interface 'IDocumentation'. class FlashPaper implements IDocumentation { Total ActionScript Errors: 1 Reported Errors: 1

O erro anterior aparece porque o arquivo de classe FlashPaper.as no define mais todas as classes descritas no arquivo de interface. Para corrigir esse erro, adicione o mtodo addComment() classe FlashPaper ou remova a definio do mtodo do arquivo de interface IDocumentation.
13.

Adicione o seguinte mtodo classe FlashPaper:


public function addComment(username:String, comment:String):Void { /* Envie parmetros para a pgina do servidor, que insere um comentrio no banco de dados. */ }

14. Salve as alteraes em FlashPaper.as e clique no boto Check Syntax; depois disso, voc no

dever receber mais erros. Na seo anterior, voc criou uma classe com base no arquivo de interface IDocumentation. Nesta seo, voc criar uma nova classe que tambm implementar a interface IDocumentation, embora ela adicione alguns outros mtodos e propriedades. Este tutorial demonstra a utilidade de usar interfaces quando voc deseja criar outra classe que estenda a interface IDocumentation, pois ser possvel identificar facilmente os mtodos necessrios na nova classe.

Exemplo: Criando uma interface complexa


O exemplo a seguir mostra vrias maneiras de definir e implementar interfaces. Neste tutorial, voc aprender a criar um arquivo de interface simples e uma classe que implemente vrias interfaces. Aprender tambm a fazer com que as interfaces estendam outras interfaces para criar estruturas de dados mais complexas.
Para criar uma interface complexa:
1. 2.

Crie um novo documento do ActionScript e salve-o como InterfaceA.as. Crie uma nova pasta chamada complexInterface e salve InterfaceA.as nesse diretrio. Salve todos os arquivos criados para este tutorial nesse diretrio.

342

Interfaces

3.

Em Interface.as, digite o seguinte cdigo ActionScript na janela Script:


// nome do arquivo: InterfaceA.as interface InterfaceA { public function k():Number; public function n(z:Number):Number; }

4.

Salve o documento do ActionScript; em seguida, crie um novo documento do ActionScript chamado ClassB.as e salve-o no diretrio complexInterface. ClassB.as implementa a interface InterfaceA criada anteriormente. Em ClassB.as, digite o seguinte cdigo ActionScript na janela Script:
// nome do arquivo: ClassB.as class ClassB implements InterfaceA { public function k():Number { return 25; } public function n(z:Number):Number { return (z + 5); } }

5.

6.

Salve as alteraes no documento ClassB.as; em seguida, crie um novo documento do Flash e salve-o como classbTest.fla no diretrio complexInterface. Esse arquivo de classe testa a classe ClassB criada anteriormente. Em classbTest.fla, digite o seguinte cdigo ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
// nome do arquivo: classbTest.fla import ClassB; var myB:ClassB = new ClassB(); trace(myB.k()); // 25 trace(myB.n(7)); // 12

7.

8.

Salve as alteraes no documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. O painel Output (Sada) exibe dois nmeros, 25 e 12, que so os resultados dos mtodos k() e n() da classe ClassB.

9.

Crie um novo arquivo do ActionScript e salve-o como ClassC.as no diretrio complexInterface. Esse arquivo de classe implementa a interface InterfaceA criada na etapa 1.

Exemplo: Criando uma interface complexa

343

10. Em

ClassC.as, digite o seguinte cdigo ActionScript na janela Script:

// nome do arquivo: ClassC.as class ClassC implements InterfaceA { public function k():Number { return 25; } // **Erro** A classe tambm deve implementar o mtodo 'n' da interface 'InterfaceA'. }

Se voc clicar no boto 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 mtodo n() definido na interface InterfaceA. Ao criar classes que implementam uma interface, importante definir mtodos para cada entrada da interface.
11.

Crie um novo documento do ActionScript e salve-o como InterfaceB.as no diretrio complexInterface. InterfaceB.as, digite o seguinte cdigo ActionScript na janela Script:
// nome do arquivo: InterfaceB.as interface InterfaceB { public function o():Void; }

12. Em

13.

Salve as alteraes no documento InterfaceB.as; em seguida, crie um novo documento do ActionScript e salve-o como classD.as no diretrio complexInterface. Essa classe implementa as interfaces InterfaceA e InterfaceB criadas em etapas anteriores. A ClassD deve incluir implementaes de cada um dos mtodos listados em cada arquivo de interface.

14. Em

ClassD.as, digite o seguinte cdigo ActionScript na janela Script:

// nome do arquivo: ClassD.as class ClassD implements InterfaceA, InterfaceB { public function k():Number { return 15; } public function n(z:Number):Number { return (z * z); } public function o():Void { trace("o"); } }

344

Interfaces

15.

Salve as alteraes 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. Em classdTest.fla, adicione o seguinte cdigo 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

16.

17.

Salve as alteraes 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 so os resultados dos mtodos 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 definio de mtodo.

19. Em

InterfaceC.as, digite o seguinte cdigo ActionScript na janela Script:

// nome do arquivo: InterfaceC.as interface InterfaceC extends InterfaceA { public function p():Void; } 20.Salve

as alteraes no arquivo do ActionScript; em seguida, crie um novo arquivo do ActionScript e salve-o como ClassE.as no diretrio complexInterface. Essa classe implementa duas interfaces, InterfaceB e InterfaceC. arquivo ClassE.as, digite o seguinte cdigo ActionScript na janela Script:

21. No

// nome do arquivo: ClassE.as class ClassE implements InterfaceB, InterfaceC { public function k():Number { return 15; } public function n(z:Number):Number { return (z + 5); } public function o():Void { trace("o"); } public function p():Void { trace("p"); } }

Exemplo: Criando uma interface complexa

345

22.Salve 23.No

as alteraes no documento do ActionScript; em seguida, crie um novo documento do Flash e salve-o como classeTest.fla no diretrio complexInterface. arquivo classeTest.fla, digite o seguinte cdigo ActionScript no Frame 1 da Timeline:
// nome do arquivo: classeTest.fla import ClassE; var myE:ClassE = new ClassE(); trace(myE.k()); // 15 trace(myE.n(7)); // 12 myE.o(); // o myE.p(); // p

24.Salve o documento do Flash e selecione Control > Test Movie para

testar o arquivo SWF.

Os valores 15, 12, o e p so exibidos no painel Output. Esses valores so retornados pelos mtodos ClassE.k(), ClassE.n(), ClassE.o() e ClassE.p(). Como a classe ClassE implementou as interfaces InterfaceB e InterfaceC, cada mtodo dos dois arquivos de interface deve ser definido. Embora as interfaces InterfaceB e InterfaceC definam somente os mtodos o() e p(), a InterfaceC estende a InterfaceA. Isso significa que todos os mtodos definidos por ela, k() e n(), tambm devem ser implementados.

346

Interfaces

CAPTULO 10

Manipulando eventos
Eventos so aes que ocorrem enquanto um arquivo SWF reproduzido. Um evento, como um clique com o mouse ou um pressionamento de tecla, chamado de evento do usurio, j que o resultado de uma interao direta com o usurio. Um evento gerado automaticamente pelo Flash Player, como a aparncia inicial de um clipe de filme no Stage (Palco), chama-se evento do sistema, porque no gerado diretamente pelo usurio. Para que seu aplicativo reaja a eventos, voc deve usar manipuladores de eventos, um cdigo ActionScript associado a um objeto e a um evento especficos. Por exemplo, quando um usurio clicar em um boto no Stage (Palco), voc poder avanar a reproduo at o prximo quadro. Ou, depois que um arquivo XML for carregado pela rede, o seu contedo poder ser exibido em um campo de texto. Voc pode manipular eventos no ActionScript de vrias maneiras:

10

Usando mtodos manipuladores de eventos na pgina 348 Usando ouvintes de eventos na pgina 351 Usando manipuladores de eventos de boto e de clipe de filme na pgina 355, especificamente, %{on handler}% e %{onClipEvent handler}%. Transmitindo eventos de instncias de componentes na pgina 360

O uso de manipuladores de eventos com %{loadMovie (MovieClip.loadMovie method)}% pode ser imprevisvel. Se voc anexar um manipulador de eventos a um boto usando on(), ou se criar um manipulador dinmico usando um mtodo como %{onPress (MovieClip.onPress handler)}% e, em seguida, chamar loadMovie(), o manipulador de eventos no estar disponvel depois que o novo contedo 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 disponvel depois que o novo cdigo for carregado.

347

Para obter mais informaes sobre a manipulao de eventos, consulte as seguintes sees:
Usando mtodos manipuladores de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348 Usando ouvintes de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 Usando ouvintes de eventos com componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . .353 Usando manipuladores de eventos de boto e de clipe de filme. . . . . . . . . . . . . . .355 Transmitindo eventos de instncias de componentes . . . . . . . . . . . . . . . . . . . . . . . 360 Criando clipes de filme com estados de boto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Escopo do manipulador de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362 Escopo da palavra-chave this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365 Usando a classe Delegate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .366

Usando mtodos manipuladores de eventos


Um mtodo manipulador de eventos o mtodo de uma classe que chamado quando ocorre um evento em uma instncia dessa classe. Por exemplo, a classe MovieClip define um manipulador de eventos onPress que chamado sempre que o boto do mouse pressionado em um objeto de clipe de filme. Ao contrrio de outros mtodos de classe, porm, o manipulador de eventos no chamado diretamente; o Flash Player chama esse manipulador automaticamente quando ocorre o evento apropriado. As seguintes classes do ActionScript so exemplos de classes que definem manipuladores de exemplos: Button, ContextMenu, ContextMenuItem, Key, LoadVars, LocalConnection, Mouse, MovieClip, MovieClipLoader, Selection, SharedObject, Sound, Stage, TextField, XML e XMLSocket. Para obter mais informaes sobre os manipuladores de eventos fornecidos por elas, consulte as entradas correspondentes a cada classe em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0). A palavra handler adicionada ao ttulo de cada manipulador de eventos. Por padro, os mtodos manipuladores de eventos so indefinidos: quando ocorre um evento especfico, o manipulador correspondente chamado, mas o aplicativo no responde mais ao evento. Para que seu aplicativo responda ao evento, defina uma funo com a instruo de funo e atribua essa funo ao manipulador de eventos apropriado. A funo atribuda ao manipulador de eventos chamada automaticamente sempre que o evento ocorre.

348

Manipulando eventos

Um manipulador de eventos consiste em trs partes: o objeto ao qual se aplica o evento, o nome do mtodo manipulador de eventos do objeto e a funo atribuda ao manipulador de eventos. O exemplo a seguir mostra a estrutura bsica de um manipulador de eventos:
object.eventMethod = function () { // Insira seu cdigo aqui em resposta ao evento. }

Por exemplo, imagine que exista um boto chamado next_btn no Stage (Palco). O cdigo a seguir atribui uma funo ao manipulador de eventos onPress do boto; essa funo avana a reproduo at o prximo quadro na linha de tempo atual:
next_btn.onPress = function () { nextFrame(); } Atribuindo uma referncia de funo No cdigo anterior, a funo nextFrame() atribuda diretamente a um manipulador de eventos onPress. Tambm possvel atribuir uma referncia de funo (nome) a um mtodo manipulador de eventos e, posteriormente, definir a funo, como mostra este exemplo: // Atribua uma referncia de funo ao manipulador de eventos onPress do boto. next_btn.onPress = goNextFrame; // Defina a funo goNextFrame(). function goNextFrame() { nextFrame(); }

No exemplo a seguir, observe que voc atribui a referncia da funo, e no seu valor de retorno, ao manipulador de eventos onPress:
// Incorreto! next_btn.onPress = goNextFrame(); // Correto. next_btn.onPress = goNextFrame;

Alguns manipuladores de eventos recebem parmetros passados com informaes sobre o evento ocorrido. Por exemplo, o manipulador de eventos TextField.onSetFocus chamado quando uma instncia de campo de texto ganha o foco do teclado. Esse manipulador de eventos recebe uma referncia ao objeto de campo de texto que tinha o foco do teclado.
Recebendo parmetros passados

Usando mtodos manipuladores de eventos

349

Por exemplo, o cdigo a seguir insere um texto em um campo de texto que no tem mais o foco do teclado:
this.createTextField("my_txt", 99, 10, 10, 200, 20); my_txt.border = true; my_txt.type = "input"; this.createTextField("myOther_txt", 100, 10, 50, 200, 20); myOther_txt.border = true; myOther_txt.type = "input"; myOther_txt.onSetFocus = function(my_txt:TextField) { my_txt.text = "I just lost keyboard focus"; }; Manipuladores de eventos de objetos criados durante a execuo

Tambm possvel atribuir funes a manipuladores de eventos de objetos criados durante a execuo. Por exemplo, o cdigo a seguir cria uma nova instncia de clipe de filme (newclip_mc) e atribui uma funo ao manipulador de eventos onPress do clipe.

this.attachMovie("symbolID", "newclip_mc", 10); newclip_mc.onPress = function () { trace("You pressed me"); }

Para obter mais informaes, consulte Criando clipes de filme durante a execuo na pgina 378. A criao de uma classe que estenda uma classe do ActionScript permite substituir os mtodos manipuladores de eventos pelas funes criadas. Voc pode definir um manipulador de eventos em uma nova subclasse que poder ser reutilizada para diversos objetos, vinculando qualquer smbolo da biblioteca da classe estendida nova subclasse. O cdigo a seguir substitui o manipulador de eventos onPress da classe MovieClip por uma funo que diminui a transparncia do clipe de filme:
Substituindo mtodos manipuladores de eventos // Classe FadeAlpha define a transparncia quando voc clica no clipe de filme. class FadeAlpha extends MovieClip { function onPress() { this._alpha -= 10; } }

Para obter instrues especficas sobre a extenso de uma classe do ActionScript e a vinculao a um smbolo da biblioteca, consulte os exemplos fornecidos em Atribuindo uma classe a smbolos no Flash na pgina 295. Para obter informaes sobre a criao e o trabalho com classes personalizadas, consulte Captulo 7, Classes.

350

Manipulando eventos

Usando ouvintes de eventos


Os ouvintes de eventos permitem que um objeto, chamado objeto ouvinte, receba eventos transmitidos por outro objeto, chamado objeto transmissor. O objeto transmissor registra o objeto ouvinte para que receba eventos gerados por ele. Por exemplo, voc pode registrar um objeto de clipe de filme para que receba notificaes onResize do Stage (Palco), ou uma instncia de boto pode receber notificaes onChanged de um objeto de campo de texto. possvel registrar vrios objetos ouvintes, para que recebam eventos de um nico transmissor, e registrar um nico objeto ouvinte, para que receba eventos de vrios transmissores. Diferentemente dos mtodos manipuladores de eventos, o modelo de ouvinte/transmissor de eventos permite que vrios cdigos ouam o mesmo evento sem que haja conflito. Os modelos de eventos que no usam o modelo de ouvinte/transmissor, como XML.onLoad(), podem criar problemas quando vrios cdigos ouvem o mesmo evento; os diversos cdigos entram em conflito ao tentarem controlar essa referncia nica da funo de retorno de chamada XML.onLoad. Com o modelo de ouvinte/transmissor, possvel adicionar facilmente ouvintes ao mesmo evento sem que haja gargalos de cdigo. As seguintes classes do ActionScript podem transmitir eventos: %{Key}%, %{Mouse}%, %{MovieClipLoader}%, %{Selection}%, %{Stage}% e %{TextField}%. Para ver os ouvintes disponveis para uma classe, consulte a entrada correspondente a cada classe no ActionScript 2.0 Language Reference. Para obter mais informaes sobre ouvintes de eventos, consulte os seguintes tpicos:

Modelo de ouvinte de evento na pgina 351 Exemplo de ouvinte de eventos na pgina 352

A classe Stage podem transmitir eventos. possvel encontrar um arquivo de origem de exemplo, stagesize.fla, na pasta Samples no disco rgido. Esse exemplo demonstra como a propriedade Stage.scaleMode afeta os valores de Stage.width e Stage.height quando a janela do navegador redimensionada.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\StageSize. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/StageSize.

Modelo de ouvinte de evento


O modelo de evento para ouvintes de eventos semelhante ao de manipuladores de eventos (consulte Usando mtodos manipuladores de eventos na pgina 348), com duas diferenas principais:

Usando ouvintes de eventos

351

O manipulador de eventos atribudo ao objeto ouvinte, e no ao objeto que transmite o evento. Voc chama um mtodo especial do objeto transmissor, addListener(), que registra o objeto ouvinte para receber seus eventos.

O cdigo a seguir descreve o modelo de ouvinte de eventos:


var listenerObject:Object = new Object(); listenerObject.eventName = function(eventObj:Object) { // Aqui entra o seu cdigo }; broadcasterObject.addListener(listenerObject);

O cdigo inicia com um objeto, listenerObject, com a propriedade eventName. O objeto ouvinte pode ser qualquer objeto, como uma instncia de um objeto, clipe de filme ou boto existente no Stage (Palco); ele tambm pode ser uma instncia de uma classe do ActionScript. Por exemplo, um clipe de filme personalizado poderia implementar os mtodos ouvintes para os ouvintes do Stage. Tambm poderia existir um objeto que ouvisse vrios tipos de ouvintes. A propriedade eventName um evento que ocorre em broadcasterObject, o qual transmite o evento para listenerObject. Voc pode registrar vrios ouvintes para um transmissor de eventos. Atribua uma funo ao ouvinte de eventos que responda de alguma forma ao evento. Finalmente, chame o mtodo addListener() no objeto transmissor, passando para ele o objeto ouvinte. Para cancelar o registro de um objeto ouvinte para o recebimento de eventos, chame o mtodo do objeto transmissor, passando para ele o nome do evento a ser removido e do objeto ouvinte.
removeEventListener() broadcasterObject.removeListener(listenerObject);

Exemplo de ouvinte de eventos


O exemplo a seguir mostra como usar o ouvinte de eventos onSetFocus na classe Selection para criar um gerenciador de foco simples para um grupo de campos de texto de entrada. Nesse caso, a borda do campo de texto que recebe o foco do teclado ativada (exibida), e a borda do campo de texto que perdeu o foco desativada.
Para criar um gerenciador de foco simples com ouvintes de eventos:
1. 2.

Com a ferramenta Text (Texto), crie um campo de texto no Stage (Palco). Selecione o campo de texto e, no inspetor Properties (Propriedades), selecione Input (Entrada) no menu pop-up Text Type (Tipo de texto) e selecione a opo Show Border Around Text (Mostrar borda em torno do texto).

352

Manipulando eventos

3.

Crie outro campo de texto de entrada abaixo do primeiro. Verifique se a opo Show Border Around Text no est selecionada para esse campo de texto. Voc pode continuar a criar os campos de texto de entrada.

4.

Selecione Frame 1 (Quadro 1) na Timeline (Linha de tempo) e abra o painel Actions (Aes), em Window (Janela) > Actions. Para criar um objeto que oua a notificao de foco da classe Selection, digite o seguinte cdigo no painel Actions:
// Cria um objeto ouvinte, focusListener. var focusListener:Object = new Object(); // Define a funo do objeto ouvinte. focusListener.onSetFocus = function(oldFocus_txt:TextField, newFocus_txt:TextField) { oldFocus_txt.border = false; newFocus_txt.border = true; }

5.

Esse cdigo cria um objeto chamado focusListener que define a propriedade onSetFocus e atribui uma funo a ela. A funo usa dois parmetros: uma referncia ao campo de texto que perdeu o foco, e outra ao campo de texto que ganhou o foco. A funo define a propriedade border do campo de texto que perdeu o foco como false e a propriedade border do campo de texto que ganhou o foco como true.
6.

Para registrar o objeto focusListener para receber eventos do objeto Selection, adicione o seguinte cdigo ao painel Actions:
// Registra focusListener no transmissor. Selection.addListener(focusListener);

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.

Usando ouvintes de eventos com componentes


A sintaxe do ouvinte de eventos ligeiramente diferente quando se trabalha com componentes. Os componentes geram eventos que devem ser ouvidos por meio de um objeto ouvinte ou de uma funo personalizada. O exemplo a seguir mostra como usar ouvintes de eventos para monitorar o andamento do download de uma imagem carregada dinamicamente.

Usando ouvintes de eventos com componentes

353

Para ouvir eventos do componente Loader:


1.

Arraste uma instncia do componente Loader do painel Components (Componentes) para o Stage (Palco). Selecione o carregador e digite my_ldr na caixa de texto Instance Name (Nome da instncia) no inspetor Properties (Propriedades). Adicione o cdigo a seguir ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal;
System.security.allowDomain("http://www.helpexamples.com"); var loaderListener:Object = new Object(); loaderListener.progress = function(evt_obj:Object):Void { trace(evt_obj.type); // progress trace("\t" + evt_obj.target.bytesLoaded + " of " + evt_obj.target.bytesTotal + " bytes loaded"); } loaderListener.complete = function(evt_obj:Object):Void { trace(evt_obj.type); // complete } my_ldr.addEventListener("progress", loaderListener); my_ldr.addEventListener("complete", loaderListener); my_ldr.load("http://www.helpexamples.com/flash/images/image1.jpg");

2.

3.

Esse cdigo ActionScript define um objeto ouvinte chamado loaderListener, que ouve dois eventos: progress e complete. Quando cada um desses eventos for disparado, o cdigo correspondente ser executado e o texto de depurao ser exibido no painel Output (Sada), se voc testar o arquivo SWF na ferramenta de criao. Em seguida, instrua a instncia my_ldr a ouvir cada um dos dois eventos especificados (progress e complete) e especifique a funo ou o objeto ouvinte a ser executado quando o evento disparado. Finalmente, o mtodo 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 instncia Loader no Stage, e vrias mensagens so exibidas no painel Output. Dependendo do tamanho da imagem para download, e se a imagem tiver sido armazenada em cache no sistema local do usurio, o evento progress poder ser disparado vrias vezes, enquanto o evento complete s ser disparado depois que o download da imagem tiver sido concludo. 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 diferena que voc dever usar o mtodo addEventListener() em vez de chamar addListener(). Depois, especifique o evento que deseja ouvir bem como a funo ou o objeto ouvinte de eventos.

354

Manipulando eventos

Em vez de usar um objeto ouvinte, como no primeiro procedimento em Usando ouvintes de eventos com componentes na pgina 353, possvel usar uma funo personalizada. O cdigo do exemplo anterior poderia ser recriado da seguinte maneira:
System.security.allowDomain("http://www.helpexamples.com"); 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 N OT A

Nos exemplos anteriores, os ouvintes de eventos so sempre adicionados antes da chamada do mtodo Loader.load(). Se voc chamar o mtodo Loader.load() antes de especificar os ouvintes de eventos, possvel que o carregamento seja concludo antes da definio completa dos ouvintes. Isso significa que o contedo poder ser exibido, e o evento complete talvez no seja capturado.

Usando manipuladores de eventos de boto e de clipe de filme


Voc pode anexar manipuladores de eventos diretamente a uma instncia de um boto ou clipe de filme no Stage (Palco) usando os manipuladores de eventos onClipEvent() e on(). O manipulador onClipEvent() transmite eventos de clipes de filme, e o manipulador on() manipula eventos de botes. Para anexar um manipulador de eventos a uma instncia de um boto ou de um clipe de filme, clique na instncia no Stage para coloc-la em foco e, em seguida, insira o cdigo no painel Actions (Aes). O ttulo do painel Actions indica se o cdigo ser anexado ao boto ou ao clipe de filme: Actions Panel - Button (Painel Aes - Boto) ou Actions Panel - Movie Clip (Painel Aes - Clipe de filme). Para obter diretrizes sobre o uso de cdigo anexado a instncias de boto ou de clipe de filme, consulte Anexando cdigo a objetos na pgina 783.
No confunda manipuladores de eventos de boto e de clipe de filme com eventos de componentes, como SimpleButton.click, UIObject.hide e UIObject.reveal, que devem ser anexados a instncias de componentes e so abordados em Using Components (Usando componentes).

Usando manipuladores de eventos de boto e de clipe de filme

355

Voc s pode anexar onClipEvent() e on() a instncias de clipes de filme colocadas no Stage durante a criao. No possvel anexar onClipEvent() ou on() a instncias de clipes de filme criadas durante a execuo (por exemplo, com o mtodo attachMovie()). Para anexar manipuladores de eventos a objetos criados durante a execuo, use mtodos manipuladores de eventos ou ouvintes de eventos. (Consulte Usando mtodos manipuladores de eventos na pgina 348 e Usando ouvintes de eventos na pgina 351.)
NO TA

Anexar os manipuladores onClipEvent() e on() no uma prtica recomendada. Em vez disso, coloque o cdigo em scripts de quadro ou em um arquivo de classes, como demonstrado neste manual. Para obter mais informaes, consulte Usando mtodos manipuladores de eventos na pgina 348 e Anexando cdigo a objetos na pgina 783.

Para obter mais informaes sobre manipuladores de eventos de boto e de clipe de filme, consulte os seguintes tpicos: Usando on e onClipEvent com mtodos manipuladores de eventos na pgina 356 Especificando eventos para os mtodos on ou onClipEvent na pgina 358 Anexando ou atribuindo vrios manipuladores a um objeto na pgina 359

Usando on e onClipEvent com mtodos manipuladores de eventos


Em alguns casos, voc poder usar diversas tcnicas para manipular eventos sem conflito. No h conflito entre o uso dos mtodos on() e onClipEvent() e dos mtodos manipuladores de eventos definidos por voc. Por exemplo, suponha que um arquivo SWF contenha um boto; o boto pode ter um manipulador on(press), que instrui o arquivo SWF a ser reproduzido, e pode ter um mtodo onPress(), para o qual voc define uma funo que instrui um objeto do Stage (Palco) a girar. Quando voc clica no boto, o arquivo SWF reproduzido e o objeto gira. Dependendo dos tipos de eventos que voc deseja chamar e de quando eles sero chamados, possvel usar os mtodos on() e onClipEvent(), mtodos manipuladores de eventos ou as duas tcnicas de manipulao de eventos. Entretanto, o escopo de variveis e objetos em manipuladores on() e onClipEvent() diferente daquele em manipuladores e ouvintes de eventos. Consulte Escopo do manipulador de eventos na pgina 362.

356

Manipulando eventos

Use tambm on() com clipes de filme para criar clipes que recebem eventos de boto. Para obter mais informaes, consulte Criando clipes de filme com estados de boto na pgina 361. Para obter informaes sobre a especificao de eventos para on() e onClipEvent(), consulte Especificando eventos para os mtodos on ou onClipEvent na pgina 358.
Para usar um manipulador on e um manipulador de eventos onPress:
1. 2. 3.

Crie um novo documento do Flash e salve-o como handlers.fla. Selecione a ferramenta Rectangle (Retngulo) e desenhe um quadrado grande no Stage. Selecione a ferramenta Selection (Seleo), clique duas vezes no quadrado no Stage e pressione F8 para acessar a caixa de dilogo Convert to Symbol (Converter em smbolo). Digite o nome de um smbolo para a caixa, defina o tipo de clipe como Movie (Filme) e clique em OK. Atribua ao clipe de filme no Stage o nome de instncia box_mc. Adicione o ActionScript a seguir diretamente no smbolo do clipe de filme no Stage:
on(press){ trace("on (press) {...}"); }

4.

5. 6.

7.

Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:


box_mc.onPress = function() { trace("box_mc.onPress = function() {...};"); };

8.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. Quando voc clica no smbolo do clipe de filme no Stage, a sada a seguir enviada para o painel Output: on (press) {...} box_mc.onPress = function() {...};
N OT A

Anexar os manipuladores onClipEvent() e on() no uma prtica recomendada. Em vez disso, coloque o cdigo em scripts de quadro ou em um arquivo de classes, como demonstrado neste manual. Para obter mais informaes, consulte Usando mtodos manipuladores de eventos na pgina 348 e Anexando cdigo a objetos na pgina 783.

Usando manipuladores de eventos de boto e de clipe de filme

357

Especificando eventos para os mtodos on ou onClipEvent


Para usar um manipulador on() ou onClipEvent(), anexe-o diretamente a uma instncia de um boto ou clipe de filme no Stage (Palco) e especifique o evento a ser manipulado para essa instncia. Para obter uma lista completa de eventos suportados pelos manipuladores de eventos on() e onClipEvent(), consulte %{on handler}% e %{onClipEvent handler}% em ActionScript 2.0 Language Reference. Por exemplo, o manipulador de eventos on() a seguir executado sempre que o usurio clica no boto ao qual ele est anexado.
on (press) { trace("Thanks for pressing me."); }

possvel especificar dois ou mais eventos para cada manipulador on(), separados por vrgulas. O ActionScript em um manipulador executado quando um dos eventos especificados pelo manipulador ocorre. Por exemplo, este manipulador on() anexado a um boto executado sempre que o mouse passa sobre o boto:
on (rollOver, rollOut) { trace("You rolled over, or rolled out"); }

Tambm possvel adicionar eventos de pressionamento de tecla usando manipuladores on(). Por exemplo, o cdigo a seguir rastreia uma seqncia de caracteres quando voc pressiona o nmero 3 no teclado. Selecione uma instncia de boto ou de clipe de filme e adicione o seguinte cdigo ao painel Actions (Aes):
on (keyPress "3") { trace("You pressed me"); }

Como alternativa, se quiser rastrear quando a tecla Enter pressionada por um usurio, use o formato de cdigo a seguir. Selecione uma instncia de boto ou de clipe de filme e adicione o seguinte cdigo ao painel Actions:
on (keyPress "<Enter>") { trace("Enter Pressed"); }

358

Manipulando eventos

Selecione Control (Controlar) > Test Movie (Testar filme) e pressione a tecla Enter para ver a seqncia de caracteres rastreada no painel Output (Sada). Se nenhuma seqncia for rastreada, selecione Control > Disable Keyboard Shortcuts (Desativar atalhos de teclado) e tente novamente. Para obter mais informaes sobre a adio de interatividade de pressionamento de tecla a aplicativos, consulte %{Key}%.
NO T A N OT A

Anexar os manipuladores onClipEvent() e on() no uma prtica recomendada. Em vez disso, coloque o cdigo em scripts de quadro ou em um arquivo de classes, como demonstrado neste manual. Para obter mais informaes, consulte Usando mtodos manipuladores de eventos na pgina 348 e Anexando cdigo a objetos na pgina 783.

Anexando ou atribuindo vrios manipuladores a um objeto


Voc tambm poder anexar mais de um manipulador a um objeto se desejar que scripts diferentes sejam executados quando ocorrerem eventos distintos. Por exemplo, possvel anexar os manipuladores onClipEvent() a seguir mesma instncia de clipe de filme. O primeiro executado quando o primeiro clipe de filme carregado, ou quando aparece no Stage (Palco); o segundo executado quando o clipe de filme descarregado do Stage.
on (press) { this.unloadMovie() } onClipEvent (load) { trace("I've loaded"); } onClipEvent (unload) { trace("I've unloaded"); } Anexar os manipuladores onClipEvent() e on() no uma prtica recomendada. Em vez disso, coloque o cdigo em scripts de quadro ou em um arquivo de classes, como demonstrado neste manual. Para obter mais informaes, consulte Usando mtodos manipuladores de eventos na pgina 348 e Anexando cdigo a objetos na pgina 783.

Para anexar vrios manipuladores a um objeto usando o cdigo colocado na Timeline (Linha de tempo), consulte o exemplo a seguir. O cdigo anexa os manipuladores onPress e onRelease a uma instncia de clipe de filme.

Usando manipuladores de eventos de boto e de clipe de filme

359

Para atribuir vrios manipuladores a um objeto:


1. 2.

Crie um novo documento do Flash e atribua o nome assignMulti.fla a ele. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e adicione o seguinte cdigo ao painel Actions (Aes):
this.createEmptyMovieClip("img_mc", 10); var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip) { target_mc.onPress = function() { target_mc.startDrag(); }; target_mc.onRelease = function() { target_mc.stopDrag(); }; } mclListener.onLoadError = function(target_mc:MovieClip) { trace("error downloading image"); } var img_mcl:MovieClipLoader = new MovieClipLoader(); img_mcl.addListener(mclListener); img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc);

3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. A imagem carregada na instncia img_mc e os manipuladores de eventos onPress() e onRelease() permitem arrast-la pelo Stage (Palco).

Transmitindo eventos de instncias de componentes


Para qualquer instncia de componente, possvel especificar como um evento manipulado. Os eventos de componentes so manipulados de maneira diferente dos eventos transmitidos por objetos nativos do ActionScript. Para obter mais informaes, consulte Handling Component Events em Using Components (Usando componentes).

360

Manipulando eventos

Criando clipes de filme com estados de boto


Quando voc anexa um manipulador on() a um clipe de filme ou atribui uma funo a um dos manipuladores de eventos de mouse MovieClip para uma instncia de clipe de filme, o clipe responde aos eventos do mouse da mesma forma que um boto. Tambm possvel criar estados de boto automticos (Up, Over e Down) em um clipe de filme adicionando os rtulos de quadro _up, _over e _down Timeline (Linha de tempo) do clipe de filme. Quando o usurio move o mouse sobre o clipe de filme ou clica nele, a reproduo enviada para o quadro com o rtulo de quadro apropriado. Para designar a rea sensvel utilizada por um clipe de filme, use a propriedade %{hitArea (MovieClip.hitArea property)}%.
Para criar estados de boto em um clipe de filme:
1. 2.

Crie um novo documento do Flash e salve-o como mcbutton.fla. Com a ferramenta Rectangle (Retngulo), desenhe um pequeno retngulo (de cerca de 100 pixels de largura por 20 pixels de altura) no Stage (Palco). Clique duas vezes na forma com a ferramenta Selection (Seleo) e pressione F8 para acessar a caixa de dilogo Convert to Symbol (Converter em smbolo). Digite o nome de smbolo mcbutton, defina o tipo de smbolo para o clipe de filme e clique em OK. Clique duas vezes no smbolo do clipe de filme no Stage para alternar para o modo de edio de smbolo. Crie uma nova camada na Timeline (Linha de tempo) do clipe de filme e atribua a ela o nome labels. Digite o rtulo de quadro _up no inspetor Property (Propriedade). Crie uma nova camada acima da camada padro e da camada labels. Renomeie a nova camada actions e adicione o ActionScript a seguir ao Frame 1 (Quadro 1) da Timeline do clipe de filme:
stop();

3.

4.

5.

6.

7. 8. 9.

10. Selecione

Frame 10, todas as trs camadas e Insert (Inserir) > Timeline > Keyframe (Quadro-chave). Adicione a ao stop() ao Frame 10 da camada actions e o rtulo de quadro _over ao Frame 10 da camada labels. o retngulo no Frame 10 e use o inspetor Property para selecionar outra cor de preenchimento.

11.

12. Selecione

Criando clipes de filme com estados de boto

361

13.

Crie novos quadros-chave no Frame 20 de cada uma das trs camadas e adicione o rtulo de quadro _down no inspetor Property. cor diferente.

14. Modifique a cor do retngulo no Frame 20 para que cada estado dos trs botes tenha uma

15. 16.

Retorne Timeline principal. Para fazer com que o clipe de filme responda a eventos do mouse, siga um destes procedimentos:

Anexe um manipulador de eventos on() instncia de clipe de filme, como abordado em Usando manipuladores de eventos de boto e de clipe de filme na pgina 355. Atribua uma funo a um dos manipuladores de eventos de mouse do objeto de clipe de filme (onPress, onRelease etc.), conforme analisado em Usando mtodos manipuladores de eventos na pgina 348.

17.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. Quando voc move o ponteiro do mouse sobre a instncia do clipe de filme no Stage, o estado do clipe alterado automaticamente para _over. Quando voc clica na instncia do clipe de filme, a reproduo alterada automaticamente para o estado _down do clipe de filme.

Escopo do manipulador de eventos


O escopo, ou contexto, de variveis e comandos que voc declara e executa em um manipulador de eventos depende do tipo de manipulador utilizado: manipuladores de eventos ou ouvintes de eventos, ou manipuladores on() e onClipEvent(). Se voc estiver definindo um manipulador de eventos em uma nova classe do ActionScript, o escopo tambm depender de como o manipulador de eventos definido. Esta seo contm exemplos do ActionScript 1.0 e do ActionScript 2.0. As funes atribudas a mtodos manipuladores de eventos e ouvintes de eventos (como todas as funes do ActionScript criadas por voc) definem o escopo de uma varivel local, mas os manipuladores on() e onClipEvent() no fazem isso.
Exemplos do ActionScript 1.0

Por exemplo, considere os dois manipuladores de eventos a seguir. O primeiro um manipulador de eventos onPress associado a um clipe de filme chamado clip_mc. O segundo um manipulador on() anexado mesma instncia de clipe de filme.
// Anexado Timeline do clipe pai de clip_mc: clip_mc.onPress = function () { var shoeColor; // varivel de funo local shoeColor = "blue";

362

Manipulando eventos

} // manipulador on() anexado a clip_mc: on (press) { var shoeColor; // sem escopo de varivel local shoeColor = "blue"; }

Embora contenham o mesmo cdigo, os dois manipuladores de eventos produzem resultados diferentes. No primeiro caso, a varivel color local para a funo definida para onPress. No segundo caso, como o manipulador on() no define um escopo de varivel local, a varivel definida no escopo da Timeline (Linha de tempo) do clipe de filme clip_mc. Para manipuladores de eventos on() anexados a botes, e no a clipes de filme, as variveis (bem como as chamadas de funes e mtodos) so chamadas no escopo da Timeline que contm a instncia do boto. Por exemplo, o manipulador de eventos on() a seguir produzir resultados diferentes, dependendo de sua anexao a um objeto de clipe de filme ou de boto. No primeiro caso, a chamada da funo play() inicia a reproduo da Timeline que contm o boto; no segundo caso, a chamada da mesma funo inicia a Timeline do clipe de filme ao qual o manipulador est anexado.
// Anexado ao boto. on (press) { play(); // Reproduz a timeline me. } // Anexado ao clipe de filme. on (press) { play(); // Reproduz a timeline do clipe de filme. }

Quando anexada a um objeto de boto, a funo play() aplica-se Timeline que contm o boto, isto , Timeline me do boto. Entretanto, quando o manipulador on(press) estiver anexado a um objeto de clipe de filme, a chamada da funo play() se aplicar ao clipe de filme que utiliza o manipulador. Se o cdigo a seguir for anexado a um clipe de filme, a Timeline me ser reproduzida:
// Anexado ao clipe de filme. on (press) { _parent.play(); // Reproduz a timeline me. }

Em uma definio de manipulador de eventos ou de ouvinte de eventos, a mesma funo play() se aplica Timeline que contm a definio da funo. Por exemplo, suponha que voc declare o mtodo manipulador de eventos my_mc.onPress a seguir na Timeline que contm a instncia de clipe de filme my_mc:

Escopo do manipulador de eventos

363

// Funo definida em uma timeline my_mc.onPress = function () { play(); // Reproduz a timeline onde ela est definida. };

Para reproduzir o clipe de filme que define o manipulador de eventos onPress, faa referncia explicitamente ao clipe usando a palavra-chave this, desta forma:
// Funo definida na timeline raiz my_mc.onPress = function () { this.play(); // reproduz a timeline de my_mc clip. };

Entretanto, o mesmo cdigo colocado na Timeline raiz de uma instncia de boto reproduziria a Timeline raiz:
my_btn.onPress = function () { this.play(); // reproduz a timeline raiz };

Para obter mais informaes sobre o escopo da palavra-chave this em manipuladores de eventos, consulte Escopo da palavra-chave this na pgina 365.
Exemplo do ActionScript 2.0 A classe TextLoader a seguir usada para carregar um arquivo de texto e exibir um texto aps carregar o arquivo com xito. // TextLoader.as class TextLoader { private var params_lv:LoadVars; public function TextLoader() { params_lv = new LoadVars(); params_lv.onLoad = onLoadVarsDone; params_lv.load("http://www.helpexamples.com/flash/params.txt"); } private function onLoadVarsDone(success:Boolean):Void { _level0.createTextField("my_txt", 999, 0, 0, 100, 20); _level0.my_txt.autoSize = "left"; _level0.my_txt.text = params_lv.monthNames; // undefined } }

364

Manipulando eventos

Esse cdigo no funciona corretamente, pois h um problema envolvendo o escopo dos manipuladores de eventos e no est claro se a palavra-chave this faz referncia classe ou ao manipulador de eventos onLoad. O comportamento esperado nesse exemplo que o mtodo onLoadVarsDone() seja chamado no escopo do objeto TextLoader; porm, ele chamado no escopo do objeto LoadVars porque o mtodo foi extrado do objeto TextLoader e inserido no objeto LoadVars. Em seguida, o objeto LoadVars chama o manipulador de eventos this.onLoad depois que o arquivo de texto carregado, e a funo onLoadVarsDone() chamada com a palavra-chave this definida como LoadVars, e no como TextLoader. O objeto params_lv reside no escopo dessa palavra-chave quando chamado, embora a funo onLoadVarsDone() dependa desse objeto por referncia. Portanto, a funo onLoadVarsDone() espera uma instncia params_lv.params_lv que no existe. Para chamar corretamente o mtodo onLoadVarsDone() no escopo do objeto TextLoader, use a seguinte estratgia: use um literal de funo para criar uma funo annima que chame a funo desejada. O objeto owner ainda est visvel no escopo da funo annima e, portanto, pode ser usado para localizar o objeto TextLoader que est fazendo a chamada.
// TextLoader.as class TextLoader { private var params_lv:LoadVars; public function TextLoader() { params_lv = new LoadVars(); var owner:TextLoader = this; params_lv.onLoad = function (success:Boolean):Void { owner.onLoadVarsDone(success); } params_lv.load("http://www.helpexamples.com/flash/params.txt"); } private function onLoadVarsDone(success:Boolean):Void { _level0.createTextField("my_txt", 999, 0, 0, 100, 20); _level0.my_txt.autoSize = "left"; _level0.my_txt.text = params_lv.monthNames; // janeiro,fevereiro,maro,... } }

Escopo da palavra-chave this


A palavra-chave this refere-se ao objeto do escopo em execuo no momento. Dependendo do tipo de tcnica de manipulao de eventos usada, this poder se referir a objetos diferentes.
Em uma funo de manipulador de eventos ou de ouvinte de eventos, this

refere-se ao objeto que define o mtodo manipulador de eventos ou ouvinte de eventos. Por exemplo, no cdigo a seguir, this refere-se a my_mc:

Escopo da palavra-chave this

365

// Manipulador de eventos onPress() anexado timeline principal: my_mc.onPress = function () { trace(this); // _level0.my_mc } Em um manipulador on() anexado a um clipe de filme, this

refere-se ao clipe de filme ao qual o manipulador on() est anexado, como mostra o cdigo a seguir:

// Anexado ao clipe de filme my_mc na timeline principal on (press) { trace(this); // _level0.my_mc } Em um manipulador on() anexado a um boto, this

refere-se Timeline que contm o

boto, como mostra o seguinte cdigo:


// Anexado ao boto na timeline principal on (press) { trace(this); // _level0 }

Usando a classe Delegate


A classe Delegate permite executar uma funo em um escopo especfico. Essa classe fornecida para disparar o mesmo evento em duas funes diferentes, consulte Delegating events to functions em Using Components (Usando componentes), e para chamar funes no escopo da classe em que est contida. Quando voc passa uma funo como um parmetro para a funo chamada no escopo da instncia do componente transmissor, e no no objeto em que ela est declarada. Consulte Delegating the scope of a function in Using Components (Usando componentes). possvel usar Delegate.create() para chamar a funo dentro do escopo do objeto declarante.
EventDispatcher.addEventListener(),

O exemplo a seguir mostra os trs mtodos de audio de eventos de uma instncia do componente Button. Dependendo da forma como voc adiciona ouvintes de eventos a uma instncia do componente Button, o evento disparado em um escopo diferente.
Para usar a classe Delegate para ouvir eventos:
1. 2.

Crie um novo documento do Flash e salve-o como delegate.fla. Arraste um componente Button da pasta User Interface do painel Components (Componentes) para a biblioteca. Adicione e posicione a instncia do boto no Stage (Palco) usando ActionScript em uma etapa posterior.

366

Manipulando eventos

3.

Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:


import mx.controls.Button; import mx.utils.Delegate; function clickHandler(eventObj:Object):Void { trace("[" + eventObj.type + "] event on " + eventObj.target + " instance."); trace("\t this -> " + this); } var buttonListener:Object = new Object(); buttonListener.click = function(eventObj:Object):Void { trace("[" + eventObj.type + "] event on " + eventObj.target + " instance."); trace("\t this -> " + this); }; this.createClassObject(Button, "one_button", 10, {label:"One"}); one_button.move(10, 10); one_button.addEventListener("click", clickHandler); this.createClassObject(Button, "two_button", 20, {label:"Two"}); two_button.move(120, 10); two_button.addEventListener("click", buttonListener); this.createClassObject(Button, "three_button", 30, {label:"Three"}); three_button.move(230, 10); three_button.addEventListener("click", Delegate.create(this, clickHandler));

O cdigo anterior dividido em seis sees (separadas por uma linha em branco). A primeira seo importa a classe Button (para o componente Button) e a classe Delegate. A segunda seo do cdigo define uma funo chamada quando o usurio clica em alguns dos botes. A terceira seo do cdigo cria um objeto usado como um ouvinte de evento e o objeto ouve um nico evento, click. As trs sees restantes do cdigo criam uma nova instncia do componente Button no Stage, reposicionam a instncia e adicionam um ouvite de evento para o evento click. O primeiro boto adiciona um ouvinte para o evento click e passa uma referncia diretamente a uma funo manipuladora click. O segundo boto adiciona um ouvinte para o evento click e passa uma referncia para um objeto ouvinte, que contm um manipulador para esse evento. Por fim, a terceira funo 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 referncia para a funo manipuladora click.

Usando a classe Delegate

367

4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. Clique em cada instncia do boto no Stage para ver o escopo em que o evento manipulado.
a.

5.

Clique no primeiro boto no Stage para rastrear o texto a seguir no painel Output (Sada):
[click] event on _level0.one_button instance. this -> _level0.one_button

Quando voc clica na instncia one_button, o escopo this faz referncia prpria instncia do boto.
b.

Clique no segundo boto 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 instncia two_button, o escopo this faz referncia ao objeto buttonListener.
c.

Clique no terceiro boto no Stage para rastrear o texto a seguir no painel Output:
[click] event on _level0.three_button instance. this -> _level0

Quando voc clica na instncia three_button, o escopo this faz referncia ao escopo especificado na chamada do mtodo Delegate.create() ou, neste caso, a _level0.

368

Manipulando eventos

CAPTULO 11

Trabalhando com clipes de filme


Os clipes de filme assemelham-se a arquivos SWF que funcionam de maneira independente uns dos outros e da Timeline (Linha de tempo) que os contm. Por exemplo, se a Timeline principal possuir somente um quadro, e um clipe de filme nesse quadro possuir dez quadros, cada quadro do clipe de filme ser reproduzido quando o arquivo SWF principal for reproduzido. Um clipe de filme pode, por sua vez, conter outros clipes de filme ou clipes aninhados. Os clipes de filme aninhados dessa maneira tm um relacionamento hierrquico, no qual o clipe pai contm um ou mais clipes filho. possvel atribuir nomes a instncias de clipes de filme para identific-las de forma exclusiva como objetos que podem ser controlados com o ActionScript. Quando um nome de instncia atribudo a uma instncia de clipe de filme, esse nome a identifica como um objeto do tipo de classe MovieClip. Use as propriedades e os mtodos da classe MovieClip para controlar a aparncia e o comportamento dos clipes de filme durante a execuo. Pense nos clipes de filme como objetos autnomos que podem responder aos eventos, enviar mensagens para outros objetos do clipe de filme, manter seu estado e gerenciar seus clipes filho. Dessa maneira, os clipes de filme fornecem o alicerce da arquitetura baseada em componente no Macromedia Flash Basic 8 e no Macromedia Flash Professional 8. Na verdade, os componentes disponveis no painel Components (Componentes), em Window (Janela) > Components, so clipes de filme sofisticados que foram projetados e programados para se parecerem e se comportarem de certos modos. Para obter informaes sobre o uso da API (Application Programming Interface, Interface de programao de aplicativos) Drawing (mtodos de desenho da classe MovieClip), bem como de filtros, mesclagens, animao com script e muito mais, consulte o Captulo 13, Animao, filtros e desenhos.

11

369

Para obter mais informaes sobre clipes de filme, consulte os seguintes tpicos:
Sobre o controle de clipes de filme com o ActionScript . . . . . . . . . . . . . . . . . . . . . .370 Chamando vrios mtodos em um nico clipe de filme. . . . . . . . . . . . . . . . . . . . . . . 372 Carregando e descarregando arquivos SWF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Alterando a posio e a aparncia de um clipe de filme . . . . . . . . . . . . . . . . . . . . . . 376 Arrastando clipes de filme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Criando clipes de filme durante a execuo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Adicionando parmetros 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 mscaras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .397 Manipulando eventos de clipes de filme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Atribuindo uma classe a um smbolo de clipe de filme . . . . . . . . . . . . . . . . . . . . . . . 399 Inicializando as propriedades de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401

Sobre o controle de clipes de filme com o ActionScript


possvel usar as funes globais do ActionScript ou os mtodos da classe MovieClip para realizar tarefas nos clipes de filme. Alguns mtodos da classe MovieClip realizam as mesmas tarefas que as funes de mesmo nome; outros, como hitTest() e swapDepths(), no tm nomes de funo correspondentes. O exemplo a seguir mostra a diferena entre usar um mtodo e usar uma funo. Cada instruo duplica a instncia my_mc, atribui o nome newClip ao novo clipe e o coloca na profundidade 5.
my_mc.duplicateMovieClip("new_mc", 5); duplicateMovieClip(my_mc, "new_mc", 5);

Quando uma funo e um mtodo apresentam comportamentos semelhantes, possvel controlar os clipes de filme usando qualquer um dos dois. A opo escolhida depender de sua preferncia e familiaridade com a criao de scripts no ActionScript. Se voc usar uma funo ou um mtodo, a Timeline (Linha de tempo) de destino dever ser carregada no Flash Player quando a funo ou o mtodo for chamado.

370

Trabalhando com clipes de filme

Para usar um mtodo, ative-o usando o caminho de destino do nome da instncia, seguido de um ponto e do nome do mtodo e dos parmetros, como nas instrues a seguir:
myMovieClip.play(); parentClip.childClip.gotoAndPlay(3);

Na primeira instruo, play() move a reproduo na instncia myMovieClip. Na segunda instruo, o mtodo gotoAndPlay() envia a reproduo em childClip (que filho da instncia parentClip) para o quadro 3 e continua a mover a reproduo. As funes globais que controlam uma Timeline tm um parmetro target que permite especificar o caminho de destino para a instncia a ser controlada. Por exemplo, no script a seguir, startDrag() destina-se instncia em que o cdigo foi colocado e torna-a arrastvel:
my_mc.onPress = function() { startDrag(this); }; my_mc.onRelease = function() { stopDrag(); };

As funes a seguir destinam-se aos clipes de filme: loadMovie(), unloadMovie(), loadVariables(), setProperty(), startDrag(), duplicateMovieClip() e removeMovieClip(). Para usar essas funes, insira um caminho de destino no parmetro target da funo para indicar seu destino. Os mtodos MovieClip a seguir podem controlar clipes de filme ou nveis carregados, e no tm funes 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 informaes sobre essas funes e mtodos, consulte as entradas correspondentes em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0). Para obter um exemplo de animao com script no Flash, navegue at a pasta Samples no disco rgido onde possvel encontrar um arquivo de origem de exemplo, animation.fla.

No Windows, navegue at unidade de inicializao\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.

Sobre o controle de clipes de filme com o ActionScript

371

possvel encontrar exemplos de aplicativos de galeria de fotografias no disco rgido. Esses arquivos contm exemplos do uso do ActionScript para controlar clipes de filme dinamicamente e carregar arquivos de imagem em um arquivo SWF, que inclui a animao com script. Os arquivos de origem de exemplo, gallery_tree.fla e gallery_tween.fla, encontram-se na pasta Samples no disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Chamando vrios mtodos em um nico clipe de filme


possvel usar a instruo with para enderear um clipe de filme uma vez e executar uma srie de mtodos nesse clipe. Essa instruo funciona com todos os objetos do ActionScript (por exemplo, Array, Color e Sound), e no somente com clipes de filme. A instruo with requer um clipe de filme como parmetro. O objeto especificado adicionado ao final do caminho de destino atual. Todas as aes aninhadas em uma instruo with so executadas no novo caminho de destino ou escopo. Por exemplo, no script a seguir, o objeto donut.hole passado instruo with para alterar as propriedades de hole:
with (donut.hole) { _alpha = 20; _xscale = 150; _yscale = 150; }

O script comporta-se como se as instrues contidas na instruo with fossem chamadas na Timeline (Linha de tempo) da instncia hole. O cdigo anterior equivalente ao seguinte exemplo:
donut.hole._alpha = 20; donut.hole._xscale = 150; donut.hole._yscale = 150;

O cdigo anterior tambm equivalente ao seguinte exemplo:


with (donut) { hole._alpha = 20; hole._xscale = 150; hole._yscale = 150; }

372

Trabalhando com clipes de filme

Carregando e descarregando arquivos SWF


Para reproduzir arquivos SWF adicionais sem fechar o Flash Player ou para alternar os arquivos SWF sem carregar outra pgina HTML, use uma das seguintes opes:

A funo loadMovie() global ou o mtodo loadMovie() da classe MovieClip. O mtodo loadClip() da classe MovieClipLoader. Para obter mais informaes sobre a classe MovieClipLoader, consulte %{MovieClipLoader}% em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0).

Tambm possvel usar o mtodo loadMovie() para enviar variveis a um script CGI, que gera um arquivo SWF como sua sada CGI. Por exemplo, use esse procedimento para carregar arquivos de imagem ou SWF dinmicos com base nas variveis especificadas em um clipe de filme. Ao carregar um arquivo SWF, possvel especificar um nvel ou um destino de clipe de filme no qual o arquivo SWF ser carregado. Se voc carregar um arquivo SWF em um destino, o SWF carregado herdar as propriedades do clipe de filme de destino especificado. Uma vez carregado o filme do Flash, possvel alterar essas propriedades. O mtodo unloadMovie() remove um arquivo SWF carregado anteriormente pelo mtodo Descarregar explicitamente um arquivo SWF com unloadMovie() assegura uma transio suave entre arquivos SWF e pode reduzir o volume de memria exigido pelo Flash Player. Em algumas situaes, talvez seja mais eficiente definir a propriedade _visible do clipe de filme como false em vez de descarregar o clipe. Se voc reutilizar o clipe posteriormente, defina a propriedade _visible como false e, depois, como true quando necessrio.
loadMovie().

Use loadMovie() para efetuar qualquer uma das seguintes aes:

Reproduzir uma seqncia de faixas de propaganda que sejam arquivos SWF, colocando uma funo loadMovie() em um arquivo SWF recipiente que carrega e descarrega seqencialmente os arquivos SWF de faixas. Desenvolver uma interface ramificada com links para permitir que o usurio escolha entre diversos arquivos SWF usados para exibir o contedo de um site. Criar uma interface de navegao com controles de navegao no nvel 0 que carregue contedo em outros nveis. Carregar o contedo em nveis ajuda a produzir transies mais suaves entre pginas de contedo do que carregar novas pginas HTML em um navegador.

Para obter mais informaes sobre o carregamento de arquivos SWF, consulte Carregando arquivos SWF e de imagem externos na pgina 621.

Carregando e descarregando arquivos SWF

373

Para obter mais informaes, consulte os seguintes tpicos:


Especificando uma Timeline raiz para arquivos SWF carregados na pgina 374 Carregando arquivos de imagem em clipes de filme na pgina 375

Especificando uma Timeline raiz para arquivos SWF carregados


A propriedade _root do ActionScript especifica ou contm uma referncia Timeline (Linha de tempo) raiz de um arquivo SWF. Se um arquivo SWF possuir vrios nveis, a Timeline raiz estar no nvel que contm o script atualmente em execuo. Por exemplo, se um script no nvel 1 avaliar _root, ser retornado _level1. Entretanto, a Timeline especificada por _root poder mudar dependendo de o arquivo SWF estar sendo executado independentemente (em seu prprio nvel) ou de ter sido carregado em uma instncia de clipe de filme por meio de uma chamada de loadMovie() . No exemplo a seguir, considere um arquivo chamado container.swf que contenha uma instncia de clipe de filme chamada target_mc em sua Timeline principal. O arquivo container.swf declara uma varivel chamada userName na Timeline principal; o mesmo script carrega outro arquivo contents.swf no clipe de filme target_mc:
// Em container.swf: _root.userName = "Tim"; target_mc.loadMovie("contents.swf"); my_btn.onRelease = function():Void { trace(_root.userName); };

No exemplo a seguir, o arquivo SWF carregado, contents.swf, tambm declara uma varivel chamada userName em sua Timeline raiz:
// Em contents.swf: _root.userName = "Mary";

Quando contents.swf for carregado no clipe de filme no arquivo container.swf, o valor de userName que estiver anexado Timeline raiz do arquivo SWF hospedeiro (container.swf ) ser definido como "Mary" em vez de "Tim". Esse procedimento pode fazer com que o cdigo de container.swf (bem como de contents.swf ) funcione inadequadamente.

374

Trabalhando com clipes de filme

Para forar _root a avaliar sempre na Timeline do arquivo SWF carregado, em vez de na Timeline raiz real, use a propriedade _lockroot. possvel definir essa propriedade no arquivo SWF em carga ou no arquivo SWF que esteja sendo carregado. Quando _lockroot definida como true em uma instncia de clipe de filme, esse clipe de filme funciona como _root para qualquer arquivo SWF carregado nele. Quando _lockroot definida como true em um arquivo SWF, esse arquivo funciona como sua prpria raiz, no importando o outro arquivo SWF que o carrega. Qualquer clipe de filme e nmero de clipe de filme pode definir _lockroot como true. Por padro, essa propriedade false. Por exemplo, o autor de container.swf poderia colocar o seguinte cdigo no Frame 1 (Quadro 1) da Timeline principal:
// Adicionado ao Frame 1 em container.swf: target_mc._lockroot = true;

Esta etapa garante que todas as referncias a _root em contents.swf ou em qualquer arquivo SWF carregado em target_mc sero feitas sua prpria Timeline, e no Timeline raiz de container.swf. Agora, quando voc clicar no boto, ser exibido "Tim". Opcionalmente, o autor de contents.swf pode adicionar o seguinte cdigo Timeline principal:
// Adicionado ao Frame 1 em contents.swf: this._lockroot = true;

Esse procedimento garantir que, independentemente de onde contents.swf for carregado, qualquer referncia que ele faa a _root estar relacionada sua prpria Timeline principal, e no quela do arquivo SWF hospedeiro. Para obter mais informaes, consulte %{_lockroot (MovieClip._lockroot property)}%.

Carregando arquivos de imagem em clipes de filme


Voc pode usar a funo loadMovie() ou o mtodo MovieClip de mesmo nome para carregar arquivos de imagem em uma instncia de clipe de filme. Tambm pode usar a funo loadMovieNum() para carregar um arquivo de imagem em um nvel. 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 no aparecer centralizada. Alm disso, quando voc carrega uma imagem em uma Timeline raiz, o canto superior esquerdo da imagem colocado no Stage. A imagem carregada herda a rotao e o dimensionamento do clipe de filme, mas o contedo original do clipe do filme removido.

Carregando e descarregando arquivos SWF

375

Para obter mais informaes, consulte %{loadMovie function}%, %{loadMovie (MovieClip.loadMovie method)}% e %{loadMovieNum function}% em ActionScript 2.0 Language Reference e Carregando arquivos SWF e de imagem externos na pgina 621.

Alterando a posio e a aparncia de um clipe de filme


Para alterar as propriedades de um clipe de filme durante sua reproduo, escreva uma instruo que atribua um valor a uma propriedade ou use a funo setProperty(). Por exemplo, o cdigo a seguir define a rotao da instncia mc como 45:
my_mc._rotation = 45;

Esse cdigo equivalente ao apresentado a seguir, que usa a funo setProperty():


setProperty("my_mc", _rotation, 45);

Algumas propriedades, chamadas somente leitura, possuem valores que podem ser lidos, porm no definidos. (Essas propriedades so especificadas como somente leitura nas entradas correspondentes em ActionScript 2.0 Language Reference). As seguintes propriedades so somente leitura: _currentframe, _droptarget, _framesloaded, _parent, _target, _totalframes, _url, _xmouse e _ymouse. Voc pode criar instrues para definir qualquer propriedade que no seja somente leitura. A instruo a seguir define a propriedade _alpha da instncia de clipe de filme wheel_mc, que filha da instncia car_mc:
car_mc.wheel_mc._alpha = 50;

Alm disso, voc pode criar instrues que obtenham o valor de uma propriedade do clipe de filme. Por exemplo, a instruo a seguir obtm o valor da propriedade _xmouse na Timeline (Linha de tempo) do nvel atual e define a propriedade _x da instncia my_mc como esse valor:
this.onEnterFrame = function() { my_mc._x = _root._xmouse; };

Esse cdigo equivalente ao apresentado a seguir, que usa a funo getProperty():


this.onEnterFrame = function() { my_mc._x = getProperty(_root, _xmouse); };

376

Trabalhando com clipes de filme

As propriedades _x, _y, _rotation, _xscale, _yscale, _height, _width, _alpha e _visible so afetadas pelas transformaes do pai do clipe de filme e transformam o clipe e todos os seus filhos. As propriedades _focusrect, _highquality, _quality e _soundbuftime so globais; elas pertencem somente Timeline principal de nvel 0. Todas as outras propriedades pertencem aos clipes de filme ou nveis carregados. Para obter uma lista de propriedades de clipes de filme, consulte o resumo de propriedades da classe %{MovieClip}% em ActionScript 2.0 Language Reference. Para obter um exemplo de animao com script no Flash, navegue at a pasta Samples no disco rgido onde possvel encontrar um arquivo de origem de exemplo, animation.fla.

No Windows, navegue at unidade de inicializao\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.

possvel encontrar exemplos de aplicativos de galeria de fotografias no disco rgido. Esses arquivos contm exemplos do uso do ActionScript para controlar clipes de filme dinamicamente e carregar arquivos de imagem em um arquivo SWF, que inclui a animao com script. Os arquivos de origem de exemplo, gallery_tree.fla e gallery_tween.fla, encontram-se na pasta Samples no disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Arrastando clipes de filme


Voc pode usar a funo global startDrag() ou o mtodo MovieClip.startDrag() para tornar um clipe de filme arrastvel. Por exemplo, voc pode criar um clipe de filme arrastvel para jogos, funes do tipo arrastar e soltar, interfaces personalizveis, barras de rolagem e controles deslizantes. Um clipe de filme pode ser arrastado at ser parado explicitamente por stopDrag() ou at que outro clipe de filme seja definido por startDrag(). S possvel arrastar um clipe de filme de cada vez em um arquivo SWF.

Arrastando clipes de filme

377

Para criar um comportamento arrastar e soltar mais complexo, voc pode avaliar a propriedade _droptarget do clipe de filme que est sendo arrastado. Por exemplo, voc pode examinar a propriedade _droptarget para verificar se o clipe de filme foi arrastado para um clipe especfico (por exemplo, um clipe de filme lata de lixo) e, em seguida, ativar outra ao, como mostra este exemplo:
// Arraste o lixo. garbage_mc.onPress = function() { this.startDrag(false); }; // Quando o lixo for arrastado para a lixeira, torne-o invisvel. garbage_mc.onRelease = function() { this.stopDrag(); // Converta a notao de barra em notao de ponto usando eval. if (eval(this._droptarget) == trashcan_mc) { garbage_mc._visible = false; } };

Para obter mais informaes, consulte %{startDrag function}% ou %{startDrag (MovieClip.startDrag method)}% em ActionScript 2.0 Language Reference. possvel encontrar um aplicativo de galeria de fotografias de exemplo no disco rgido. Esse arquivo contm um exemplo do uso do ActionScript para controlar clipes de filme dinamicamente e carregar arquivos de imagem em um arquivo SWF, o que inclui tornar cada clipe de filme arrastvel. O arquivo de origem de exemplo, gallery_tween.fla, est localizado na pasta Samples no disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Criando clipes de filme durante a execuo


Alm de criar instncias de clipe de filme no ambiente de criao do Flash, possvel criar instncias de clipe de filme durante a execuo das seguintes maneiras:

Criando um clipe de filme vazio na pgina 379 Duplicando ou removendo um clipe de filme na pgina 381 Anexando um smbolo de clipe de filme ao Stage na pgina 381

378

Trabalhando com clipes de filme

Cada instncia de clipe de filme criada durante a execuo deve ter um nome e um valor de profundidade (pilha ou ordem z). A profundidade especificada determina como o novo clipe substitui os outros clipes na mesma Timeline (Linha de tempo). Ela tambm permite substituir clipes de filme que residam na mesma profundidade. (Consulte Gerenciando profundidades do clipe de filme na pgina 385.) possvel encontrar um aplicativo de galeria de fotografias de exemplo no disco rgido. Esse arquivo contm 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 execuo. O arquivo de origem de exemplo, gallery_tween.fla, est localizado na pasta Samples no disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Um arquivo de origem de exemplo, animation.fla, que cria e remove vrios clipes de filme durante a execuo, encontra-se na pasta Samples do disco rgido

No Windows, navegue at unidade de inicializao\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. Criando um clipe de filme vazio na pgina 379 Duplicando ou removendo um clipe de filme na pgina 381 Anexando um smbolo de clipe de filme ao Stage na pgina 381

Para obter mais informaes, consulte os seguintes tpicos:


Criando um clipe de filme vazio


Para criar uma nova instncia de clipe de filme vazia no Stage (Palco), use o mtodo createEmptyMovieClip() da classe MovieClip. Este mtodo cria um clipe de filme como filho do clipe que chamou o mtodo. O ponto de registro de um clipe de filme vazio recmcriado o canto superior esquerdo. Por exemplo, o cdigo a seguir cria um novo clipe de filme filho chamado new_mc na profundidade10 do clipe de filme parent_mc.
parent_mc.createEmptyMovieClip("new_mc", 10);

Criando clipes de filme durante a execuo

379

O cdigo a seguir cria um novo clipe de filme chamado canvas_mc na Timeline (Linha de tempo) raiz do arquivo SWF no qual o script executado; em seguida, ele ativa loadMovie() para carregar um arquivo JPEG externo nele mesmo.
this.createEmptyMovieClip("canvas_mc", 10); canvas_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");

Como mostra o exemplo a seguir, possvel carregar a imagem image2.jpg em um clipe de filme e usar o mtodo MovieClip.onPress() para faz-la funcionar como um boto. O carregamento de uma imagem com loadMovie() substitui o clipe de filme pela imagem, mas no fornece acesso aos mtodos de clipe de filme. Para obter acesso a esses mtodos, necessrio criar um clipe de filme pai vazio e um clipe de filme filho recipiente. Carregue a imagem no recipiente e coloque o manipulador de eventos no clipe de filme pai.
// Cria um clipe de filme pai para armazenar o recipiente. this.createEmptyMovieClip("my_mc", 0); // Cria um clipe de filme filho em "my_mc". // Esse o clipe de filme que ser substitudo pela imagem. my_mc.createEmptyMovieClip("container_mc",99); // Use MovieClipLoader para carregar a imagem. var my_mcl:MovieClipLoader = new MovieClipLoader(); my_mcl.loadClip("http://www.helpexamples.com/flash/images/image2.jpg", my_mc.container_mc); // Coloque o manipulador de eventos no clipe de filme pai my_mc. my_mc.onPress = function():Void { trace("It works"); };

Para obter mais informaes, consulte %{createEmptyMovieClip (MovieClip.createEmptyMovieClip method)}% em ActionScript 2.0 Language Reference. Um arquivo de origem de exemplo, animation.fla, que cria e remove vrios clipes de filme durante a execuo, encontra-se na pasta Samples do disco rgido

No Windows, navegue at unidade de inicializao\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.

380

Trabalhando com clipes de filme

Duplicando ou removendo um clipe de filme


Para duplicar ou remover instncias de clipe de filme, use as funes globais duplicateMovieClip() ou removeMovieClip(),ou os mtodos da classe MovieClip de mesmo nome. O mtodo duplicateMovieClip() cria uma nova instncia de uma instncia de clipe de filme existente, atribui a ela um novo nome e define sua profundidade ou ordem z. Um clipe de filme duplicado sempre comea no Frame 1 (Quadro 1), mesmo que o clipe original esteja em outro quadro durante a duplicao, e est sempre na frente de todos os clipes definidos anteriormente e colocados na Timeline (Linha de tempo). Para excluir um clipe de filme criado com duplicateMovieClip(), use removeMovieClip(). Os clipes de filme duplicados tambm sero removidos se o clipe pai for excludo. Para obter mais informaes, consulte %{duplicateMovieClip function}% e %{removeMovieClip function}% em ActionScript 2.0 Language Reference. Um arquivo de origem de exemplo, animation.fla, que cria e remove vrios clipes de filme durante a execuo, encontra-se na pasta Samples do disco rgido

No Windows, navegue at unidade de inicializao\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.

Anexando um smbolo de clipe de filme ao Stage


A ltima maneira de criar instncias de clipe de filme durante a execuo usar o mtodo attachMovie(). O mtodo attachMovie() anexa a instncia de um smbolo de clipe de filme na biblioteca do arquivo SWF ao Stage (Palco). O novo clipe torna-se um clipe filho do clipe que o anexou. Para usar o ActionScript para anexar um smbolo de clipe de filme da biblioteca, voc deve exportar o smbolo do ActionScript e atribu-lo a um identificador de vinculao exclusivo. Para isso, use a caixa de dilogo Linkage Properties (Propriedades de vinculao). O padro que todos os clipes de filme exportados para uso com o ActionScript sejam carregados antes do primeiro quadro do arquivo SWF que os contm. Isso pode criar um atraso antes da reproduo do primeiro quadro. Ao atribuir um identificador de vinculao a um elemento, voc tambm pode especificar se o contedo dever ser adicionado antes do primeiro quadro. Se esse contedo no for adicionado ao primeiro quadro, ser necessrio incluir uma instncia dele em algum outro quadro do arquivo SWF. Caso contrrio, o elemento no ser exportado para o arquivo SWF.

Criando clipes de filme durante a execuo

381

Para atribuir um identificador de vinculao a um clipe de filme:


1. 2. 3.

Selecione Window > Library (Biblioteca) para abrir o painel Library. Selecione um clipe de filme no painel Library. No menu pop-up do painel Library, selecione Linkage (Vinculao). A caixa de dilogo Linkage Properties exibida. Em Linkage, selecione Export for ActionScript (Exportar para ActionScript). Em Identifier (Identificador), insira uma ID para o clipe de filme. O padro que o identificador seja igual ao nome do smbolo. Opcionalmente, voc pode atribuir uma classe do ActionScript ao smbolo de clipe de filme. Isso permite que o clipe de filme herde os mtodos e as propriedades de uma classe especificada. (Consulte Atribuindo uma classe a um smbolo de clipe de filme na pgina 399.)

4. 5.

6.

Para no carregar o clipe de filme antes do primeiro quadro, desmarque a opo Export in First Frame (Exportar no primeiro quadro). Se voc desmarcar essa opo, insira uma instncia do clipe de filme no quadro da Timeline (Linha de tempo) onde deseja que ela esteja disponvel. Por exemplo, se o script que voc est criando no fizer referncia ao clipe de filme at o Frame 10 (Quadro 10), coloque uma instncia do smbolo nesse quadro ou antes dele na Timeline.

7.

Clique em OK.

Depois de atribuir um identificador de vinculao a um clipe de filme, voc pode anexar uma instncia do smbolo ao Stage durante a execuo usando attachMovie().
Para anexar um clipe de filme a outro:
1.

Atribua um identificador de vinculao a um smbolo da biblioteca de clipes de filme, como descrito no exemplo anterior. Com o painel Actions (Aes) aberto, a partir de Window (Janela) > Actions, selecione um quadro na Timeline. No painel Script do painel Actions, digite o nome do clipe de filme ou nvel ao qual voc deseja anexar o novo clipe de filme. Por exemplo, para anexar o clipe de filme Timeline raiz, digite this. Na caixa de ferramentas Actions ( esquerda do painel Actions), selecione ActionScript 2.0 Classes (Classes do ActionScript 2.0) > Movie (Filme) > MovieClip > Methods (Mtodos) e selecione attachMovie(). Usando as referncias de cdigo que aparecem como guia, insira os valores dos seguintes parmetros:

2.

3.

4.

5.

382

Trabalhando com clipes de filme

Para idName, especifique o nome do identificador inserido na caixa de dilogo Linkage Properties. Para newName, insira um nome de instncia para o clipe anexado de modo que voc possa especific-lo como destino. Para depth, insira o nvel no qual o filme duplicado ser anexado ao clipe de filme. Cada filme anexado possui sua prpria ordem de empilhamento, sendo que o nvel 0 o nvel do clipe do filme de origem. Os clipes de filme anexados esto sempre sobre o clipe de filme original, como mostra o seguinte exemplo:
this.attachMovie("calif_id", "california_mc", 10);

Para obter mais informaes, consulte %{attachMovie (MovieClip.attachMovie method)}% em ActionScript 2.0 Language Reference.

Adicionando parmetros aos clipes de filme criados dinamicamente


Ao usar MovieClip.attachMovie() e MovieClip.duplicateMovie() para criar ou duplicar um clipe de filme dinamicamente, voc pode preencher o clipe de filme com os parmetros de outro objeto. O parmetro initObject de attachMovie() e duplicateMovie() permite que os clipes de filme criados dinamicamente recebam parmetros de clipe. Para obter mais informaes, consulte %{attachMovie (MovieClip.attachMovie method)}% e em ActionScript 2.0 Language Reference.
%{duplicateMovieClip (MovieClip.duplicateMovieClip method)}%

Para preencher um clipe de filme criado dinamicamente com parmetros de um objeto especificado:

Siga um destes procedimentos:

Use a sintaxe a seguir com o attachMovie():


myMovieClip.attachMovie(idName, newName, depth [, initObject]);

Use a sintaxe a seguir com duplicateMovie():


myMovieClip.duplicateMovie(idName, newName, depth [, initObject]);

O parmetro initObject especifica o nome do objeto cujos parmetros voc deseja usar para preencher o clipe de filme criado dinamicamente.
Para preencher um clipe de filme com parmetros usando attachMovie():
1.

Em um novo documento do Flash, crie um smbolo de clipe de filme selecionando Insert (Inserir) > New Symbol (Novo smbolo).

Adicionando parmetros aos clipes de filme criados dinamicamente

383

2.

Digite dynamic_mc na caixa de texto Symbol Name (Nome do smbolo) e selecione o comportamento Movie Clip (Clipe de filme). Dentro do smbolo, crie um campo de texto dinmico no Stage com um nome de instncia name_txt. Verifique se esse campo de texto est abaixo e direita do ponto de registro. Selecione o Frame 1 da Timeline do clipe de filme e abra o painel Actions, a partir de Window > Actions. Crie uma nova varivel chamada name_str e atribua seu valor propriedade text de name_txt, como mostra o seguinte exemplo:
var name_str:String; name_txt.text = name_str;

3.

4.

5.

6.

Selecione Edit (Editar)> Edit Document (Editar documento) para voltar Timeline principal. Selecione o smbolo de clipe de filme na biblioteca e Linkage (Vinculao) no menu popup Library (Biblioteca). A caixa de dilogo Linkage Properties exibida. Selecione as opes Export for ActionScript (Exportar para ActionScript) e Export in first frame (Exportar no primeiro quadro). Digite dynamic_id na caixa de texto Identifier (Identificador) e clique em OK. o primeiro quadro da Timeline principal e adicione o seguinte cdigo 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});

7.

8.

9.

10. Selecione

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.

possvel encontrar um aplicativo de galeria de fotografias de exemplo no disco rgido. Esse arquivo contm 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 execuo. O arquivo de origem de exemplo, gallery_tween.fla, est localizado na pasta Samples no disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries.

384

Trabalhando com clipes de filme

No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Um arquivo de origem de exemplo, animation.fla, que cria e remove vrios clipes de filme durante a execuo, encontra-se na pasta Samples do disco rgido

No Windows, navegue at unidade de inicializao\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.

Gerenciando profundidades do clipe de filme


Cada clipe de filme tem seu prprio espao de ordem z que determina como os objetos so sobrepostos no clipe de filme ou arquivo SWF pai. Cada clipe de filme tem um valor de profundidade associado, que determina se ele ser renderizado na frente ou atrs de outros clipes de filme na mesma Timeline (Linha de tempo) de clipe de filme. Ao criar um clipe de filme durante a execuo usando %{attachMovie (MovieClip.attachMovie method)}%, %{duplicateMovieClip (MovieClip.duplicateMovieClip method)}% ou %{createEmptyMovieClip (MovieClip.createEmptyMovieClip method)}%, especifique sempre uma profundidade para o novo clipe como um parmetro do mtodo. Por exemplo, o cdigo a seguir anexa um novo clipe de filme Timeline de um clipe de filme chamado container_mc com um valor de profundidade 10.
container_mc.attachMovie("symbolID", "clip1_mc", 10);

Esse exemplo cria um novo clipe de filme com a profundidade 10 no espao de ordem z de container_mc. O cdigo a seguir anexa dois novos clipes de filme ao container_mc. O primeiro clipe, chamado clip1_mc, renderizado atrs do clip2_mc porque um valor de profundidade inferior foi atribudo a ele.
container_mc.attachMovie("symbolID", "clip1_mc", 10); container_mc.attachMovie("symbolID", "clip2_mc", 15);

Os valores de profundidade de clipes de filme podem variar de -16384 a 1048575. Se voc criar ou anexar um novo clipe de filme em uma profundidade em que j existe um clipe de filme, o clipe novo ou anexado substituir o contedo existente. Para evitar esse problema, use o mtodo MovieClip.getNextHighestDepth(), mas no com componentes que usam um sistema de gerenciamento de profundidade diferente. Em vez disso, use DepthManager class com o componente instances.evelyn

Gerenciando profundidades do clipe de filme

385

A classe MovieClip fornece diversos mtodos de gerenciamento de profundidades de clipes de filmes; para obter mais informaes, consulte %{getNextHighestDepth (MovieClip.getNextHighestDepth method)}%, %{getInstanceAtDepth (MovieClip.getInstanceAtDepth method)}%, %{getDepth (MovieClip.getDepth method)}% e %{swapDepths (MovieClip.swapDepths method)}% em ActionScript 2.0 Language Reference. Para obter mais informaes sobre profundidades de clipes de filme, consulte os seguintes tpicos:

Determinando a prxima profundidade mais alta disponvel na pgina 386 Determinando a instncia em uma profundidade particular na pgina 387 Determinando a profundidade de uma instncia na pgina 387 Trocando profundidades de clipes de filme na pgina 388

Determinando a prxima profundidade mais alta disponvel


Para determinar a prxima profundidade mais alta disponvel em um clipe de filme, use MovieClip.getNextHighestDepth(). O valor inteiro retornado por esse mtodo indica a prxima profundidade disponvel que ser renderizada na frente de todos os outros objetos no clipe de filme. O cdigo a seguir anexa um novo clipe de filme, chamado file_mc, com profundidade 10, na Timeline (Linha de tempo) raiz. Depois, ele determina a prxima profundidade mais alta disponvel no mesmo clipe de filme e cria um novo clipe chamado edit_mc nessa profundidade.
this.attachMovie("menuClip","file_mc", 10, {_x:0, _y:0}); trace(file_mc.getDepth()); // 10 var nextDepth:Number = this.getNextHighestDepth(); this.attachMovie("menuClip", "edit_mc", nextDepth, {_x:200, _y:0}); trace(edit_mc.getDepth()); // 11

Nesse caso, a varivel nextDepth contm o valor 11 porque essa a prxima profundidade mais alta disponvel para o clipe de filme edit_mc. No use MovieClip.getNextHighestDepth() com componentes; em vez disso, use o gerenciador de profundidade. Para obter mais informaes, consulte DepthManager class em Component Language Reference (Referncia da linguagem de componentes). Para obter mais informaes sobre MovieClip.getNextHighestDepth(), consulte
%{getNextHighestDepth (MovieClip.getNextHighestDepth method)}%.

386

Trabalhando com clipes de filme

Para obter a profundidade ocupada mais alta atual, subtraia 1 do valor retornado por getNextHighestDepth(), como descrito na prxima seo.

Determinando a instncia em uma profundidade particular


Para determinar a instncia em uma profundidade especfica, use MovieClip.getInstanceAtDepth(). Esse mtodo retorna uma referncia para a instncia de MovieClip na profundidade especificada. O cdigo a seguir combina getNextHighestDepth() e getInstanceAtDepth() para determinar o clipe de filme na profundidade ocupada mais alta (atual) na Timeline (Linha de tempo) raiz.
var highestOccupiedDepth:Number = this.getNextHighestDepth() - 1; var instanceAtHighestDepth:MovieClip = this.getInstanceAtDepth(highestOccupiedDepth);

(MovieClip.getInstanceAtDepth method)}%

Para obter mais informaes, consulte %{getInstanceAtDepth em ActionScript 2.0 Language Reference.

Determinando a profundidade de uma instncia


Para determinar a profundidade de uma instncia de clipe de filme, use MovieClip.getDepth(). O cdigo a seguir faz a iterao de todos os clipes de filme na Timeline (Linha de tempo) principal de um arquivo SWF e exibe o nome da instncia e o valor da profundidade de cada clipe no painel Output (Sada):
for (var item:String in _root) { var obj:Object = _root[item]; if (obj instanceof MovieClip) { var objDepth:Number = obj.getDepth(); trace(obj._name + ":" + objDepth) } }

Para obter mais informaes, consulte %{getDepth (MovieClip.getDepth method)}% em ActionScript 2.0 Language Reference.

Gerenciando profundidades do clipe de filme

387

Trocando profundidades de clipes de filme


Para trocar as profundidades de dois clipes de filme na mesma Timeline, use MovieClip.swapDepths(). Os exemplos a seguir mostram como duas instncias de clipes de filme podem trocar de profundidade durante a execuo.
Para trocar profundidades de clipes de filme:
1. 2. 3.

Crie um novo documento do Flash chamado swap.fla. Desenhe um crculo azul no Stage (Palco). Selecione o crculo azul e, em seguida, Modify (Modificar) > Convert to Symbol (Converter em smbolo). Selecione a opo Movie clip (Clipe de filme) e clique em OK. Selecione a instncia no Stage e digite first_mc na caixa de texto Instance Name (Nome da instncia) no inspetor Property (Propriedade). Desenhe um crculo vermelho no Stage e selecione Modify > Convert to Symbol. Selecione a opo Movie clip (Clipe de filme) e clique em OK. Selecione a instncia no Stage e digite second_mc na caixa de texto Instance Name no inspetor Property. Arraste as duas instncias para que uma se sobreponha ligeiramente a outra no Stage. o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
first_mc.onRelease = function() { this.swapDepths(second_mc); }; second_mc.onRelease = function() { this.swapDepths(first_mc); };

4. 5.

6. 7. 8.

9.

10. Selecione

11.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. Quando voc clica nas instncias no Stage, elas trocam de profundidade. Voc ver as duas instncias alterarem a sobreposio de um clipe por outro.

Para obter mais informaes, consulte %{swapDepths (MovieClip.swapDepths method)}% em ActionScript 2.0 Language Reference.

388

Trabalhando com clipes de filme

Sobre o armazenamento em cache e a rolagem de clipes de filme com o ActionScript


medida que o tamanho dos seus designs no Flash aumenta, esteja voc criando um aplicativo ou animaes complexas com script, necessrio considerar o desempenho e a otimizao. Quando o seu contedo permanece esttico (como um clipe de filme retangular), o Flash no otimiza o contedo. Portanto, quando voc altera a posio do clipe de filme retangular, o Flash redesenha o retngulo inteiro no Flash Player 7 e em verses anteriores. No Flash Player 8, possvel armazenar em cache clipes de filme e botes especificados para melhorar o desempenho do arquivo SWF. O clipe de filme ou o boto uma superfcie, essencialmente uma verso de bitmap dos dados vetoriais da instncia que no devem sofrer muitas alteraes ao longo do arquivo SWF. Portanto, as instncias que tm o armazenamento em cache ativado no so redesenhadas continuamente enquanto o arquivo SWF reproduzido, permitindo que ele seja renderizado rapidamente.
N OT A

Voc pode atualizar os dados vetoriais e, nesse momento, a superfcie recriada. Portanto, os dados vetoriais armazenados em cache na superfcie no precisam permanecer inalterados ao longo de todo o arquivo SWF.

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 instncia de clipe de filme, use o inspetor Properties (Propriedades). Para armazenar clipes de filme ou botes em cache sem usar o ActionScript, voc pode selecionar a opo Use runtime bitmap caching (Usar cache de bitmap em tempo de execuo) no inspetor Properties.

Sobre o armazenamento em cache e a rolagem de clipes de filme com o ActionScript

389

A tabela a seguir contm breve descries das novas propriedades para instncias de clipes de filme:
Propriedade
cacheAsBitmap

Descrio
Faz com que a instncia do clipe de filme armazene em cache sua prpria representao de bitmap. O Flash cria um objeto de superfcie para a instncia, que um bitmap armazenado em cache, em vez de dados vetoriais. Se voc alterar os limites do clipe de filme, a superfcie ser recriada em vez de redimensionada. Para obter mais informaes e um exemplo, consulte Armazenando um clipe de filme em cache na pgina 393.

opaqueBackground Permite especificar uma cor de fundo para a instncia do clipe de filme opaca. Se voc definir essa propriedade como um valor numrico, a instncia do clipe de filme ter uma superfcie opaca (no transparente). Um bitmap opaco no tem um canal alfa (transparncia) e renderizado mais rpido. Para obter mais informaes e um exemplo, consulte Definindo o plano de fundo de um clipe de filme na pgina 396. scrollRect Permite rolar rapidamente o contedo do clipe de filme e obter uma janela que exibe contedo maior. O contedo do clipe cortado, e a instncia rola com os deslocamentos de rolagem, altura e largura especificados. Dessa maneira, o usurio pode rolar rapidamente o contedo do clipe e ter uma janela que exiba contedo maior do que o permitido na rea Stage (Palco). possvel rolar mais rpido os campos de texto e o contedo complexo exibidos na instncia porque o Flash no gera novamente todos os dados vetoriais do clipe de filme. Para obter mais informaes e um exemplo, consulte %{scrollRect (MovieClip.scrollRect property)}%.

Essas trs propriedades so 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 superfcie tambm rolvel, defina as propriedades cacheAsBitmap and para a instncia do clipe de filme. possvel aninhar as superfcies umas dentro das outras. A superfcie copia o bitmap para a prpria superfcie me.
scrollRect

390

Trabalhando com clipes de filme

Para obter informaes sobre mscaras de canais alfa, que exigem a definio da propriedade cacheAsBitmap como true, consulte Sobre mscaras de canal alfa na pgina 398.
NO T A

No possvel aplicar o armazenamento em cache diretamente a campos de texto. Para aproveitar esse recurso, necessrio colocar um texto em um clipe de filme. Por obter um exemplo, consulte o arquivo de exemplo no diretrio de instalao do Flash\Samples and Tutorials\Samples\ActionScript\FlashType.

possvel encontrar um arquivo de origem de exemplo que mostre como aplicar o armazenamento de bitmap em cache a uma instncia. Localize o arquivo denominado cacheBitmap.fla na pasta Samples no disco rgido. No Windows, navegue at a unidade de inicializao\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.

Tambm possvel encontrar um arquivo de origem de exemplo que mostre como aplicar o armazenamento de bitmap em cache um texto de rolagem. Localize o arquivo de origem de exemplo, flashtype.fla, na pasta Samples no disco rgido. No Windows, navegue at a unidade de inicializao\Program Files\Macromedia\Flash 8\Samples e Tutorials\Samples\ActionScript\FlashType. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/ Samples and Tutorials/Samples/ActionScript/FlashType.

Quando ativar o armazenamento em cache


A ativao do armazenamento em cache para um clipe de filme cria uma superfcie, o que oferece diversas vantagens, como a renderizao mais rpida de animaes vetoriais complexas. H vrios cenrios em que ser til ativar o armazenamento em cache. Embora aparentemente seja sempre desejvel ativar esse recurso para melhorar o desempenho dos arquivos SWF, em algumas situaes, ele no melhorar o desempenho ou poder at mesmo pior-lo. Esta seo descreve os cenrios em que recomendvel usar o armazenamento em cache e clipes de filme comuns. O desempenho geral dos dados armazenados em cache depende da complexidade dos dados vetoriais de suas instncias, do volume de dados alterado e da definio ou no da propriedade opaqueBackground. Se voc estiver alterando pequenas regies, a diferena entre usar uma superfcie e usar dados vetoriais poder ser irrelevante. Convm testar os dois cenrios com o seu trabalho antes de implantar o aplicativo.

Sobre o armazenamento em cache e a rolagem de clipes de filme com o ActionScript

391

Para obter informaes sobre mscaras de canais alfa, que exigem a definio da propriedade cacheAsBitmap como true, consulte Sobre mscaras de canal alfa na pgina 398.

Quando usar o armazenamento de bitmap em cache


Veja a seguir os cenrios tpicos em que a ativao do armazenamento de bitmap em cache oferece vantagens significativas. Um aplicativo que contm uma imagem de fundo complexa e detalhada de dados vetoriais (talvez uma imagem qual voc tenha aplicado o comando Trace Bitmap (Traar bitmap) ou uma arte criado no Adobe Illustrator). possvel animar caracteres dispostos sobre o fundo, o que torna a animao mais lenta pois o fundo precisa gerar novamente os dados vetoriais de forma contnua. Para melhorar o desempenho, voc pode selecionar o contedo, armazen-lo em um clipe de filme e definir a propriedade opaqueBackground como true. O fundo renderizado como um bitmap e pode ser redesenhado rapidamente para que a animao seja reproduzida com muito mais rapidez.
Imagem de fundo complexa

Um aplicativo que exibe um grande volume de texto em um campo de texto de rolagem. possvel colocar o campo de texto em um clipe de filme definido como rolvel com limites de rolagem (a propriedade scrollRect). Assim a rolagem rpida de pixels ativada para a instncia especificada. Quando um usurio rola a instncia de clipe de filme, o Flash desloca os pixels rolados para cima e gera a regio recm-exposta, em vez de gerar novamente o campo de texto inteiro.
Campo de texto de rolagem Sistema de janelas Um aplicativo com um sistema complexo de janelas sobrepostas. possvel abrir ou fechar cada janela (por exemplo, as janelas do navegador da Web). Se voc marcar cada janela como uma superfcie (defina a propriedade cacheAsBitmap como true), cada uma ser isolada e armazenada em cache. Os usurios podem arrastar as janelas para que se sobreponham, e as janelas no precisam gerar novamente o contedo vetorial.

Todos esses cenrios melhoram a resposta e a interatividade do aplicativo otimizando os grficos vetoriais. possvel encontrar um arquivo de origem de exemplo que mostre como aplicar o armazenamento de bitmap em cache a uma instncia. Localize o arquivo denominado cacheBitmap.fla na pasta Samples no disco rgido.

No Windows, navegue at a unidade de inicializao\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.

392

Trabalhando com clipes de filme

Tambm possvel encontrar um arquivo de origem de exemplo que mostre como aplicar o armazenamento de bitmap em cache um texto de rolagem. Localize o arquivo de origem de exemplo, flashtype.fla, na pasta Samples no disco rgido.

No Windows, navegue at a unidade de inicializao\Program Files\Macromedia\Flash 8\Samples e Tutorials\Samples\ActionScript\FlashType. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/ Samples and Tutorials/Samples/ActionScript/FlashType.

Quando evitar o uso do armazenamento de bitmap em cache


O uso inadequado desse recurso pode ter um impacto negativo no arquivo SWF. Ao desenvolver um arquivo FLA que utilize superfcies, lembre-se das seguintes diretrizes:

No utilize excessivamente superfcies (clipes de filme com o armazenamento em cache ativado). Como cada superfcie usa mais de memria do que um clipe de filme comum, s ative esse recurso quando precisar melhorar o desempenho da renderizao. Um bitmap armazenado em cache pode ocupar bem mais memria que uma instncia de clipe de filme comum. Por exemplo, se o clipe de filme no Stage (Palco) tiver 250 pixels por 250 pixels de tamanho, quando armazenado em cache, ele poder usar 250 KB em vez de 1 KB no caso de uma instncia de clipe de filme comum (no armazenada em cache).

Evite aumentar o zoom em superfcies armazenadas em cache. Se voc abusar do armazenamento de bitmap em cache, ser consumido um grande volume de memria, especialmente se o contedo for aumentado. Use superfcies para instncias de clipe de filme que sejam, em grande parte, estticas (sem animao). possvel arrastar ou mover a instncia, mas o seu contedo no deve conter muita animao nem sofrer muitas alteraes. Por exemplo, se voc girar ou transformar uma instncia, ela ser alterada entre a superfcie e os dados vetoriais, o que dificulta o processamento e afeta negativamente o arquivo SWF. A mistura de superfcies e dados vetoriais aumenta o volume de processamento que o Flash Player (e, s vezes, o computador) precisa executar. Agrupe ao mximo as superfcies; por exemplo, ao criar aplicativos com janelas.

Armazenando um clipe de filme em cache


Para armazenar uma instncia de clipe de filme em cache, preciso definir a propriedade cacheAsBitmap como true. Depois de defini-la, observe que os pixels da instncia do clipe de filme se encaixam automaticamente em coordenadas inteiras. Ao testar o arquivo SWF, observe que todas as animaes vetoriais complexas so renderizadas mais rpido.

Sobre o armazenamento em cache e a rolagem de clipes de filme com o ActionScript

393

Uma superfcie (um bitmap armazenado em cache) no ser criada, mesmo que a propriedade cacheAsBitmap esteja definida como true nas seguintes situaes:

Se o bitmap tiver mais de 2880 pixels de altura ou largura. Se houver falha na alocao do bitmap (erro de falta de memria).

Para armazenar um clipe de filme em cache:


1. 2.

Crie um novo documento do Flash e atribua ao arquivo o nome cachebitmap.fla. Digite 24 na caixa de texto de quadros por segundo no inspetor Properties (Propriedades), em Window (Janela) > Properties > Properties. Crie ou importe um grfico vetorial complexo para o arquivo FLA. H um grfico vetorial complexo no arquivo de origem concludo para este exemplo no seguinte diretrio:

3.

No Windows, navegue at unidade de inicializao\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.

4.

Selecione o grfico vetorial e, em seguida, Modify (Modificar) > Convert to Symbol (Converter em smbolo). Digite star na caixa de texto Name (Nome) e clique em Advanced (Avanado) se a caixa de dilogo ainda no estiver expandida. Selecione Export for ActionScript (Exportar para ActionScript), que tambm seleciona Export in first frame (Exportar no primeiro quadro). Digite star_id na caixa de texto Identifier (Identificador). Clique em OK para criar o smbolo do clipe de filme com o identificador de vinculao Star. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e adicione o seguinte ActionScript ao painel Actions (Aes):
import mx.transitions.Tween; var star_array:Array = new Array(); for (var i:Number = 0; i < 20; i++) { makeStar(); } function makeStar():Void { var depth:Number = this.getNextHighestDepth(); var star_mc:MovieClip = this.attachMovie("star_id", "star" + depth, depth); star_mc.onEnterFrame = function() { star_mc._rotation += 5;

5.

6.

7. 8.

9.

394

Trabalhando com clipes de filme

} star_mc._y = Math.round(Math.random() * Stage.height - star_mc._height / 2); var star_tween:Tween = new Tween(star_mc, "_x", null, 0, Stage.width, (Math.random() * 5) + 5, true); star_tween.onMotionFinished = function():Void { star_tween.yoyo(); }; star_array.push(star_mc); } var mouseListener:Object = new Object(); mouseListener.onMouseDown = function():Void { var star_mc:MovieClip; for (var i:Number = 0; i < star_array.length; i++) { star_mc = star_array[i]; star_mc.cacheAsBitmap = !star_mc.cacheAsBitmap; } } Mouse.addListener(ouvinteMouse); 10. Selecione 11.

Control (Controlar) > Test Movie (Testar filme) para testar o documento.

Clique em qualquer local no Stage para ativar o armazenamento de bitmap em cache. Voc perceber que a animao deixar de ser animada taxa de 1 quadro por segundo e passar a uma animao suave em que as instncias sero animadas nos dois sentidos de forma alternada no Stage. Quando voc clica no Stage, a definio de cacheAsBitmap alternada entre true e false.

Se voc alternar entre a ativao e a desativao do armazenamento em cache, como demonstrado no exemplo anterior, os dados armazenados em cache sero liberados. Tambm possvel aplicar esse cdigo para uma instncia de boto. Consulte %{cacheAsBitmap (Button.cacheAsBitmap property)}% em ActionScript 2.0 Language Reference. (Referncia 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 informaes sobre mscaras de canais alfa, que exigem a definio da propriedade cacheAsBitmap como true, consulte Sobre mscaras de canal alfa na pgina 398. possvel encontrar um arquivo de origem de exemplo que mostre como aplicar o armazenamento de bitmap em cache a uma instncia. Localize o arquivo denominado cacheBitmap.fla na pasta Samples no disco rgido.

No Windows, navegue at a unidade de inicializao\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.

Sobre o armazenamento em cache e a rolagem de clipes de filme com o ActionScript

395

Tambm possvel encontrar um arquivo de origem de exemplo que mostre como aplicar o armazenamento de bitmap em cache um texto de rolagem. Localize o arquivo de origem de exemplo, flashtype.fla, na pasta Samples no disco rgido.

No Windows, navegue at a unidade de inicializao\Program Files\Macromedia\Flash 8\Samples e Tutorials\Samples\ActionScript\FlashType. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/ Samples and Tutorials/Samples/ActionScript/FlashType.

Definindo o plano de fundo de um clipe de filme


possvel definir um plano de fundo opaco para um clipe de filme. Por exemplo, quando tiver um plano de fundo com arte vetorial complexa, voc poder definir a propriedade opaqueBackground como uma cor especfica, em geral, a mesma cor do Stage (Palco). O plano de fundo ento tratado como um bitmap, que ajuda a otimizar o desempenho. Quando voc define cacheAsBitmap como true e define a propriedade opaqueBackground como uma cor especificada, essa propriedade permite tornar o bitmap interno opaco e renderiz-lo com mais rapidez. Quando voc no define cacheAsBitmap como true, a propriedade opaqueBackground adiciona uma forma quadrada vetorial opaca ao plano de fundo da instncia do clipe de filme. Ela no cria um bitmap automaticamente. O exemplo a seguir mostra como definir o plano de fundo de um clipe de filme para otimizar o desempenho.
Para definir o plano de fundo de um clipe de filme:
1. 2. 3.

Crie um novo documento do Flash chamado background.fla. Desenhe um crculo azul no Stage (Palco). Selecione o crculo azul e, em seguida, Modify (Modificar) > Convert to Symbol (Converter em smbolo). Selecione a opo Movie clip (Clipe de filme) e clique em OK. Selecione a instncia no Stage e digite my_mc na caixa de texto Instance Name (Nome da instncia) no inspetor Properties (Propriedades). Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
/* When you set cacheAsBitmap, the internal bitmap is opaque and renders faster. */ my_mc.cacheAsBitmap = true; my_mc.opaqueBackground = 0xFF0000;

4. 5.

6.

396

Trabalhando com clipes de filme

7.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. O clipe de filme aparece no Stage com a cor de fundo especificada.

Para obter mais informaes sobre essa propriedade, consulte %{opaqueBackground (MovieClip.opaqueBackground property)}% em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0).

Usando clipes de filme como mscaras


possvel usar um clipe de filme como mscara para criar um furo pelo qual o contedo de outro clipe de filme fica visvel. O clipe de filme da mscara reproduz todos os quadros na sua Timeline (Linha de tempo) como em um clipe de filme comum. Voc pode tornar o clipe de filme da mscara arrastvel, anim-lo ao longo de uma guia de movimento, usar formas separadas dentro de uma nica mscara ou redimensionar uma mscara dinamicamente. Tambm pode usar o ActionScript para ativar ou desativar uma mscara. No possvel usar uma mscara para mascarar outra mscara. Tambm no possvel definir a propriedade _alpha de um clipe de filme de mscara. Somente preenchimentos so usados em um clipe de filme de mscara. Os traos so ignorados.
Para criar uma mscara:
1. 2.

Crie um quadrado no Stage (Palco) com a ferramenta Rectangle (Retngulo). Selecione o quadrado e pressione F8 para convert-lo em um clipe de filme. Essa instncia a sua mscara. No inspetor Properties (Propriedades), digite mask_mc na caixa de texto Instance Name (Nome da instncia). O clipe de filme mascarado revelado em todas as reas opacas (no transparentes) do clipe de filme que est funcionando como a mscara.

3.

4. 5.

Selecione Frame 1 (Quadro 1) na Timeline (Linha de tempo). Abra o painel Actions (Aes), em Window (Janela) > Actions, se ele ainda no estiver aberto. No painel Actions, insira o seguinte cdigo:
System.security.allowDomain("http://www.helpexamples.com"); 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();

6.

Usando clipes de filme como mscaras

397

my_mcl.addListener(mclListener); my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc); 7.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. Uma imagem JPEG externa carregada no arquivo SWF durante a execuo e mascarada pela forma desenhada anteriormente no Stage.

Para obter informaes detalhadas, consulte %{setMask (MovieClip.setMask method)}% em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0).

Sobre a mscara de fontes de dispositivo


Voc pode usar um clipe de filme para mascarar o texto que definido em uma fonte de dispositivo. Para que a mscara do clipe de filme de uma fonte de dispositivo funcione adequadamente, o usurio deve ter o Flash Player 6 (6.0.40.0) ou verso posterior. Quando voc usa um clipe de filme para mascarar texto definido em uma fonte de dispositivo, a caixa de delimitao retangular da mscara usada como a forma de mascaramento. Ou seja, se voc criar uma mscara de clipe de filme no-retangular para o texto da fonte de dispositivo no ambiente de criao do Flash, a mscara exibida no arquivo SWF ter a forma da caixa de delimitao retangular da mscara, e no a forma da prpria mscara. As fontes de dispositivo podem ser mascaradas somente usando um clipe de filme como mscara. No possvel mascarar fontes de dispositivo usando uma camada de mscara no Stage (Palco).

Sobre mscaras de canal alfa


H suporte para mscaras de canal alfa quando o clipe de filme de mscara e o clipe de filme mascarado usam o armazenamento de bitmap em cache. Esse suporte tambm permite usar um filtro no clipe de filme de mscara independentemente do filtro aplicado ao clipe de filme mascarado. Para ver um exemplo de mscara alfa, faa o download do arquivo de exemplo de mscara alfa em www.macromedia.com/go/flash_samples. Nesse arquivo de exemplo, a mscara oval (oval_mask) com alfa de 50% e filtro de embaamento aplicado a ela. O clipe de filme mascarado (flower_maskee) tem alfa de 100% e nenhum filtro foi aplicado a ele. O armazenamento de bitmap em cache no tempo de execuo foi aplicado aos dois clipes de filme no inspetor Properties (Propriedades). No painel Actions (Aes), o seguinte cdigo inserido no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
flower_maskee.setMask(oval_mask);

398

Trabalhando com clipes de filme

Quando voc testa o documento, em Control (Controlar) > Test Movie (Testar filme), feita a mistura de alfa no clipe mascarado por meio da mscara.
NO T A

As camadas de mscara no suportam as mscaras de canal alfa. Use o cdigo ActionScript para aplicar uma mscara e o armazenamento de bitmap em cache durante a execuo.

Manipulando eventos de clipes de filme


Os clipes de filme podem responder aos eventos do usurio, como cliques do mouse e pressionamentos de teclas, bem como aos eventos no nvel do sistema, como o carregamento inicial de um clipe de filme no Stage. O ActionScript fornece duas maneiras de manipular eventos do clipe de filme: atravs de mtodos manipuladores de eventos e dos manipuladores de eventos onClipEvent() e on(). Para obter mais informaes sobre a manipulao de eventos de clipes de filme, consulte Captulo 10, Manipulando eventos..

Atribuindo uma classe a um smbolo de clipe de filme


Com o ActionScript 2.0, possvel criar uma classe que estenda o comportamento da classe MovieClip interna e usar caixa de dilogo Linkage Properties (Propriedades de vinculao) para atribuir essa classe a um smbolo da biblioteca de clipes de filme. Sempre que voc criar uma instncia do clipe de filme qual a classe atribuda, ela assumir as propriedades e comportamentos definidos pela classe atribuda a ela. (Para obter mais informaes sobre o ActionScript 2.0, consulte Exemplo: Criando classes personalizadas na pgina 278.) Em uma subclasse da classe MovieClip, voc pode fornecer definies para os mtodos MovieClip internos e manipuladores de eventos, como onEnterFrame e onRelease. No procedimento a seguir, voc criar uma classe MoveRight que prolonga a classe MovieClip; a MoveRight define um manipulador onPress que move os 20 pixels do clipe para a direita sempre que o usurio clica no clipe de filme. No segundo procedimento, voc criar um smbolo de clipe de filme em um novo documento Flash (FLA) e atribuir a classe MoveRight a esse smbolo.
Para criar uma subclasse de clipe de filme:
1. 2.

Crie um novo diretrio chamado BallTest. Selecione File (Arquivo) > New (Novo) e, em seguida, ActionScript file (Arquivo do ActionScript) na lista de tipos de documentos para criar um novo arquivo do ActionScript.

Atribuindo uma classe a um smbolo de clipe de filme

399

3.

Insira o seguinte cdigo no arquivo de script:


// classe MoveRight -- move o clipe para a direita 20 pixels quando ele clicado class MoveRight extends MovieClip { public function onPress() { this._x += 20; } }

4.

Salve o documento como MoveRight.as no diretrio BallTest.

Para atribuir a classe a um smbolo de clipe de filme:


1.

No Flash, selecione File > New, selecione Flash Document (Documento do Flash) na lista de tipos de arquivo e clique em OK. Usando a ferramenta Oval, desenhe um crculo no Stage. Selecione o crculo e, em seguida, Modify (Modificar) > Convert to Symbol (Converter em smbolo). Na caixa de dilogo Convert to Symbol, selecione Movie Clip (Clipe de filme) como o comportamento do smbolo e digite ball_mc na caixa de texto Name (Nome). Selecione Advanced (Avanado) para mostrar as opes de vinculao, se elas ainda no estiverem exibidas. Selecione a opo Export for ActionScript (Exportar para ActionScript) e digite MoveRight na caixa de texto Class (Classe). Clique em OK. Salve o arquivo como ball.fla no diretrio BallTest (o mesmo diretrio que contm o arquivo MoveRight.as). Teste o documento do Flash em Control (Controlar) > Test Movie (Testar filme). Sempre que voc clicar no clipe de filme ball, ele se mover 20 pixels para a direita.

2. 3.

4.

5.

6.

7.

8.

Se voc criar propriedades de componente para uma classe e desejar que um clipe de filme herde essas propriedades, siga esta etapa adicional: com o smbolo do clipe de filme selecionado no painel Library (Biblioteca), selecione Component Definition (Definio de componente) no menu de pop-up Library e insira o nome da nova classe na caixa Class (Classe).

400

Trabalhando com clipes de filme

Inicializando as propriedades de classe


No exemplo apresentado no segundo procedimento em Atribuindo uma classe a um smbolo de clipe de filme, voc adicionou a instncia do smbolo Ball ao Stage (Palco) durante a criao. Como abordado em Adicionando parmetros aos clipes de filme criados dinamicamente na pgina 383, possvel atribuir parmetros aos clipes criados durante a execuo usando o parmetro initObject de attachMovie() e duplicateMovie(). Voc pode usar esse recurso para inicializar as propriedades de classe que est atribuindo a um clipe de filme. Por exemplo, a classe MoveRightDistance a seguir uma variao da classe MoveRight (consulte Atribuindo uma classe a um smbolo de clipe de filme na pgina 399). A diferena uma nova propriedade chamada distance, cujo valor determina quantos pixels um clipe de filme se move quando clicado.
Para passar argumentos para uma classe personalizada:
1. 2.

Crie um novo documento do ActionScript e salve-o como MoveRightDistance.as. Digite o seguinte ActionScript na janela Script:
// Classe MoveRightDistance -- move o clipe para a direita 5 pixels a cada quadro. class MoveRightDistance extends MovieClip { // A propriedade distance determina quantos // pixels o clipe deve se mover a cada clique no boto do mouse. var distance:Number; function onPress() { this._x += this.distance; } }

3. 4.

Salve as alteraes. Crie um novo documento do Flash e salve-o como MoveRightDistance.fla no mesmo diretrio como o arquivo de classes. Crie um smbolo de clipe de filme com uma forma vetorial, como oval, e exclua o contedo do Stage (Palco). Basta um smbolo de clipe de filme da biblioteca para este exemplo. No painel Library (Biblioteca), clique com o boto direito do mouse (Windows), ou mantenha pressionada a tecla Control e clique (Macintosh), no smbolo e selecione Linkage (Vinculao) no menu de contexto.

5.

6.

Inicializando as propriedades de classe

401

7. 8. 9.

Atribua o identificador de vinculao Ball ao smbolo. Digite MoveRightDistance na caixa de texto AS 2.0 Class (Classe AS 2.0). Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
this.attachMovie("Ball", "ball50_mc", 10, {distance:50}); this.attachMovie("Ball", "ball125_mc", 20, {distance:125});

Esse cdigo cria duas novas instncias do smbolo na Timeline raiz do arquivo SWF. A primeira instncia, 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.

402

Trabalhando com clipes de filme

CAPTULO 12

Trabalhando com texto e seqncias de caracteres


Vrios dos aplicativos, apresentaes e grficos criados por voc com o Macromedia Flash Professional 8 ou o Macromedia Flash Basic 8 contm algum tipo de texto. possvel utilizar vrios tipos de texto. Voc pode usar texto esttico em seus layouts, porm texto dinmico para textos mais longos. Tambm pode usar texto de entrada para capturar a entrada do usurio e adicionar texto a uma imagem de fundo. Para criar campos de texto, use a ferramenta de criao do Flash ou o ActionScript. Um modo de exibir texto usar cdigo para manipular como as seqncias de caracteres aparecero antes de serem carregadas e exibidas no Stage (Palco) durante a execuo. possvel trabalhar de vrias maneiras com seqncias de caracteres em um aplicativo; por exemplo, voc pode envi-las para um servidor e recuperar uma resposta, pode analisar seqncias de caracteres em um array ou validar as seqncias de caracteres que o usurio digita em um campo de texto. Este captulo descreve vrias maneiras de usar texto e seqncias de caracteres em aplicativos, com nfase no uso de cdigo para manipular o texto. A lista a seguir descreve a terminologia usada neste captulo.
Serrilhado

12

O texto com serrilhado no utiliza variaes de cor para suavizar as bordas dentadas, ao contrrio do texto sem serrilhado (consulte tambm Sem serrilhado).

Sem serrilhado Use a eliminao de serrilhado para suavizar o texto, a fim de que as bordas dos caracteres exibidos na tela paream menos dentadas. A opo Anti-Aliasing (Eliminao de serrilhado) torna o texto mais legvel alinhando os contornos do texto nas fronteiras dos pixels e especialmente eficiente para renderizar fontes menores com mais nitidez. Caracteres

Os caracteres so letras, numerais e pontuao combinados para formar seqncias de caracteres.

403

Fontes de dispositivo As fontes de dispositivo so fontes especiais no Flash que no so incorporadas a um arquivo SWF. Em vez disso, o Flash Player usa a fonte disponvel no computador local mais semelhante fonte de dispositivo. Como os contornos de fontes no so incorporados, o tamanho de um arquivo SWF menor do que quando so usados contornos de fontes incorporadas. Entretanto, como as fontes de dispositivo no so incorporadas, o texto criado com elas parece diferente do esperado em sistemas de computadores que no possuem uma fonte instalada correspondente fonte do dispositivo. O Flash contm trs fontes de dispositivo: _sans (semelhante Helvetica ou Arial), _serif (semelhante Times Roman) e _typewriter (semelhante Courier). Fontes String

Conjuntos de caracteres com tipo de fonte, estilo e tamanho semelhantes. Uma seqncia de caracteres.

Texto Uma ou mais seqncias de caracteres que podem ser exibidas em um campo de texto ou dentro de um componente de interface de usurio. Campos de texto

Um elemento visual no Stage (Palco) que permite exibir texto para um usurio. Semelhante a um campo de texto de entrada ou controle de formulrio da rea de texto em HTML, o Flash permite definir campos de texto como editveis (somente leitura), formatar como HTML, ativar suporte com vrias linhas, mascarar senhas ou aplicar uma folha de estilos CSS ao texto em formato HTML. possvel aplicar formatao a um campo de texto ou a determinados caracteres dentro de um campo de texto. Alguns exemplos de opes de formatao de texto que podem ser aplicadas ao texto so: alinhamento, recuos, negrito, cor, tamanho de fonte, larguras de margens, itlicos e espaamento entre letras. Para obter mais informaes sobre texto, consulte os seguintes tpicos:

Formatao de texto

Sobre campos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Usando a classe TextField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Sobre o carregamento de texto e variveis em campos de texto . . . . . . . . . . . . . . 415 Usando fontes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 Sobre a renderizao de fontes e texto sem serrilhado. . . . . . . . . . . . . . . . . . . . . . 430 Sobre o layout e a formatao 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

404

Trabalhando com texto e seqncias de caracteres

Sobre campos de texto


Um campo de texto dinmico ou de entrada um objeto TextField (uma instncia da classe TextField). Ao criar um campo de texto no ambiente de criao, voc pode atribuir a ele um nome de instncia no inspetor Properties (Propriedades). possvel usar o nome de instncia em instrues do ActionScript para definir, alterar e formatar o campo de texto e seu contedo usando as classes TextField e TextFormat. possvel utilizar a interface de usurio para criar vrios tipos de campos de texto; outra opo utilizar o ActionScript para criar campos de texto. Os seguintes tipos de campos de texto podem ser criados no Flash:
Texto esttico Use texto esttico para exibir caracteres que no precisam ser alterados, pequenas quantidades de texto ou, ainda, fontes especiais no disponveis na maioria dos computadores. Tambm possvel exibir fontes no convencionais com a incorporao de caracteres para campos de texto dinmico. Texto dinmico

Use campos de texto dinmico quando precisar exibir caracteres que so atualizados ou alterados durante a execuo. Alm disso, voc pode carregar texto em campos de texto dinmico.

Texto de entrada Use campos de texto de entrada quando precisar capturar a entrada do usurio. Os usurios podem digitar texto nesses campos. Componentes de texto

Use os componentes TextArea ou TextInput para exibir ou capturar texto em seus aplicativos. O componente TextArea semelhante a um campo de texto dinmico com barras de rolagem internas. O componente TextInput semelhante a um campo de texto de entrada. Ambos os componentes tm maior funcionalidade do que os campos de texto equivalentes; entretanto, eles tornam o tamanho dos arquivos maior para o aplicativo.
NO T A

Todos os campos de texto oferecem suporte para Unicode. Para obter informaes sobre Unicode, consulte Sobre seqncias de caracteres e a classe String na pgina 477.

Os mtodos da classe TextField permitem definir, selecionar e manipular o texto de um campo de texto dinmico ou de entrada gerado durante a criao ou execuo. Para obter mais informaes, consulte Usando a classe TextField na pgina 406. Para obter informaes sobre depurao de campos de texto durante a execuo, consulte Sobre como exibir as propriedades do campo de texto para depurao na pgina 763.

Sobre campos de texto

405

O ActionScript tambm oferece vrias maneiras de formatar o texto durante a execuo. A classe TextFormat permite definir a formatao de caractere e pargrafo dos objetos TextField (consulte Usando a classe TextFormat na pgina 444). O Flash Player tambm oferece suporte a um subconjunto de marcas HTML que voc pode usar para formatar o texto (consulte Usando texto em formato HTML na pgina 461). O Flash Player 7 e verses posteriores oferecem suporte marca HTML img, que permite incorporar no apenas imagens externas, mas tambm arquivos SWF externos e clipes de filme que residam na biblioteca (consulte Marca de imagem na pgina 465). No Flash Player 7 e verses posteriores, voc pode aplicar os estilos CSS (Cascading StyleSheet, Folha de estilos em cascata) aos campos de texto usando a classe TextField.StyleSheet. Voc pode usar estilos CSS para atribuir estilo s marcas HTML internas, definir novas marcas de formatao ou aplicar estilos. Para obter mais informaes sobre o uso de estilos CSS, consulte Formatando texto com estilos CSS na pgina 447. Tambm possvel atribuir um texto em formato HTML, que pode usar estilos CSS, diretamente a um campo de texto. No Flash Player 7 e verses posteriores, o texto HTML que voc atribui a um campo de texto pode conter mdia incorporada (clipes de filme, arquivos SWF e arquivos JPEG). No Flash Player 8, voc tambm pode carregar dinamicamente imagens PNG, GIF e JPEG progressivas (o Flash Player 7 no oferece suporte a imagens JPEG progressivas). O texto envolvido em torno da mdia incorporada de maneira semelhante a um navegador da Web que envolve o texto em torno da mdia incorporada a um documento HTML. Para obter mais informaes, consulte Marca de imagem na pgina 465. Para obter informaes sobre a terminologia que compara texto, seqncias de caracteres e muito mais, consulte a introduo deste captulo Trabalhando com texto e seqncias de caracteres na pgina 403.

Usando a classe TextField


A classe TextField representa qualquer campo de texto dinmico ou de entrada (editvel) criado com a ferramenta Text (Texto) no Flash. Use os mtodos e as propriedades dessa classe para controlar os campos de texto durante a execuo. Os objetos TextField oferecem suporte s mesmas propriedades que os objetos MovieClip, com exceo das propriedades _currentframe, _droptarget, _framesloaded e _totalframes. Voc pode obter e definir as propriedades, e chamar os mtodos dos campos de texto dinamicamente. Para utilizar o ActionScript para controlar um campo de texto dinmico ou de entrada, atribua a campo de texto um nome de instncia no inspetor Properties (Propriedades). Em seguida, voc pode fazer referncia ao campo de texto com o nome da instncia, e usar os mtodos e propriedades da classe TextField para controlar o contedo ou a aparncia bsica do campo de texto.

406

Trabalhando com texto e seqncias de caracteres

Pode tambm criar objetos TextField durante a execuo e atribuir a eles nomes de instncias, usando o mtodo MovieClip.createTextField(). Para obter mais informaes, consulte Criando campos de texto durante a execuo na pgina 410. Para obter mais informaes sobre o uso da classe TextField, consulte os seguintes tpicos:

Atribuindo texto a um campo de texto durante a execuo na pgina 407 Sobre a instncia do campo de texto e os nomes de variveis na pgina 409

possvel localizar arquivos de origem de exemplo para demonstrar como trabalhar com campos de texto usando o ActionScript. Os arquivos de origem so chamados textfieldsA.fla e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rgido.

No Windows, navegue at a unidade de inicializao\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.

Atribuindo texto a um campo de texto durante a execuo


Ao criar aplicativos com o Flash, talvez voc queira carregar o texto de uma origem externa, como um arquivo de texto, um arquivo XML ou at mesmo um servio remoto da Web. O Flash possibilita um grande controle sobre o modo de criao e exibio de texto no Stage (Placo), como suporte a texto em formato HTML, texto simples, texto em formato XML e folhas de estilo externas. Voc tambm pode usar o ActionScript para definir uma folha de estilo. Para atribuir texto a um campo de texto, possvel usar a propriedade TextField.text ou TextField.htmlText. Ou, se voc digitar um valor no campo de texto da varivel no inspetor Property (Propriedades), poder atribuir um valor ao campo de texto criando uma varivel com o nome especificado. Caso utilize a verso 2 da Arquitetura de Componentes Macromedia no documento do Flash, tambm ser possvel atribuir valores criando vinculaes entre os componentes. O exerccio a seguir atribui texto a um campo de texto durante a execuo.
Para atribuir texto a um campo de texto durante a execuo:
1. 2.

Com a ferramenta Text (Texto), crie um campo de texto no Stage (Palco). Com o campo de texto selecionado, no inspetor Properties (Propriedades) (Window [Janela] > Properties > Properties), selecione Input Text (Texto de entrada) no menu popup Text Type (Tipo de texto) e digite headline_txt na caixa de texto Instance Name (Nome da instncia).

Sobre campos de texto

407

Os nomes de instncias devem conter apenas letras, nmeros, sublinhados (_) e cifres ($).
3.

Selecione Frame 1 (Quadro 1) da Timeline (Linha de tempo) e abra o painel Actions (Aes) (Window > Actions). Insira o seguinte cdigo no painel Actions:
headline_txt.text = "New articles available on Developer Center";

4.

5.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.

Voc tambm 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 cdigo cria um novo campo de texto com o nome de instncia headline_txt. O campo de texto criado na prxima 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 disponveis no Centro de Desenvolvedores) no Stage.
Para criar um campo de texto em formato HTML:

Utilize uma das duas etapas a seguir para ativar a formatao HTML para o campo de texto:

Selecione um campo de texto e clique em Render Text as HTML (Renderizar texto como HTML) no inspetor Property. Defina a propriedade html do campo de texto como true usando o ActionScript (consulte o cdigo de exemplo a seguir).

Para aplicar formatao HTML a um campo de texto usando o ActionScript, digite o seguinte cdigo ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
this.createTextField("headline_txt", this.getNextHighestDepth(), 100, 100, 300, 20); headline_txt.html = true; headline_txt.htmlText = "New articles available on <i>Developer Center</ i>.";

408

Trabalhando com texto e seqncias de caracteres

O cdigo anterior cria, de forma dinmica, um novo campo de texto, ativa a formatao HTML e exibe o texto New articles available on Developer Center (Novos artigos disponveis no Centro de Desenvolvedores) no Stage, exibindo o termo Developer Center em itlico.
A T E N O

Ao usar texto em formato HTML com um campo de texto (e no 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 so chamados textfieldsA.fla e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rgido. No Windows, navegue at a unidade de inicializao\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.

Sobre a instncia do campo de texto e os nomes de variveis


Na caixa de texto Instance Name (Nome da instncia) do inspetor Properties (Propriedades), voc deve atribuir um nome de instncia a um campo de texto para chamar mtodos, bem como para obter e definir propriedades nesse campo. Na caixa de texto Var do inspetor Properties, voc pode atribuir um nome de varivel a um campo de texto dinmico ou de entrada e, em seguida, atribuir valores varivel. Esta uma funcionalidade obsoleta que pode ser usada durante a criao de aplicativos para verses mais antigas do Flash Player (como o Flash Player 4). Para verses mais recentes do Flash Player, defina o texto de um campo de texto usando o nome de instncia correspondente e o ActionScript. Entretanto, no confunda o nome de instncia de um campo de texto com seu nome de varivel. Um nome de varivel de um campo de texto uma referncia varivel ao texto contido nesse campo, e no uma referncia a um objeto. Por exemplo, se voc tiver atribudo a um campo de texto o nome de varivel myTextVar, poder usar o cdigo a seguir para definir o contedo do campo de texto.
var myTextVar:String = "This is what will appear in the text field";

Entretanto, voc no poder usar o nome de varivel myTextVar para definir a propriedade text do campo de texto. Voc deve usar o nome de instncia, como mostra o seguinte cdigo:

Sobre campos de texto

409

// Este exemplo no funcionar. myTextVar.text = "A text field variable is not an object reference"; // Para um campo de texto de entrada com o nome de instncia "myField", isso funcionar. myField.text = "This sets the text property of the myField object";

Use a propriedade TextField.text para controlar o contedo de um campo de texto, a menos que pretenda usar uma verso do Flash Player que no oferea suporte classe TextField. Isso diminui as chances de um conflito de nome de varivel, o qual poder resultar em um comportamento inesperado durante a execuo. Voc pode localizar arquivos de origem de exemplo que demonstrem como trabalhar com arquivos de texto usando o ActionScript. Os arquivos de origem so chamados textfieldsA.fla e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rgido.

No Windows, navegue at a unidade de inicializao\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.

Criando campos de texto durante a execuo


Voc pode usar o mtodo createTextField() da classe MovieClip para criar um campo de texto vazio no Stage durante a execuo. O novo campo de texto anexado linha de tempo do clipe de filme que chama o mtodo.
Para criar dinamicamente um campo de texto com o ActionScript:
1.

Selecione File (Arquivo) > New (Novo) e depois selecione Flash Document (Documento do Flash) para criar um arquivo FLA. Digite o seguinte ActionScript no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
this.createTextField("test_txt", 10, 0, 0, 300, 100);

2.

Esse cdigo 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 mtodos e as propriedades do campo de texto recm-criado, use o nome de instncia especificado no primeiro parmetro do mtodo createTextField(). Por exemplo, o cdigo a seguir cria um novo campo de texto, test_txt, e modifica suas propriedades para torn-lo um campo de texto com quebra automtica e vrias 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;

410

Trabalhando com texto e seqncias de caracteres

test_txt.autoSize = "left"; test_txt.text = "Create new text fields with the MovieClip.createTextField() method."; 4.

Selecione Control (Controlar) > Test Movie (Testar filme) para ver o campo de texto. O texto criado durante a execuo e aparece no Stage (Palco).

Voc pode usar o mtodo TextField.removeTextField() para remover um campo de texto criado com createTextField(). O mtodo removeTextField() no funciona em um campo de texto colocado pela linha de tempo durante a criao. Para obter mais informaes, consulte %{createTextField (MovieClip.createTextField method)}% e %{removeTextField (TextField.removeTextField method)}% em ActionScript 2.0 Language Reference.
N OT A

Algumas propriedades de TextField, como _rotation, no esto disponveis para a criao de campos de texto durante a execuo. S possvel girar um campo de texto se ele utilizar fontes incorporadas. Consulte Para incorporar um smbolo de fonte: na pgina 423.

Voc pode localizar arquivos de origem de exemplo que demonstrem como trabalhar com arquivos de texto usando o ActionScript. Os arquivos de origem so chamados textfieldsA.fla e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rgido. No Windows, navegue at a unidade de inicializao\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.

Sobre a manipulao de campos de texto


possvel manipular campos de texto de vrias maneiras ao criar um arquivo FLA. Voc poder manipular um campo de texto desde que atribua um nome de instncia no inspetor Properties (Propriedades) ou com cdigo se usar cdigo para criar o campo. O exemplo simples apresentado a seguir cria um campo de texto, atribui texto a ele e altera a propriedade border do campo:
this.createTextField("pigeon_txt", this.getNextHighestDepth(), 100, 100, 200, 20); pigeon_txt.text = "I like seeds"; pigeon_txt.border = true;

Para obter uma lista completa das propriedades da classe TextField, consulte o ActionScript 2.0 Language Reference.

Sobre campos de texto

411

Para ver exemplos de manipulao de campos de texto, consulte as seguintes sees:


Alterando a posio de um campo de texto na pgina 412 Alterando as dimenses de um campo de texto durante a execuo na pgina 413

Voc pode localizar arquivos de origem de exemplo que demonstrem como trabalhar com arquivos de texto usando o ActionScript. Os arquivos de origem so chamados textfieldsA.fla e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rgido.

No Windows, navegue at a unidade de inicializao\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.

Alterando a posio de um campo de texto


possvel alterar a posio de um campo de texto no Stage (Palco) durante a execuo. necessrio definir novos valores para as propriedades _x e _y do campo de texto, como mostra o seguinte exemplo.
Para reposicionar um campo de texto usando o ActionScript:
1. 2.

Crie um novo arquivo FLA e salve-o como positionText.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
this.createTextField("my_txt", 10, 0, 0, 300, 200); my_txt.border = true; my_txt.text = "Hello world"; my_txt._x = (Stage.width - my_txt._width) / 2; my_txt._y = (Stage.height - my_txt._height) / 2;

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 so chamados textfieldsA.fla e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rgido.

No Windows, navegue at a unidade de inicializao\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.

412

Trabalhando com texto e seqncias de caracteres

Alterando as dimenses de um campo de texto durante a execuo


Voc poder precisar obter ou definir as dimenses de um campo de texto dinamicamente durante a execuo, em vez de no ambiente de criao. O prximo exemplo cria um campo de texto na linha de tempo principal e define suas dimenses iniciais como 100 pixels de largura por 21 pixels de altura. Posteriormente, o campo de texto redimensionado para 300 pixels de largura por 200 pixels de altura e reposicionado no centro do Stage (Palco).
Para redimensionar um campo de texto com o ActionScript:
1. 2.

Crie um novo documento do Flash e salve-o como resizeText.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
this.createTextField("my_txt", 10, 0, 0, 100, 21); my_txt.border = true; my_txt.multiline = true; my_txt.text = "Hello world"; my_txt.wordWrap = true; my_txt._width = 300; my_txt._height = 200; my_txt._x = (Stage.width - my_txt._width) / 2; my_txt._y = (Stage.height - my_txt._height) / 2;

3.

Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme) para ver os resultados no ambiente de criao.

O exemplo anterior redimensionou um campo de texto criado dinamicamente para 300 pixels por 200 pixels durante a execuo; porm, quando voc carrega contedo de um site externo e no sabe exatamente qual o volume de contedo que ser retornado, essa tcnica poder no ser adequada s suas necessidades. O Flash inclui a propriedade TextField.autoSize(), que permite redimensionar automaticamente um campo de texto para acomodar o seu contedo. O exemplo a seguir demonstra como usar a propriedade TextField.autoSize() para redimensionar o campo de texto aps seu preenchimento com texto.
Para redimensionar automaticamente campos de texto com base no contedo:
1. 2.

Crie um novo documento do Flash e salve-o como resizeTextAuto.fla. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
this.createTextField("my_txt", 10, 10, 10, 160, 120); my_txt.autoSize = "left"; my_txt.border = true; my_txt.multiline = true;

Sobre campos de texto

413

my_txt.text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; my_txt.wordWrap = true;
N OT A

Se voc colar esse cdigo diretamente no painel Actions (Aes) de algumas verses da Ajuda do Flash, possvel que encontre quebras de linha na seqncia de caracteres de texto longa. Nesse caso, o cdigo no ser compilado. Caso encontre essa situao, ative Hidden Characters (Caracteres ocultos) no menu popup do painel Actions e depois remova os caracteres de quebra de linha na seqncia de caracteres de texto longa.

3.

Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme) para exibir o documento do Flash no ambiente de criao. O Flash redimensionar o campo de texto verticalmente para que todo o contedo 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 mxima no campo de texto dimensionado automaticamente, a fim de que a sua altura no exceda os limites do Stage (Palco), use o cdigo 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 usurios visualizem o restante do texto. Uma alternativa mover o ponteiro do mouse sobre o texto; geralmente, esse mtodo adequado ao testar esse cdigo. Voc pode localizar arquivos de origem de exemplo que demonstrem como trabalhar com arquivos de texto usando o ActionScript. Os arquivos de origem so chamados textfieldsA.fla e textfieldsB.fla e encontram-se na pasta Samples, no seu disco rgido.

No Windows, navegue at a unidade de inicializao\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.

414

Trabalhando com texto e seqncias de caracteres

Sobre o carregamento de texto e variveis em campos de texto


Voc pode carregar texto em um documento do Flash de vrias maneiras, incluindo (mas certamente no limitado a) FlashVars, LoadVars, XML ou servios da Web. Talvez o mtodo mais simples de passar texto para um documento do Flash seja usar a propriedade FlashVars, que passa seqncias de texto curtas para um documento do Flash por meio das marcas object e embed contidas no cdigo HTML usado para incorporar o SWF a uma pgina HTML. Uma outra maneira fcil de carregar texto ou variveis em um documento do Flash usar a classe LoadVars, que pode carregar grandes blocos de texto ou uma srie de variveis codificadas em URL a partir de um arquivo de texto. Com base nos exemplos anteriores desta seo, voc pode observar que algumas formas de carregar texto em um arquivo SWF so mais simples do que outras. Entretanto, se voc publicar dados de sites externos, possvel que no haja uma opo para o formato dos dados que precisam ser carregados. Cada mtodo de carregamento e/ou envio de dados para/de um arquivo SWF oferece vantagens e desvantagens. As opes XML, servios da Web e Flash Remoting so as mais versteis para carregar dados externos, mas tambm so as mais difceis de se aprender. Para obter informaes sobre o Flash Remoting, consulte www.macromedia.com/support/ flashremoting. As opes FlashVars e LoadVars so bem mais simples, como demonstrado em Usando FlashVars para carregar e exibir texto na pgina 416 e Usando LoadVars para carregar e exibir texto na pgina 417, mas podem ser muito mais limitadas em termos dos tipos e dos formatos de dados que podem ser carregados. Alm disso, preciso seguir restries de segurana ao enviar e carregar dados. Para obter informaes sobre segurana, consulte o Captulo 17, Noes bsicas de segurana. Para obter mais informaes o carregamento de dados externos, consulte o Captulo 16, Trabalhando com dados externos. As seguintes sees mostram diversas maneiras de carregar texto e variveis em documentos:

Usando FlashVars para carregar e exibir texto na pgina 416 Usando LoadVars para carregar e exibir texto na pgina 417 Carregando variveis ao usar LoadVars na pgina 418 Carregando e exibindo texto de um documento XML na pgina 419

Voc pode localizar arquivos de origem de exemplo que demonstrem como trabalhar com arquivos de texto usando o ActionScript. Os arquivos de origem so chamados loadText.fla e formattedText.fla e encontram-se na pasta Samples, no seu disco rgido.

Sobre o carregamento de texto e variveis em campos de texto

415

No Windows, navegue at a unidade de inicializao\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.

Tambm possvel localizar um arquivo de origem que carrega texto e aplica formatao sem serrilhado, alm de cache de bitmap. O arquivo de origem de exemplo chamado flashtype.fla e encontra-se na pasta Samples do disco rgido:

No Windows, navegue at a unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\FlashType. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/FlashType.

Usando FlashVars para carregar e exibir texto


Embora o uso de FlashVars seja simples, voc precisar publicar seus arquivos SWF junto com documentos HTML. Voc modifica o cdigo gerado em HTML e inclui as propriedades FlashVars nas marcas object e embed. possvel testar o documento do Flash visualizando o documento HTML modificado no navegador da Web.
Para usar FlashVars a fim de passar variveis do documento HTML para o documento do Flash:
1. 2.

Crie um novo documento do Flash e salve-o como flashvars.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
this.createTextField("my_txt", 10, 10, 10, 100, 21); my_txt.text = _level0.username;

3.

Salve o documento do Flash e selecione File (Arquivo) > Publish (Publicar) para gerar os arquivos HTML e SWF.
N OT A

Os documentos HTML so publicados, por padro, no mesmo diretrio que os arquivos FLA. Se um documento HTML no for publicado, selecione File > Publish Settings (Configuraes de publicao) e depois selecione a guia Formats (Formatos). Certifique-se de selecionar HTML.

4. 5.

Abra o documento flashvars.html em um editor HTML ou de texto. No documento HTML, modifique o cdigo contido na tag object conforme mostrado a seguir. O cdigo a ser adicionado est em negrito.

416

Trabalhando com texto e seqncias de caracteres

<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="flashvars" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="flashvars.swf" /> <param name="FlashVars" value="username=Thomas" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="flashvars.swf" FlashVars="username=Thomas" quality="high" bgcolor="#ffffff" width="550" height="400" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/xshockwave-flash" pluginspage="http://www.macromedia.com/go/ getflashplayer" /> </object> 6. 7.

Salve as alteraes no documento HTML. Abra o documento HTML modificado em um navegador da Web. O arquivo SWF exibe o nome Thomas no campo de texto criado dinamicamente no Stage (Palco).

Para obter informaes sobre segurana, consulte o Captulo 17, Noes bsicas de segurana.

Usando LoadVars para carregar e exibir texto


Voc tambm pode usar a classe LoadVars para carregar contedo em um arquivo SWF, que carrega texto ou variveis de um arquivo externo no mesmo servidor ou at mesmo contedo de outro servidor. O exemplo a seguir demonstra como criar dinamicamente um campo de texto e preench-lo com o contedo de um arquivo de texto remoto.
Para usar LoadVars para preencher um campo de texto com texto externo:
1. 2.

Crie um novo documento do Flash e salve-o como loadvarsText.fla. 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; var lorem_lv:LoadVars = new LoadVars(); lorem_lv.onData = function (src:String):Void { if (src != undefined) { my_txt.text = src; } else { my_txt.text = "Unable to load external file.";

Sobre o carregamento de texto e variveis em campos de texto

417

} } lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt");

O primeiro bloco de cdigo do trecho anterior cria um novo campo de texto no Stage (Palco) e ativa os recursos de quebra automtica de texto e vrias linhas. O segundo bloco de cdigo define um novo objeto LoadVars que usado para carregar um arquivo de texto (lorem.txt) de um servidor Web remoto e exibe o seu contedo 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. Aps um pequeno intervalo, o Flash exibir o contedo do arquivo remoto no campo de texto no Stage.

Para obter informaes sobre segurana, consulte o Captulo 17, Noes bsicas de segurana.

Carregando variveis ao usar LoadVars


A classe LoadVars tambm permite carregar variveis em um formato codificado em URL, de maneira semelhante a quando voc passa variveis na seqncia de caracteres de consulta em um navegador da Web . O exemplo a seguir demonstra como carregar um arquivo de texto remoto em um arquivo SWF e exibir suas variveis, monthNames e dayNames.
Para carregar variveis de um arquivo de texto com LoadVars:
1. 2.

Crie um novo documento do Flash e salve-o como loadvarsVariables.fla. Adicione o seguinte cdigo 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; var lorem_lv:LoadVars = new LoadVars(); lorem_lv.onLoad = function (success:Boolean):Void { if (success) { my_txt.text = "dayNames: " + lorem_lv.dayNames + "\n\n"; my_txt.text += "monthNames: " + lorem_lv.monthNames; } else { my_txt.text = "Unable to load external file."; } } /* contents of params.txt: &monthNames=January,February,...&dayNames=Sunday,Monday,...

418

Trabalhando com texto e seqncias de caracteres

*/ lorem_lv.load("http://www.helpexamples.com/flash/params.txt"); 3.

Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme) no menu principal. Como voc est usando o mtodo LoadVars.onLoad() em vez de LoadVars.onData(), o Flash analisa as variveis e cria variveis na instncia do objeto LoadVars. O arquivo de texto externo contm duas variveis, monthNames e dayNames, sendo que ambas contm seqncias de caracteres.

Para obter informaes sobre segurana, consulte o Captulo 17, Noes bsicas de segurana.

Carregando e exibindo texto de um documento XML


Os dados XML so uma forma popular de distribuir contedo na Internet, em parte porque esse um padro amplamente aceito para a organizao e a anlise de dados. Portanto, o XML uma excelente opo para o envio e o recebimento de dados do Flash; entretanto, ele de aprendizado um pouco mais difcil do que a utilizao de LoadVars e FlashVars para carregar dados e exibir texto.
Para carregar texto no Flash a partir de um documento XML externo:
1. 2.

Crie um novo documento do Flash e salve-o como xmlReviews.fla. Adicione o seguinte cdigo 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; var reviews_xml:XML = new XML(); reviews_xml.ignoreWhite = true; reviews_xml.onLoad = function (success:Boolean):Void { if (success) { var childItems:Array = reviews_xml.firstChild.childNodes; for (var i:Number = 0; i < childItems.length; i++) { my_txt.text += childItems[i].firstChild.firstChild.nodeValue + "\n"; } } else { my_txt.text = "Unable to load external file."; } } reviews_xml.load("http://www.helpexamples.com/flash/xml/reviews.xml");

Sobre o carregamento de texto e variveis em campos de texto

419

O primeiro bloco de cdigo do trecho anterior cria um novo campo de texto no Stage (Palco). Esse campo usado para exibir vrias partes do documento XML que ser carregado posteriormente. O segundo bloco de cdigo cria um objeto XML que ser usado para carregar o contedo XML. Depois que a data totalmente carregada e analisada pelo Flash, o manipulador de eventos XML.onLoad() chamado e exibe o contedo do pacote XML no campo de texto.
3.

Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF. O Flash exibe a seguinte sada no campo de texto no Stage:
Item 1 Item 2 ... Item 8

Para obter informaes sobre segurana, consulte o Captulo 17, Noes bsicas de segurana.

Usando fontes
As fontes so conjuntos de caracteres com tipo de fonte, estilo e tamanho semelhantes. No importa o que voc crie com o Flash Basic 8 ou o Flash Professional 8: seus aplicativos provavelmente usaro texto com pelo menos uma ou duas fontes. Se voc criar animaes e no tiver certeza de que os usurios finais tero uma fonte especfica instalada em seus sistemas, importante ter noes bsicas sobre a incorporao de fontes. As sees a seguir mostram como incorporar caracteres, fontes inteiras, fontes compartilhadas, alm de outras tcnicas para se trabalhar com fontes no Flash 8. Para obter mais informaes sobre fontes, consulte as seguintes sees:

Incorporando caracteres na pgina 421 Incorporando fontes na pgina 423 Criando conjuntos de caracteres personalizados na pgina 425 Usando mtodos TextField com fontes incorporadas na pgina 427 Sobre o compartilhamento de fontes na pgina 429

O exemplo a seguir mostra como adicionar e remover caracteres e conjuntos de caracteres incorporados a um documento do Flash.
Para adicionar e remover caracteres e conjuntos de caracteres:
1. 2.

Crie um novo documento do Flash e salve-o como embedding.fla. Crie um campo de texto dinmico no Stage (Palco) usando a ferramenta Text (Texto).

420

Trabalhando com texto e seqncias de caracteres

3.

Clique no boto Embed (Incorporar) para iniciar a caixa de dilogo Character Embedding (Incorporao de caracteres). Selecione um conjunto de caracteres especfico para incorporar, clicando nele com o ponteiro do mouse. Para selecionar vrios conjuntos de caracteres, use a tecla Shift ou Control enquanto seleciona os itens com o ponteiro do mouse. Para selecionar um bloco de conjuntos de caracteres, selecione um conjunto de caracteres com o ponteiro do mouse, pressione e mantenha pressionada a tecla Shift e clique em um novo conjunto de caracteres. Ao usar a tecla Shift, sero selecionados todos os conjuntos de caracteres que estiverem entre os dois conjuntos escolhidos. Para selecionar vrios conjuntos de caracteres no seqenciais, pressione e mantenha pressionada a tecla Control enquanto seleciona os conjuntos de caracteres. Tambm possvel selecionar rapidamente vrios conjuntos de caracteres ao selecionar um conjunto de caracteres com o mouse e, mantendo o boto do mouse pressionado, arrastar o mouse passando sobre vrios conjuntos de caracteres.

4.

5.

Para remover um conjunto de caracteres especfico adicionado anteriormente, pressione e mantenha pressionada a tecla Control e desmarque o conjunto de caracteres ao clicar nele. Para remover todos os caracteres selecionados e qualquer caractere especificado no campo de entrada de texto Include These Characters (Incluir esses caracteres), clique em Dont Embed (No incorporar). A opo Dont Embed limpa quaisquer caracteres individuais ou conjuntos de caracteres previamente definidos.
A T E N O

6.

Ao clicar em Dont Embed na caixa de dilogo Character Embedding (Incorporao de caracteres), sero removidos quaisquer caracteres e conjuntos de caracteres incorporados especificados que foram selecionados previamente sem sua confirmao.

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 necessrios, em vez de incluir contornos de fontes adicionais no utilizadas. Para incorporar determinados caracteres em um campo de texto sem incorporar um conjunto de caracteres inteiro, use a caixa de dilogo Character Embedding (Incorporao de caracteres) para especificar quais caracteres especficos voc deseja incorporar.

Usando fontes

421

Para incorporar caracteres especficos para uso em um campo de texto:


1. 2.

Crie um novo documento do Flash e salve-o como charembed.fla. Com a ferramenta Text (Texto), crie um campo de texto no Stage (Palco) e, no campo de texto, defina o tipo de texto como dinmico ou de entrada. Com o campo de texto ainda selecionado no Stage, clique em Embed (Incorporar) no inspetor Property (Propriedades) para abrir a caixa de dilogo Character Embedding. A caixa de dilogo Character Embedding permite definir quais conjuntos de caracteres sero incorporados no documento do Flash (bem como quantos glifos por conjunto de caracteres) e determinar caracteres especficos a serem incorporados, alm de informar o nmero total de glifos que esto sendo incorporados para este campo de texto.

3.

4.

Digite a seqncia de caracteres ol mundo na caixa de texto Include these characters (Incluir esses caracteres). A caixa de dilogo indica que sero incorporados 8 glifos no total para este campo de texto. Apesar de a seqncia de caracteres ol mundo conter 9 caracteres, como o Flash s incorpora glifos exclusivos, a letra 'o' incorporada apenas uma vez, e no vrias vezes.

5. 6. 7. 8. 9.

Clique em OK para aplicar as alteraes e retornar ao documento. Com a ferramenta Text (Texto), crie um campo de texto novo no Stage (Palco). Defina o tipo de texto do campo como dinmico no inspetor Property. Digite a seqncia de caracteres ol mundo no campo de texto no Stage. Clique no boto Embed no inspetor Properties para abrir a caixa de dilogo Character Embedding novamente. de texto Include These Characters (Incluir esses caracteres). Voc ver a seqncia de caracteres ol mund. No preciso informar ao Flash quais caracteres devem ser includos; ele pode determinar para voc quais so os caracteres exclusivos do campo de texto especificado.
DICA

10. Clique em Auto Fill (Preenchimento automtico) para preencher automaticamente a caixa

O Flash poder determinar que os caracteres sejam incorporados automaticamente apenas se o campo de texto contiver texto no Stage. Se o campo de texto for preenchido usando o ActionScript, especifique quais caracteres devem ser incorporados ao campo de texto.

11.

Clique em OK.

422

Trabalhando com texto e seqncias de caracteres

Incorporando fontes
Quando voc incorpora fontes, o Flash armazena todas as informaes sobre as fontes no arquivo SWF para que elas sejam exibidas corretamente mesmo que no estejam instaladas no computador do usurio. Se voc usar em seu arquivo FLA uma fonte que no esteja instalada no sistema do usurio e no incorpor-la no arquivo SWF, o Flash Player selecionar automaticamente outra fonte para ser usada em seu lugar.
NO T A

Voc s precisar incorporar uma fonte se estiver usando campos de texto dinmico ou de entrada. Para campos de texto estticos, no ser necessrio incorporar a fonte.

Para incorporar um smbolo de fonte:


1.

Selecione Window (Janela) > Library (Biblioteca) para abrir a biblioteca do arquivo FLA atual. Abra a biblioteca qual deseja adicionar um smbolo de fonte. Selecione New Font (Nova fonte) no menu pop-up da biblioteca (no canto superior direito do painel Library). Digite um nome para o smbolo de fonte na caixa de texto Name (Nome) da caixa de dilogo Font Symbol Properties (Propriedades do smbolo de fonte). Selecione uma fonte no menu Font (Fonte) ou digite o nome de uma fonte na caixa de texto Font. Selecione texto Bold (Negrito), Italic (Itlico) ou Alias (Serrilhado) para aplicar um estilo fonte. Digite o tamanho da fonte a ser incorporada e clique em OK para aplicar as alteraes e retornar ao documento. Agora sua fonte exibida na biblioteca do documento atual.

2.

3.

4.

5.

6.

Depois de incorporar uma fonte biblioteca, voc poder us-la com um campo de texto no Stage (Palco).
Para usar um smbolo de fonte incorporado no documento do Flash:
1.

Sigas as etapas indicadas no procedimento que se encontra em Incorporando fontes na pgina 423 para incorporar uma fonte em sua biblioteca. Use a ferramenta Text (Texto) para criar um campo de texto no Stage (Palco). Digite um texto no campo de texto. Selecione o campo de texto e abra o inspetor Properties (Propriedades).
a. b.

2. 3. 4.

Defina o campo de texto para que tenha uma s linha. Selecione o nome da fonte incorporada usando o menu suspenso Font (Fonte).

Usando fontes

423

Aps o nome das fontes incorporadas, exibido um asterisco (*).


5.

Clique no boto Embed (Incorporar) no inspetor Properties (Propriedades) para iniciar a caixa de dilogo Character Embedding (Incorporao de caracteres). Na caixa de dilogo Character Embedding, possvel selecionar os caracteres individuais ou os conjuntos de caracteres a serem incorporados no campo de texto selecionado. Para especificar quais caracteres devem ser incorporados, digite-os na caixa de texto da caixa de dilogo ou clique em Auto Fill (Preenchimento automtico) para preencher automaticamente o campo de texto com os caracteres exclusivos contidos no campo de texto no momento. Se no souber exatamente quais caracteres sero necessrios (por exemplo, se o texto for carregado de um arquivo externo ou de um servio da Web), voc poder selecionar conjuntos inteiros de caracteres para serem incorporados, como Maisculas [A-Z], Minsculas [a-z], Numerais [0-9], Pontuao [!@#%...] e conjuntos de caracteres de diversos idiomas.
N OT A

Cada conjunto de caracteres selecionado aumenta o tamanho final do arquivo SWF porque o Flash precisa armazenar todas as informaes de fonte para cada conjunto usado.

6.

Selecione os caracteres individuais ou os conjuntos de caracteres que deseja incorporar e clique em OK para aplicar as alteraes e retornar ao documento. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash no ambiente de criao. A fonte incorporada exibida no campo de texto no Stage. Para testar de forma adequada se a fonte est incorporada, convm fazer o teste em um computador separado que no tenha a fonte incorporada instalada. Voc tambm pode definir as propriedades TextField._alpha ou TextField._rotation para o campo de texto com fontes incorporadas, pois essas propriedades funcionam somente com essas fontes (consulte as etapas a seguir).

7.

8. 9.

Feche o arquivo SWF e retorne ferramenta de criao. Selecione o campo de texto no Stage e abra o inspetor Properties.
a. b.

Defina o tipo de texto do campo como Dynamic Text (Texto dinmico). Digite font_txt na caixa de texto Instance Name (Nome da instncia). o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):

10. Adicione 11.

font_txt._rotation = 45;

Selecione Control > Test Movie novamente para exibir as alteraes no ambiente de criao.

424

Trabalhando com texto e seqncias de caracteres

A fonte incorporada gira 45 graus no sentido horrio, e voc ainda pode ver o texto porque ele est incorporado ao arquivo SWF.
A T E N O NO TA

Se voc no incorporar uma fonte no documento do Flash, e o Flash Player escolher automaticamente uma fonte substituta no computador do usurio, a propriedade TextField.font retornar a fonte original usada no FLA, e no o nome da fonte substituda. 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 itlico, certifique-se de incorporar os contornos de caracteres normais e itlicos. Caso contrrio, o texto no aparecer no campo de texto.

Criando conjuntos de caracteres personalizados


Alm de usar os conjuntos de caracteres padro do Flash, voc tambm pode criar seus prprios conjuntos de caracteres e adicion-los na caixa de dilogo Character Embedding (Incorporao de caracteres). Por exemplo, talvez seja necessrio permitir que alguns campos incluam Latim Estendido, a fim de suportar vrios caracteres acentuados. Entretanto, talvez voc no precise de numerais e de pontuao ou talvez precise apenas de caracteres maisculos. Em vez de incorporar conjuntos de caracteres inteiros, possvel criar um conjunto de caracteres personalizado que contenha apenas os caracteres de que precisa. Desse modo, possvel reduzir ao mximo o tamanho do arquivo SWF porque no so armazenadas informaes sobre fontes extras para os caracteres dos quais voc no precisa. Para criar um conjunto de caracteres personalizado, edite o arquivo UnicodeTable.xml, localizado no diretrio C:\Program Files\Macromedia\Flash 8\<idioma>\First Run\FontEmbedding\. Esse arquivo define os conjuntos de caracteres padro e os intervalos de caracteres e caracteres que eles contm. Antes de criar um conjunto de caracteres personalizado, preciso compreender a estrutura XML necessria. Os seguintes ns XML definem o conjunto de caracteres Maisculas [A-Z]:
<glyphRange name="Uppercase [A..Z] " id="1" > <range min="0x0020" max ="0x0020" /> <range min="0x0041" max ="0x005A" /> </glyphRange>

Observe que o n glyphRange inclui name e Uppercase [A..Z], e que o n id. A glyphRange pode ter quantos ns filhos range (intervalo) voc precisar. Um intervalo pode ser um nico caractere, como 0x0020 (caractere de espao), visto no trecho anterior, ou um intervalo de caracteres, como o segundo n filho range. Para incorporar apenas um caractere, defina os valores min e max para o mesmo valor de caractere Unicode.

Usando fontes

425

Um outro exemplo de n glyphRange XML o n Numerals [0..9] :


<glyphRange name="Numerals [0..9] " id="3" > <range min="0x0030" max ="0x0039" /> <range min="0x002E" max ="0x002E" /> </glyphRange>

Esse intervalo de caracteres inclui os valores Unicode de 0x0030 (zero) at 0x0039 (9), bem como 0x002E (.). Antes da criao 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 Padres Unicode na Web, www.unicode.org, que contm o grfico Unicode Character Code (Cdigo de caracteres Unicode) para dezenas de idiomas.
A T E N O

Para adicionar conjuntos de caracteres personalizados, preciso editar um arquivo XML na pasta de instalao do Flash. Antes de editar esse arquivo, deve-se fazer uma cpia backup para o caso de precisar voltar a usar a tabela Unicode original.

Para criar e usar um conjunto de caracteres personalizado:


1.

2.

3.

426

A TE N O

A Macromedia recomenda que voc no modifique os conjuntos de caracteres existentes instalados com o Flash e que, em vez disso, crie seus prprios conjuntos de caracteres personalizados com os caracteres e a pontuao necessrios.

Abra o documento UnicodeTable.xml, localizado em <diretrio de instalao do Flash>\<idioma>\First Run\FontEmbedding\, usando um editor XML ou de texto, como Bloco de notas ou TextEdit.
N OT A

Lembre-se de salvar uma cpia backup desse documento, para o caso de precisar voltar a usar o arquivo original que instalado com o Flash.

Role o documento XML at o final e adicione o seguinte cdigo 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>

Salve as alteraes em UnicodeTable.xml. Se o Flash estiver aberto, reinicie o aplicativo para poder usar o novo conjunto de caracteres.

Trabalhando com texto e seqncias de caracteres

4. 5. 6.

Abra ou reinicie o Flash e depois crie um novo documento do Flash. Adicione uma nova instncia TextField no Stage (Palco) usando a ferramenta Text (Texto). Defina o tipo Text da instncia TextField como Dynamic (Dinmico) no inspetor Property (Propriedades) e depois clique em Embed Character Options (Opes de incorporao de caracteres) para abrir a caixa de dilogo Character Embedding (Incorporao de caracteres). Role a caixa de dilogo Character Embedding at o final e selecione o novo conjunto de caracteres personalizados, Maisculas e Numerais [A-Z,0-9] (38 glifos). Selecione quaisquer outros conjuntos de caracteres e clique em OK. Se voc selecionar o conjunto de caracteres personalizado, Maisculas e Numerais [A-Z,09], bem como o conjunto de caracteres padro Maisculas [A-Z] ou Numerais [0-9], observe que o nmero de glifos incorporados no muda. Isso ocorre porque todos os caracteres maisculos so includos no conjunto de caracteres personalizado, e o Flash no inclui caracteres duplicados, o que mantm o tamanho do arquivo o menor possvel. Se voc selecionar o conjunto de caracteres Pontuao, que inclui 52 glifos, bem como o conjunto de caracteres personalizado, que inclui 38 glifos, o Flash s armazenar informaes de 88 glifos, em vez de 90. Isso ocorre porque dois caracteres coincidentes o espao e o ponto j foram includos no conjunto de caracteres personalizado.
DICA

7.

8.

A posio de um conjunto de caracteres na caixa de dilogo Character Embedding determinada pela sua localizao no documento XML. possvel reordenar os conjuntos de caracteres, inclusive os conjuntos de caracteres personalizados, movendo os pacotes <glyphRange> no arquivo XML.

Usando mtodos TextField com fontes incorporadas


Os mtodos da classe TextField oferecem uma funcionalidade til para os seus aplicativos. Por exemplo, voc pode controlar a espessura de um campo de texto usando o ActionScript como demonstrado no exemplo a seguir.
Para definir a espessura de um campo de texto com o ActionScript:
1. 2.

Crie um novo documento do Flash e salve-o como textfieldThickness.fla. Abra o painel Library (Biblioteca) e selecione New Font (Nova fonte) no menu pop-up (no canto superior direito do painel Library).

Usando fontes

427

A caixa de dilogo Font Symbol Properties (Propriedades do smbolo de fonte) aberta. Essa caixa permite selecionar uma fonte para ser incorporada no arquivo SWF (incluindo um estilo e um tamanho de fonte). Voc tambm poder atribuir um nome de fonte exibido na biblioteca do documento e no menu suspenso Font (Fonte) no inspetor Properties (Propriedades), se houver um campo de texto selecionado no Stage (Palco).
a. b. c. d. e. 3.

Selecione a fonte Times New Roman no menu suspenso Font. Verifique se desmarcou as opes Bold (Negrito) e Italic (Itlico). Defina o tamanho como 30 pixels. Insira o nome de fonte Times (embedded) Clique em OK.

Na biblioteca, clique com o boto direito do mouse no smbolo de fonte e selecione Linkage (Vinculao) no menu de contexto. O Flash abrir a caixa de dilogo Linkage Properties (Propriedades de vinculao). Selecione as opes Export for ActionScript (Exportar para ActionScript) e Export in first frame (Exportar no primeiro quadro) e clique em OK. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
// 1 this.createTextField("thickness_txt", 10, 0, 0, Stage.width, 22); this.createTextField("lorem_txt", 20, 0, 20, Stage.width, 0); lorem_txt.autoSize = "left"; lorem_txt.embedFonts = true; lorem_txt.antiAliasType = "advanced"; lorem_txt.text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; lorem_txt.wordWrap = true; // 2 var style_fmt:TextFormat = new TextFormat(); style_fmt.font = "Times (embedded)"; style_fmt.size = 30; lorem_txt.setTextFormat(style_fmt);

4.

5.

428

Trabalhando com texto e seqncias de caracteres

// 3 var mouseListener:Object = new Object(); mouseListener.onMouseMove = function():Void { // Os valores de TextField.thickness podem variar de -200 a +200. lorem_txt.thickness = Math.round(_xmouse * (400 / Stage.width) - 200); thickness_txt.text = "TextField.thickness = " + lorem_txt.thickness; }; Mouse.addListener(mouseListener);

O primeiro bloco de cdigo cria dois campos de texto, thickness_txt e lorem_txt, e posiciona-os no Stage. O campo de texto lorem_txt define sua propriedade embedFonts como true e preenche o campo com um bloco de texto. O segundo bloco de cdigo define um formato de texto com o tipo de fonte Times New Roman, define o tamanho da fonte como 30 pixels e aplica o formato de texto ao campo lorem_txt. O terceiro e ltimo bloco de cdigo define e atribui um ouvinte de mouse para o evento Quando o ponteiro do mouse movido horizontalmente no Stage, a propriedade TextField.thickness alterada para um valor entre -200 e +200, dependendo do valor atual de _xmouse.
onMouseMove. 6. 7.

Salve as alteraes no arquivo FLA. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. Ao mover o ponteiro do mouse para o lado esquerdo do Stage, a espessura da fonte diminui. Ao mover o ponteiro do mouse para o lado direito do Stage, a espessura da fonte aumenta.

Sobre o compartilhamento de fontes


Para usar uma fonte como um item de uma biblioteca compartilhada, crie um smbolo de fonte no painel Library (Biblioteca) e atribua os seguintes atributos ao smbolo de fonte:

Uma seqncia de caracteres de identificao O URL onde o documento que contm o smbolo de fonte ser postado

Dessa maneira, possvel vincular fonte e us-la em um aplicativo Flash sem que ela seja armazenada no arquivo FLA.

Usando fontes

429

Sobre a renderizao de fontes e texto sem serrilhado


A renderizao de fontes no Flash controla a maneira como o texto aparece em um arquivo SWF, ou seja, como ele renderizado (ou desenhado) durante a execuo. A tecnologia avanada de renderizao de fontes usada no Flash Player 8 se chama FlashType. O FlashType utiliza tecnologia avanada de renderizao para ajudar a tornar o texto mais legvel e ntido com tamanhos de fontes pequenos ou mdios, como quando se aplica eliminao de serrilhado avanada a campos de texto. Essa tecnologia ser analisada com mais detalhes mais adiante nesta seo. O recurso de eliminao de serrilhado permite suavizar o texto de modo que as bordas dos caracteres exibidos na tela paream menos dentadas; isso poder ser til principalmente para exibir texto em tamanho pequeno. A opo Anti-Alias (Sem serrilhado) torna os caracteres mais legveis, alinhando contornos de texto ao longo dos limites dos pixels, e muito eficiente para a renderizao mais ntida de fontes de tamanho pequeno.Voc pode aplicar esse recurso a cada campo de texto do aplicativo, em vez de aplic-lo a caracteres individuais. O recurso de eliminao de serrilhado poder ser usado com texto de entrada, dinmico e esttico, se o usurio tiver o Flash Player 7 ou verso posterior. Se o usurio tiver uma verso anterior do Flash Player, esse recurso s poder ser usado com texto esttico. Opes avanadas de eliminao de serrilhado esto disponveis para o Flash Player 8. O Flash Basic 8 e o Flash Professional 8 contm um recurso bem avanado de rasterizao e renderizao de fontes, chamado FlashType, para se trabalhar com fontes sem serrilhado. O Flash 8 oferece cinco mtodos de renderizao de fontes, os quais s esto disponveis para publicao de arquivos SWF no Flash Player 8. Se estiver publicando arquivos para uso com o Flash Player 7 ou verses anteriores, somente a opo Anti-Alias for Animation (Sem serrilhado para animao) estar disponvel para uso com os campos de texto. O FlashType uma tecnologia de renderizao de fontes de alta qualidade que pode ser ativada com o uso da ferramenta de criao do Flash 8 ou do ActionScript. A tecnologia do FlashType permite renderizar tipos de fontes com sada de alta qualidade em tamanhos pequenos e com um controle maior. possvel aplicar o FlashType renderizao de fontes incorporadas para campos de texto estticos, dinmicos e de entrada. Os recursos aprimorados permitem que o texto incorporado aparea no mesmo nvel de qualidade que o texto de dispositivo e que as fontes tenham a mesma aparncia em plataformas diferentes.

430

Trabalhando com texto e seqncias de caracteres

Os mtodos de renderizao de fontes disponveis para o Flash Player 8 so Device Fonts (Fontes de dispositivo), Bitmap Text (no anti-alias) (Texto em bitmap - sem a eliminao de serrilhado), Anti-Alias for Animation (Sem serrilhado para animao), Anti-Alias for Readability (Sem serrilhado para legibilidade) e Custom Anti-Alias (Eliminao de serrilhado personalizada), que permite definir um valor personalizado para espessura e definio. Para obter mais informaes sobre essas opes, consulte Opes de renderizao de fontes do Flash na pgina 432.
N OT A

Quando voc abre arquivos FLA no Flash 8, seu texto no atualizado automaticamente para a opo Anti-Alias for Readability (Sem serrilhado para legibilidade); preciso selecionar campos de texto individuais e alterar manualmente as configuraes de eliminao de serrilhado para tirar proveito da tecnologia de renderizao do FlashType.

Os recursos de eliminao de serrilhado avanada e personalizada oferecem suporte a: Texto dimensionado e girado Todas as fontes (simples, negrito ou itlico) com tamanho de at 255 pontos Exportao de arquivos para a maioria dos formatos (como JPEG ou GIF). Flash Player 7 ou verses anteriores Texto inclinado ou invertido Impresso Exportao de arquivos para o formato PNG.
N OT A

Os recursos de eliminao de serrilhado avanada e personalizada no oferecem suporte a:

Quando o texto animado, o Flash Player desativa a opo avanada de eliminao de serrilhado para melhorar a aparncia do texto medida que ele se move. Quando a animao termina, a opo de eliminao de serrilhado novamente ativada.

Um arquivo de exemplo no seu disco rgido mostra como aplicar e manipular texto sem serrilhado em um aplicativo. Use a tecnologia de renderizao do FlashType para criar um pequeno texto que seja extremamente legvel. Esse exemplo tambm demonstra como os campos de texto podem ser rolados de forma rpida e suave com a utilizao da propriedade cacheAsBitmap. O arquivo de origem de exemplo, flashtype.fla, encontra-se na pasta Samples do disco rgido. No Windows, navegue at a unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\FlashType. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/FlashType.

Sobre a renderizao de fontes e texto sem serrilhado

431

Opes de renderizao de fontes do Flash


H cinco opes de renderizao de fontes disponveis no Flash 8. Para escolher uma opo, selecione o campo de texto e abra o inspetor Properties (Propriedades). Selecione uma opo no menu pop-up de mtodos de renderizao de fontes.
Device Fonts (Fontes de dispositivo) Produz um tamanho de arquivo SWF menor. A opo renderiza as fontes instaladas no computador do usurio final. Bitmap Text (no anti-alias) (Texto em bitmap sem a eliminao de serrilhado) Produz bordas de texto com ngulo agudo, sem usar o recurso de eliminao de serrilhado. Esta opo produz um tamanho de arquivo SWF maior, pois os contornos das fontes so includos nesse arquivo. Anti-alias for Animation (Sem serrilhado para animao)

Produz texto sem serrilhado que animado gradativamente. O texto tambm animado mais rpido em algumas situaes, pois os recursos de alinhamento e de eliminao de serrilhado no so aplicados durante a animao. No se observa aumento de desempenho quando so usadas fontes grandes com muitas letras ou fontes dimensionadas. Esta opo produz um tamanho de arquivo SWF maior, pois os contornos das fontes so includos nesse arquivo.

Anti-Alias for Readability (Sem serrilhado para legibilidade) Usa o mecanismo avanado de eliminao de serrilhado, bem como oferece texto com qualidade e legibilidade mximas. Ela tambm produz o maior tamanho de arquivo SWF, pois os contornos das fontes e informaes especiais sobre o recurso de eliminao de serrilhado so includos no arquivo. Custom Anti-alias

(Eliminao de serrilhado personalizada) igual Anti-Alias for Readability, mas permite manipular visualmente os parmetros de eliminao de serrilhado para produzir uma aparncia especfica. Ela til quando se deseja produzir a melhor aparncia possvel para fontes novas ou no convencionais. Para obter um exemplo de como usar a opo sem serrilhado com o ActionScript, consulte Definindo a opo sem serrilhado com o ActionScript na pgina 433.

432

Trabalhando com texto e seqncias de caracteres

Sobre a modulao de trao contnua


A tecnologia de renderizao de fontes do FlashType explora as propriedades inerentes dos campos de distncia para fornecer CSM (Continuous Stroke Modulation, Modulao de trao contnua); por exemplo, a modulao contnua da espessura do trao e da definio da borda do texto. A CSM utiliza dois parmetros de renderizao para controlar o mapeamento de distncias ADF (Adaptively Sampled Distance Field, Campo de distncia de exemplo de forma adaptvel) para valores de densidade de glifos. Os valores ideais para esses parmetros so extremamente subjetivos; podem depender das preferncias do usurio, condies de luminosidade, propriedades de exibio, tipo da fonte, cores de primeiro plano e de fundo e tamanho do ponto. A funo que mapeia as distncias ADF para valores de densidade possui um limite externo, abaixo do qual os valores so definidos com 0, e um limite interno, acima do qual os valores so definidos com um valor de densidade mxima, como 255.

Definindo a opo sem serrilhado com o ActionScript


O Flash 8 oferece dois tipos de eliminao de serrilhado: normal e avanada. A eliminao de serrilhado avanada encontra-se disponvel apenas no Flash Player 8 e verses posteriores, e s poder ser usada se voc incorporar a fonte na biblioteca e definir a propriedade embedFonts do campo de texto como true. No Flash Player 8, a configurao padro para campos de texto criados com o ActionScript normal. Para definir valores para a propriedade TextField.antiAliasType, use os seguintes valores de seqncia de caracteres:
normal

Aplica a eliminao de serrilhado de texto regular. Corresponde ao tipo de eliminao de serrilhado que o Flash Player usava na verso 7 ou em verses anteriores.

avanado Aplica eliminao de serrilhado avanada para melhorar a legibilidade do texto, que se encontra disponvel no Flash Player 8. A eliminao de serrilhado avanada permite que os tipos de fontes sejam renderizados com alta qualidade e em tamanhos menores. Apresenta melhor utilizao com aplicativos que tm muito texto de tamanho pequeno.
DICA

A Macromedia no recomenda a eliminao de serrilhado avanada para fontes com mais de 48 pontos.

Para usar o ActionScript com o intuito de definir texto sem serrilhado, veja o exemplo a seguir.
Para usar eliminao de serrilhado avanada:
1. 2.

Crie um novo documento do Flash e salve-o como antialiastype.fla. Crie dois clipes de filme no Stage (Palco) e atribua a eles os nomes de instncias normal_mc e avanado_mc.

Sobre a renderizao de fontes e texto sem serrilhado

433

Use esses clipes de filme para alternar entre os dois tipos de eliminao de serrilhado: normal e avanada.
3.

Abra o painel Library (Biblioteca) e selecione New Font (Nova fonte) no menu pop-up no canto superior direito do painel Library. A caixa de dilogo Font Symbol Properties (Propriedades do smbolo de fonte) aberta e permite selecionar uma fonte para ser incorporada no arquivo SWF (incluindo um estilo e um tamanho de fonte). Voc tambm poder atribuir um nome de fonte exibido na biblioteca do documento e no menu suspenso Font (Fonte) no inspetor Properties (Propriedades), se houver um campo de texto selecionado no Stage (Palco).
a. b. c. d. e.

Selecione a fonte Arial no menu suspenso Font. Certifique-se de que as opes Bold (Negrito) e Italic (Itlico) no esto selecionadas. Defina o tamanho como 10 pixels. Insira o nome de fonte Arial-10 (embedded). Clique em OK.

4.

Na biblioteca, clique com o boto direito do mouse no smbolo de fonte e selecione Linkage (Vinculao) no menu de contexto. A caixa de dilogo Linkage Properties exibida. Selecione as opes Export for ActionScript (Exportar para ActionScript) e Export in First Frame (Exportar no primeiro quadro), digite o identificador de vinculao Arial-10 e clique em OK. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var text_fmt:TextFormat = new TextFormat(); text_fmt.font = "Arial-10"; text_fmt.size = 10; this.createTextField("my_txt", 10, 20, 20, 320, 240); my_txt.autoSize = "left"; my_txt.embedFonts = true; my_txt.selectable = false; my_txt.setNewTextFormat(text_fmt); my_txt.multiline = true; my_txt.wordWrap = true; var lorem_lv:LoadVars = new LoadVars(); lorem_lv.onData = function(src:String) { if (src != undefined) { my_txt.text = src; } else { my_txt.text = "unable to load text file."; }

5.

6.

434

Trabalhando com texto e seqncias de caracteres

}; lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt"); normal_mc.onRelease = function() { my_txt.antiAliasType = "normal"; }; advanced_mc.onRelease = function() { my_txt.antiAliasType = "advanced"; };

O cdigo anterior dividido em quatro reas-chave. O primeiro bloco de cdigo cria um novo objeto TextFormat, que especifica uma fonte e um tamanho de fonte a serem usados em um campo de texto que ser criado em breve. A fonte especificada, Arial-10, o identificador de vinculao do smbolo de fonte incorporado em uma etapa anterior. O segundo bloco de cdigo cria um novo campo de texto com o nome de instncia my_txt. A fim de que a fonte seja incorporada de forma adequada, defina embedFonts como true para a instncia de campo de texto. O cdigo tambm define a formatao de texto do novo campo de texto do objeto TextFormat criado anteriormente. O terceiro bloco de cdigo define uma instncia LoadVars que preenche o campo de texto no Stage (Palco) com o contedo de um arquivo de texto externo. Depois que o documento est totalmente carregado (mas no analisado), o contedo inteiro do arquivo copiado para a propriedade my_txt.text, a fim de ser exibido no Stage. O quarto e ltimo bloco de cdigo define manipuladores de eventos onRelease para os clipes de filme normal_mc e avanado_mc. Quando o usurio clica e libera uma dessas opes, o tipo de eliminao de serrilhado do campo de texto no Stage muda.
7. 8.

Salve as alteraes no arquivo FLA. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. Clique no clipe de filme avanado_mc no Stage. Quando voc clica no clipe de filme, o tipo de eliminao de serrilhado alterna de normal (padro) para avanado. Quando se trata de campos de texto com um tamanho de fonte menor, a definio da eliminao de serrilhado como avanada pode melhorar consideravelmente a legibilidade do texto.
DICA

9.

A eliminao de serrilhado avanada permite que os tipos de fontes sejam renderizados com alta qualidade e em tamanhos menores. Sua utilizao melhor com aplicativos que tm muito texto de tamanho pequeno. A Macromedia no recomenda a eliminao de serrilhado avanada para fontes com mais de 48 pontos.

Sobre a renderizao de fontes e texto sem serrilhado

435

Para obter mais informaes sobre a formatao de texto sem serrilhado, consulte Usando um tipo de ajuste grade na pgina 442 e Sobre a formatao de texto sem serrilhado na pgina 440. Um arquivo de exemplo no seu disco rgido mostra como aplicar e manipular texto sem serrilhado em um aplicativo. Use a tecnologia de renderizao do FlashType para criar um pequeno texto que seja extremamente legvel. Esse exemplo tambm demonstra como os campos de texto podem ser rolados de forma rpida e suave com a utilizao da propriedade cacheAsBitmap. O arquivo de origem de exemplo, flashtype.fla, encontra-se na pasta Samples do disco rgido. No Windows, navegue at a unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\FlashType. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/FlashType.

Definindo tabelas para fontes


Se voc criar fontes para usar com arquivos SWF ou para distribuio a desenvolvedores de Flash, talvez seja necessrio definir tabelas para fontes, a fim de controlar como elas so renderizadas no Stage (Palco). A eliminao de serrilhado avanada usa ADFs (Adaptively Sampled Distance Field, Campos de distncia de exemplo de forma adaptvel) para representar os contornos que determinam um glifo (um caractere). O Flash utiliza dois valores:

Um valor de limite externo, abaixo do qual as densidades so definidas como 0. Um valor de limite interno, acima do qual as densidades so definidas com um valor de densidade mxima, como 255.

Entre esses dois valores-limite, a funo de mapeamento uma curva linear variando de 0 no limite externo at a densidade mxima no limite interno. O ajuste dos valores-limite externo e interno afeta a espessura do trao e a definio da borda. O espaamento entre esses dois parmetros comparvel ao dobro do raio do filtro dos mtodos clssicos de eliminao de serrilhado; um espaamento menor proporciona uma borda mais ntida, enquanto que um espaamento maior fornece uma borda mais suave e filtrada. Quando o espaamento igual a 0, a imagem da densidade resultante um bitmap de dois nveis. Quando o espaamento muito largo, a imagem da densidade resultante tem uma borda semelhante a uma aquarela. Geralmente, os usurios preferem bordas bem definidas e com grande contraste em tamanhos de pontos pequenos e bordas mais suaves para texto animado e pontos de tamanho maior.

436

Trabalhando com texto e seqncias de caracteres

O limite externo geralmente tem um valor negativo, o limite interno tem um valor positivo, e seu ponto mdio fica prximo ao 0. O ajuste desses parmetros para deslocar o ponto mdio para o infinito negativo aumenta a espessura do trao; o deslocamento do ponto mdio para o infinito positivo diminui a espessura do trao.
N OT A

O limite externo deve ser sempre inferior ou igual ao limite interno.

O Flash Player inclui configuraes avanadas de eliminao de serrilhado para dez fontes bsicas. Para essas fontes, so fornecidas configuraes avanadas de eliminao de serrilhado apenas para os tamanhos de fonte de 6 a 20. Nessas fontes, os tamanhos abaixo de 6 utilizam as configuraes do tamanho 6, e os tamanhos acima de 20 utilizam as configuraes do 20. As demais fontes so mapeadas para os dados das fontes fornecidas. O mtodo setAdvancedAntialiasingTable() permite definir dados de eliminao de serrilhado personalizada para outras fontes e tamanhos de fontes ou substituir as configuraes padro para as fontes fornecidas. Para obter mais informaes sobre a criao de uma tabela de eliminao de serrilhado, veja o seguinte exemplo:
Para criar uma tabela de eliminao de serrilhado avanada para uma fonte incorporada:
1. 2. 3.

Crie um novo documento do Flash e salve-o como advancedaatable.fla. Selecione New Font (Nova fonte) no menu pop-up do painel Library (Biblioteca). Selecione Arial no menu pop-up Font (Fonte) e depois defina o tamanho da fonte com 32 pontos. Selecione as opes Bold (Negrito) e Italics (Itlico). Digite o nome da fonte Arial (embedded) na caixa de texto Name (Nome) e clique em OK. Clique com o boto direito do mouse (Windows) ou, pressionando Control, clique (Macintosh) no smbolo de fonte na biblioteca e selecione Linkage (Vinculao). Na caixa de dilogo Linkage Properties (Propriedades de vinculao):
a. b.

4. 5. 6.

7.

Digite Arial-embedded na caixa de texto Identifier (Identificador). Selecione Export for ActionScript (Exportar para ActionScript) e Export in First Frame (Exportar no primeiro quadro). Clique em OK.

c. 8.

Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal e adicione o seguinte ActionScript ao painel Actions (Aes):
import flash.text.TextRenderer; var arialTable:Array = new Array();

Sobre a renderizao de fontes e texto sem serrilhado

437

arialTable.push({fontSize:16.0, insideCutoff:0.516, outsideCutoff:0.416}); arialTable.push({fontSize:32.0, insideCutoff:2.8, outsideCutoff:-2.8}); TextRenderer.setAdvancedAntialiasingTable("Arial", "bolditalic", "dark", arialTable); var my_fmt:TextFormat = new TextFormat(); my_fmt.align = "justify"; my_fmt.font = "Arial-embedded"; my_fmt.size = 32; this.createTextField("my_txt", 999, 10, 10, Stage.width-20, Stage.height-20); my_txt.antiAliasType = "advanced"; my_txt.embedFonts = true; my_txt.multiline = true; my_txt.setNewTextFormat(my_fmt); my_txt.sharpness = 0; my_txt.thickness = 0; my_txt.wordWrap = true; var lorem_lv:LoadVars = new LoadVars(); lorem_lv.onData = function(src:String):Void { if (src != undefined) { my_txt.text = src + "\n\n" + src; } else { trace("error downloading text file"); } }; lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt");

O cdigo anterior dividido em quatro sees. A primeira seo de cdigo importa a classe TextRenderer e define uma nova tabela de eliminao de serrilhado para dois tamanhos diferentes da fonte Arial. A segunda seo de cdigo define um novo objeto TextFormat, utilizado para aplicar formatao de texto ao campo de texto (criado na prxima seo de cdigo). A prxima seo de cdigo cria um novo campo de texto com um nome de instncia my_txt, ativa a eliminao de serrilhado avanada, aplica o objeto de formato de texto (criado anteriormente) e ativa os recursos de quebra automtica de texto e vrias linhas. O ltimo bloco de cdigo define um objeto LoadVars utilizado para carregar texto de um arquivo de texto externo e preencher o campo de texto no Stage (Palco).
9.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.

438

Trabalhando com texto e seqncias de caracteres

Depois que o texto carregado do servidor remoto, o Flash exibe algum texto no campo de texto, e possvel ver as propriedades da tabela de eliminao de serrilhada avanada aplicadas ao campo de texto. A fonte incorporada no Stage deve aparecer como se tivesse um leve efeito de embaamento, por causa dos atuais valores insideCutoff e outsideCutoff.

Sobre o layout e a formatao de texto


Voc pode controlar o layout e a formatao do texto com o ActionScript. A classe TextFormat fornece um grande controle sobre o modo como o texto aparece durante a execuo, alm de outras formas de formatao como folhas de estilos (consulte Formatando texto com estilos CSS na pgina 447) e texto HTML (consulte Usando texto em formato HTML na pgina 461). Tambm possvel controlar o modo como os caracteres se ajustam grade, usando o ActionScript ao utilizar texto sem serrilhado em um arquivo SWF. Isso ajuda a controlar a aparncia dos caracteres durante a execuo. Para obter um exemplo de como usar um tipo de ajuste grade nos aplicativos, consulte Usando um tipo de ajuste grade na pgina 442. Para obter informaes gerais sobre campos de texto, consulte Sobre campos de texto na pgina 405. Para obter informaes sobre formatao de texto, consulte Sobre a formatao de texto sem serrilhado na pgina 440. Para obter mais informaes sobre a classe TextFormat, consulte Usando a classe TextFormat na pgina 444 e %{TextFormat}% em ActionScript 2.0 Language Reference. Para obter mais informaes sobre layout e formatao de texto usando a classe TextFormat, consulte as seguintes sees:

Sobre a formatao de texto sem serrilhado na pgina 440 Usando um tipo de ajuste grade na pgina 442 Usando a classe TextFormat na pgina 444 Propriedades padro dos novos campos de texto na pgina 446

Sobre o layout e a formatao de texto

439

Sobre a formatao de texto sem serrilhado


O Flash 8 introduz duas novas propriedades que podem ser usadas ao formatar campos de texto com a eliminao de serrilhado avanada: sharpness (definio) e thickness (espessura). A definio refere-se quantidade de serrilhado aplicado instncia do campo de texto. Uma definio com valor alto faz com que a borda da fonte incorporada parea dentada e ntida. Uma definio com um valor mais baixo faz com que a fonte parea mais suave, mais embaada. A definio da espessura de uma fonte semelhante ativao da formatao de negrito para um campo de texto. Quanto maior a espessura, mais forte aparecer o negrito da fonte. O exemplo a seguir carrega um arquivo de texto de forma dinmica e exibe texto no Stage (Palco). Ao mover o ponteiro do mouse ao longo do eixo x, a definio estabelecida entre 400 e 400. Ao mover o ponteiro do mouse ao longo do eixo y, a espessura definida entre 200 e 200.
Para modificar a definio e a espessura de um campo de texto:
1. 2.

Crie um novo documento do Flash e salve-o como sharpness.fla. Selecione New Font (Nova fonte) no menu pop-up no canto superior direito do painel Library (Biblioteca). Selecione Arial no menu suspenso Font (Fonte) e depois defina o tamanho da fonte com 24 pontos. Digite o nome da fonte Arial-24 (embedded) na caixa de texto Name (Nome) e clique em OK. Clique com o boto direito do mouse no smbolo de fonte na biblioteca e selecione Linkage (Vinculao) para abrir a caixa de dilogo Linkage Properties (Propriedades de vinculao). Defina o identificador de vinculao com Arial-24, marque as caixas de seleo Export for ActionScript (Exportar para ActionScript) e Export in First Frame (Exportar no primeiro quadro) e clique em OK. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var my_fmt:TextFormat = new TextFormat(); my_fmt.size = 24; my_fmt.font = "Arial-24"; this.createTextField("lorem_txt", 10, 0, 20, Stage.width, (Stage.height - 20)); lorem_txt.setNewTextFormat(my_fmt); lorem_txt.text = "loading..."; lorem_txt.wordWrap = true; lorem_txt.autoSize = "left";

3.

4.

5.

6.

7.

440

Trabalhando com texto e seqncias de caracteres

lorem_txt.embedFonts = true; lorem_txt.antiAliasType = "advanced"; this.createTextField("debug_txt", 100, 0, 0, Stage.width, 20); debug_txt.autoSize = "left"; debug_txt.background = 0xFFFFFF; var lorem_lv:LoadVars = new LoadVars(); lorem_lv.onData = function(src:String) { lorem_txt.text = src; } lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt"); var mouseListener:Object = new Object(); mouseListener.onMouseMove = function():Void { lorem_txt.sharpness = (_xmouse * (800 / Stage.width)) - 400; lorem_txt.thickness = (_ymouse * (400 / Stage.height)) - 200; debug_txt.text = "sharpness=" + Math.round(lorem_txt.sharpness) + ", thickness=" + Math.round(lorem_txt.thickness); }; Mouse.addListener(mouseListener);

Esse cdigo do ActionScript pode ser dividido em cinco sees bsicas. A primeira seo de cdigo define uma nova instncia TextFormat que ser aplicada a um campo de texto criado de forma dinmica. As duas sees a seguir criam dois novos campos de texto no Stage (Palco). O primeiro campo de texto, lorem_txt, aplica o objeto de formatao 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 definio e espessura do campo de texto lorem_txt. A quarta seo de cdigo cria um objeto LoadVars, responsvel pelo carregamento do arquivo de texto externo e preenchimento do campo de texto lorem_txt. A quinta e ltima seo de cdigo define um ouvinte de mouse, chamado sempre que o ponteiro do mouse se movimenta pelo Stage. Os valores atuais de definio e espessura so calculados com base na posio atual do ponteiro do mouse no Stage. As propriedades definio e espessura so definidas para o campo de texto lorem_txt, e os valores atuais so 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 definio do campo de texto. Mova o ponteiro do mouse da esquerda para a direita, a fim de que a definio aumente e parea mais dentada. Mova o ponteiro do mouse ao longo do eixo y, a fim de que a espessura do campo de texto seja alterada.

Sobre o layout e a formatao de texto

441

Para obter mais informaes sobre o uso de texto sem serrilhado em um arquivo SWF, consulte Definindo a opo sem serrilhado com o ActionScript na pgina 433, Opes de renderizao de fontes do Flash na pgina 432 e Usando um tipo de ajuste grade na pgina 442. Um arquivo de exemplo no seu disco rgido mostra como aplicar e manipular texto sem serrilhado em um aplicativo. Use a tecnologia de renderizao do FlashType para criar um pequeno texto que seja extremamente legvel. Esse exemplo tambm demonstra como os campos de texto podem ser rolados de forma rpida e suave com a utilizao da propriedade cacheAsBitmap. O arquivo de origem de exemplo, flashtype.fla, encontra-se na pasta Samples do disco rgido. No Windows, navegue at a unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\FlashType. No Macintosh, navegue at HD do Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/FlashType.

Usando um tipo de ajuste grade


Quando voc utiliza eliminao de serrilhado avanada em um campo de texto, h trs tipos de ajuste grade disponveis: No especifica nenhum ajuste grade. As linhas horizontais e verticais dos glifos no so foradas na grade de pixels. Essa configurao geralmente boa para animao e fontes de tamanhos grandes.
none (nenhum) pixel Especifica que as linhas horizontais e verticais fortes so ajustadas grade de pixels. Essa configurao s funciona para campos de texto alinhados esquerda. Geralmente, oferece a melhor legibilidade para textos alinhados esquerda. subpixel

Especifica que as linhas horizontais e verticais fortes so ajustadas grade de subpixels em um monitor LCD. A configurao de subpixel geralmente boa para textos dinmicos alinhados direita e alinhados ao centro, e s vezes um equilbrio til entre qualidade de texto versus animao. O exemplo a seguir mostra como definir um tipo de ajuste grade em um campo de texto usando o ActionScript.

Para definir um tipo de ajuste grade em um campo de texto:


1. 2.

Crie um novo documento do Flash e salve-o como gridfittype.fla. Selecione New Font (Nova fonte) no menu pop-up no canto superior direito do painel Library (Biblioteca).

442

Trabalhando com texto e seqncias de caracteres

3.

Selecione a fonte Arial no menu suspenso Font (Fonte) e depois defina o tamanho da fonte com 10 pontos. Digite o nome da fonte Arial-10 (embedded) na caixa de texto Name (Nome) e clique em OK. Clique com o boto direito do mouse no smbolo de fonte na biblioteca e selecione Linkage (Vinculao) para abrir a caixa de dilogo Linkage Properties (Propriedades de vinculao). Defina o identificador de vinculao com Arial-10 e marque as caixas de seleo Export for ActionScript (Exportar para ActionScript) e Export in First Frame (Exportar no primeiro quadro). Clique em OK. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var my_fmt:TextFormat = new TextFormat(); my_fmt.size = 10; my_fmt.font = "Arial-10"; var h:Number = Math.floor(Stage.height / 3); this.createTextField("none_txt", 10, 0, 0, Stage.width, h); none_txt.antiAliasType = "advanced"; none_txt.embedFonts = true; none_txt.gridFitType = "none"; none_txt.multiline = true; none_txt.setNewTextFormat(my_fmt); none_txt.text = "loading..."; none_txt.wordWrap = true; this.createTextField("pixel_txt", 20, 0, h, Stage.width, h); pixel_txt.antiAliasType = "advanced"; pixel_txt.embedFonts = true; pixel_txt.gridFitType = "pixel"; pixel_txt.multiline = true; pixel_txt.selectable = false; pixel_txt.setNewTextFormat(my_fmt); pixel_txt.text = "loading..."; pixel_txt.wordWrap = true; this.createTextField("subpixel_txt", 30, 0, h*2, Stage.width, h); subpixel_txt.antiAliasType = "advanced"; subpixel_txt.embedFonts = true; subpixel_txt.gridFitType = "subpixel"; subpixel_txt.multiline = true; subpixel_txt.setNewTextFormat(my_fmt); subpixel_txt.text = "loading..."; subpixel_txt.wordWrap = true;

4.

5.

6.

7. 8.

Sobre o layout e a formatao de texto

443

var lorem_lv:LoadVars = new LoadVars(); lorem_lv.onData = function(src:String):Void { if (src != undefined) { none_txt.text = "[antiAliasType=none]\n" + src; pixel_txt.text = "[antiAliasType=pixel]\n" + src; subpixel_txt.text = "[antiAliasType=subpixel]\n" + src; } else { trace("unable to load text file"); } }; lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt");

O ActionScript anterior pode ser dividido em cinco sees. A primeira seo define um novo objeto de formato de texto que especifica duas propriedades: tamanho e fonte. A propriedade font (fonte) refere-se ao identificador de vinculao do smbolo de fonte que est atualmente na biblioteca de documentos. A segunda, terceira e quarta sees de cdigo criam um novo campo de texto dinmico no Stage (Palco) e definem algumas propriedades comuns: antiAliasType (que deve ser definido com advanced [avanado]), embedFonts (definido com true [verdadeiro]), multiline e wordWrap. Cada seo tambm aplica o objeto de formato de texto criado em um seo anterior e define o tipo de ajuste grade com normal, pixel ou subpixel. A quinta e ltima seo cria uma instncia LoadVars, que carrega o contedo de um arquivo de texto externo para cada um dos campos de texto criados com cdigo.
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.... Aps 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

A tecnologia de renderizao do FlashType utiliza o ajuste grade apenas na rotao 0.

Usando a classe TextFormat


Voc pode usar a classe TextFormat para definir as propriedades de formatao de um campo de texto. A classe TextFormat incorpora as informaes de formatao de caractere e pargrafo. As informaes de formatao de caracteres descrevem a aparncia de caracteres individuais: nome da fonte, tamanho do ponto, cor e URL associado. As informaes de formatao de pargrafos descrevem a aparncia de um pargrafo: margem esquerda, margem direita, recuo da primeira linha e alinhamento esquerda, direita ou centralizado.

444

Trabalhando com texto e seqncias de caracteres

Para usar a classe TextFormat, crie primeiro um objeto TextFormat e defina seus estilos de formatao de caractere e pargrafo. Aplique o objeto TextFormat a um campo de texto usando o mtodo TextField.setTextFormat() ou TextField.setNewTextFormat(). O mtodo setTextFormat() altera o formato de texto aplicado a caracteres individuais, a grupos de caracteres ou a todo o corpo de texto em um campo de texto. No entanto, um texto inserido posteriormente, por um usurio ou com o ActionScript, no assume a formatao especificada por uma chamada de setTextFormat(). Para especificar a formatao padro do texto inserido posteriormente, use TextField.setNewTextFormat(). Para obter mais informaes, consulte %{setTextFormat (TextField.setTextFormat method)}% and %{setNewTextFormat (TextField.setNewTextFormat method)}% em ActionScript 2.0 Language Reference.
Para formatar um campo de texto com a classe TextFormat:
1.

Em um novo documento Flash, crie um campo de texto no Stage (Palco) usando a ferramenta Text. Digite algum texto no campo de texto no Stage (Palco), como Texto itlico, em negrito, de 24 pontos.

2.

No inspetor Properties, digite myText_txt na caixa de texto Instance Name (Nome da instncia), selecione Dynamic (Dinmico) no menu pop-up Text Type (Tipo de texto) e selecione Multiline (Vrias linhas) no menu pop-up Line Type (Tipo de linha). Selecione Frame 1 (Quadro 1) da Timeline (Linha de tempo) e abra o painel Actions (Aes) (Window [Janela] > Actions). Digite o cdigo a seguir no painel Actions para criar um objeto TextFormat e defina as propriedades bold e italic como true, e a propriedade size como 24:
// Crie um objeto TextFormat. var txt_fmt:TextFormat = new TextFormat(); // Especifique a formatao de pargrafo e caractere. txt_fmt.bold = true; txt_fmt.italic = true; txt_fmt.size = 24;

3.

4.

5.

Aplique o objeto TextFormat ao campo de texto criado na etapa 1, usando TextField.setTextFormat():


myText_txt.setTextFormat(txt_fmt);

Essa verso de setTextFormat() aplica a formatao especificada ao campo de texto inteiro. Duas outras verses desse mtodo permitem a aplicao de formatao a caracteres individuais ou grupos de caracteres. Por exemplo, o cdigo a seguir aplica a formatao negrito, itlico, tamanho 24 aos trs primeiros caracteres inseridos no campo de texto:
myText_txt.setTextFormat(0, 3, txt_fmt);

Sobre o layout e a formatao de texto

445

Para obter mais informaes, %{setTextFormat (TextField.setTextFormat method)}% em ActionScript 2.0 Language Reference.
6.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o aplicativo. Propriedades padro dos novos campos de texto na pgina 446 Formatando texto com estilos CSS na pgina 447

Para obter mais informaes sobre o uso da classe TextFormat, consulte os seguintes tpicos:

Propriedades padro dos novos campos de texto


Os campos de texto criados durante a execuo com createTextField() recebem um objeto TextFormat padro com as seguintes propriedades:
align = "left" blockIndent = 0 bold = false bullet = false color = 0x000000 font = "Times New Roman" (default font is Times on Mac OS X) indent = 0 italic = false kerning = false leading = 0 leftMargin = 0 letterSpacing = 0 rightMargin = 0 size = 12 tabStops = [] (empty array) target = "" underline = false url = ""
N OT A 446

A propriedade de fonte padro no Mac OS X Times.

Para obter uma lista completa dos mtodos TextFormat e de suas descries, consulte %{TextFormat}% em ActionScript 2.0 Language Reference.

Trabalhando com texto e seqncias de caracteres

Formatando texto com estilos CSS


Os estilos CSSs (Cascading Style Sheets, Folhas de estilos em cascata) permitem trabalhar com estilos de texto que podem ser aplicados a documentos HTML ou XML. Uma folha de estilos uma coleo de regras de formatao que especifica como formatar elementos HTML ou XML. Cada regra est associada a um nome de estilo, ou seletor, com uma ou mais propriedades de estilo e seus valores. Por exemplo, o estilo a seguir define um seletor chamado bodyText:
.bodyText { text-align: left }

Voc pode criar estilos que redefinam marcas de formatao HTML internas utilizadas pelo Flash Player (como <p> e <li>). Tambm possvel criar classes de estilo que podem ser aplicadas a elementos HTML especficos 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 verses posteriores. possvel 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 contm texto em formato HTML ou XML, use a propriedade TextField.styleSheet. Os estilos definidos na folha de estilos so mapeados automaticamente para as marcas definidas no documento HTML ou XML. O uso de folhas de estilos envolve as seguintes trs etapas bsicas:

Criar um objeto de folha de estilos a partir da classe TextField.StyleSheet (para obter mais informaes, 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 contm texto em formato HTML ou XML. Propriedades CSS suportadas na pgina 448 Criando um objeto de folha de estilos na pgina 449 Carregando arquivos CSS externos na pgina 450 Criando novos estilos com o ActionScript na pgina 451 Aplicando estilos a um objeto TextField na pgina 452

Para obter mais informaes, consulte os seguintes tpicos:


Formatando texto com estilos CSS

447

Aplicando uma folha de estilos a um componente TextArea na pgina 452 Combinando estilos na pgina 453 Usando classes de estilo na pgina 454 Atribuindo estilo a marcas HTML internas na pgina 454 Um exemplo do uso de estilos com HTML na pgina 455 Usando estilos para definir novas marcas na pgina 458 Um exemplo do uso de estilos com XML na pgina 458

Voc pode localizar um arquivo de origem de exemplo, formattedText.fla, na pasta Samples no disco rgido, que mostra como aplicar a formatao CSS ao texto carregado em um arquivo SWF durante a execuo. No Windows, navegue at a unidade de inicializao\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.

Propriedades CSS suportadas


O Flash Player suporta um subconjunto de propriedades na especificao CSS1 original (www.w3.org/TR/REC-CSS1). A tabela a seguir mostra as propriedades e valores CSS suportados, bem como os nomes de suas propriedades correspondentes no ActionScript. (O nome de cada propriedade do ActionScript derivado do nome da propriedade CSS correspondente; o hfen omitido e o caractere seguinte fica em letra maiscula.)
Propriedade CSS
text-align font-size

Propriedade do ActionScript
textAlign fontSize

Uso e valores suportados


Os valores reconhecidos so left, center, right e justify. Apenas a parte numrica do valor usada. As unidades (px, pt) no so analisadas; pixels e pontos so equivalentes. Os valores reconhecidos so none e underline. Apenas a parte numrica do valor usada. As unidades (px, pt) no so analisadas; pixels e pontos so equivalentes. Apenas a parte numrica do valor usada. As unidades (px, pt) no so analisadas; pixels e pontos so equivalentes.

text-decoration margin-left

textDecoration marginLeft

margin-right

marginRight

448

Trabalhando com texto e seqncias de caracteres

Propriedade CSS
font-weight kerning font-style letterSpacing

Propriedade do ActionScript
fontWeight kerning fontStyle letterSpacing

Uso e valores suportados


Os valores reconhecidos so normal e bold. Os valores reconhecidos so true e false. Os valores reconhecidos so normal e italic. Apenas a parte numrica do valor usada. As unidades (px, pt) no so analisadas; pixels e pontos so equivalentes. Apenas a parte numrica do valor usada. As unidades (px, pt) no so analisadas; pixels e pontos so equivalentes. Uma lista de fontes separadas por vrgulas para usar, em ordem decrescente de interesse. Qualquer nome de famlia de fonte pode ser usado. Se voc especificar um nome de fonte genrica, ela ser convertida em uma fonte de dispositivo apropriada. As seguintes converses de fonte esto disponveis: mono convertida em _typewriter, sans-serif, em _sans e serif, em _serif. Apenas valores de cores hexadecimais so suportados. Cores com nome atribudo (como blue) no so suportadas. As cores so escritas no seguinte formato: #FF0000.

text-indent

textIndent

font-family

fontFamily

color

color

Criando um objeto de folha de estilos


As folhas de estilos CSS so representadas no ActionScript pela classe TextField.StyleSheet. Essa classe s est disponvel para arquivos SWF que se destinam ao Flash Player 7 ou verses posteriores. Para criar um objeto de folha de estilos, chame a funo construtora da classe TextField.StyleSheet:
var newStyle:TextField.StyleSheet = new TextField.StyleSheet();

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 pgina 450 e Criando novos estilos com o ActionScript na pgina 451. Voc pode localizar um arquivo de origem de exemplo, formattedText.fla, na pasta Samples no disco rgido, que mostra como aplicar a formatao CSS ao texto carregado em um arquivo SWF durante a execuo.

Formatando texto com estilos CSS

449

No Windows, navegue at a unidade de inicializao\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.

Carregando arquivos CSS externos


Voc pode definir estilos em um arquivo CSS externo e carregar esse arquivo em um objeto de folha de estilos. Os estilos definidos no arquivo CSS so adicionados ao objeto de folha de estilos. Para carregar um arquivo CSS externo, use o mtodo load() da classe TextField.StyleSheet. Para determinar quando o arquivo CSS finalizou a carga, use o manipulador de eventos onLoad do objeto de folha de estilos. No exemplo a seguir, voc criar e carregar um arquivo CSS externo e usar o mtodo TextField.StyleSheet.getStyleNames() para recuperar os nomes dos estilos carregados.
Para carregar uma folha de estilos externa:
1. 2.

Crie um novo arquivo no editor de texto ou CSS de sua preferncia. Adicione as seguintes definies de estilo ao arquivo:
.bodyText { font-family: Arial,Helvetica,sans-serif; font-size: 12px; } .headline { font-family: Arial,Helvetica,sans-serif; font-size: 24px; }

3. 4. 5.

Salve o arquivo CSS como styles.css. No Flash, crie um novo arquivo FLA. Na Timeline (Linha do tempo), em Window (Janela) > Timeline, selecione Layer 1 (Camada 1). Abra o painel Actions (Aes) (Window > Actions). Adicione o seguinte cdigo ao painel Actions:
var styles:TextField.StyleSheet = new TextField.StyleSheet(); styles.onLoad = function(success:Boolean):Void { if (success) { // exiba nomes de estilos. trace(this.getStyleNames()); } else { trace("Error loading CSS file.");

6. 7.

450

Trabalhando com texto e seqncias de caracteres

} }; styles.load("styles.css");
NO T A

No trecho de cdigo anterior, this.getStyleNames() refere-se ao objeto styles criado na primeira linha do ActionScript.

8. 9.

Salve o arquivo FLA no mesmo diretrio que contm o arquivo styles.css. Teste o documento do Flash (Control [Controlar] > Test Movie [Testar filme]). Voc deve ver os nomes dos dois estilos exibidos no painel Output (Sada):
.bodyText,.headline

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 esto no mesmo diretrio e se digitou o nome do arquivo CSS corretamente. Como com todos os outros mtodos do ActionScript que carregam dados pela rede, o arquivo CSS deve ser estar no mesmo domnio que o arquivo SWF que est carregando o arquivo. (Consulte Acesso entre domnios e a subdomnios entre arquivos SWF na pgina 729.) Para obter mais informaes 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 rgido, que mostra como aplicar a formatao CSS ao texto carregado em um arquivo SWF durante a execuo. No Windows, navegue at a unidade de inicializao\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.

Criando novos estilos com o ActionScript


Voc pode criar novos estilos de texto com o ActionScript usando o mtodo setStyle() da classe TextField.StyleSheet. Este mtodo tem dois parmetros: o nome do estilo e um objeto que define as propriedades desse estilo. Por exemplo, o cdigo a seguir cria um objeto de folha de estilos chamado styles que define dois estilos idnticos aos j importados (consulte Carregando arquivos CSS externos na pgina 450):
var styles:TextField.StyleSheet = new TextField.StyleSheet(); styles.setStyle("bodyText", {fontFamily: 'Arial,Helvetica,sans-serif', fontSize: '12px'}

Formatando texto com estilos CSS

451

); styles.setStyle("headline", {fontFamily: 'Arial,Helvetica,sans-serif', fontSize: '24px'} );

Aplicando estilos a um objeto TextField


Para aplicar um objeto de folha de estilos a um objeto TextField, atribua esse objeto propriedade styleSheet do campo de texto.
textObj_txt.styleSheet = styles;
NO TA

No confunda a propriedade TextField.styleSheet com a classe TextField.StyleSheet. O uso de maisculas ou minsculas indica a diferena.

Quando voc atribui um objeto de folha de estilos a um objeto TextField, as seguintes alteraes ocorrem no comportamento normal do campo de texto: As propriedades text e htmlText do campo de texto, e qualquer varivel associada ao campo de texto, sempre contm o mesmo valor e comportam-se de maneira idntica. O campo de texto torna-se somente leitura e no pode ser editado pelo usurio. Os mtodos setTextFormat() e replaceSel() da classe TextField no funcionam mais com o campo de texto. A nica maneira de alterar o campo alterando as propriedades text ou htmlText do campo de texto, ou alterando a varivel associada ao campo de texto. Qualquer texto atribudo s propriedades text e htmlText do campo de texto ou varivel associada armazenado literalmente; tudo que for escrito em uma dessas propriedades pode ser recuperado na forma original do texto.

Aplicando uma folha de estilos a um componente TextArea


Para aplicar uma folha de estilos a um componente TextArea, crie um objeto de folha de estilos e atribua a ele estilos HTML usando a classe TextField.StyleSheet. Em seguida, atribua a folha de estilos propriedade styleSheet do componente TextArea. Os exemplos a seguir criam um objeto de folha de estilos, styles, e atribuem a ele a instncia do componente myTextArea.
Usando uma folha de estilos com um componente TextArea
1.

Crie um novo documento do Flash e salve-o como textareastyle.fla.

452

Trabalhando com texto e seqncias de caracteres

2.

Arraste um componente TextArea da pasta User Interface do painel Components (Componentes) para o Stage (Palco) e atribua a ele o nome de instncia myTextArea. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
// Create a new style sheet object and set styles for it. var styles:TextField.StyleSheet = new TextField.StyleSheet(); styles.setStyle("html", {fontFamily:'Arial,Helvetica,sans-serif', fontSize:'12px', color:'#0000FF'}); styles.setStyle("body", {color:'#00CCFF', textDecoration:'underline'}); styles.setStyle("h1",{fontFamily:'Arial,Helvetica,sans-serif', fontSize:'24px', color:'#006600'}); /* Assign the style sheet object to myTextArea component. Set html property to true, set styleSheet property to the style sheet object. */ myTextArea.styleSheet = styles; myTextArea.html = true; var myVars:LoadVars = new LoadVars(); // Define onData handler and load text to be displayed. myVars.onData = function(myStr:String):Void { if (myStr != undefined) { myTextArea.text = myStr; } else { trace("Unable to load text file."); } }; myVars.load("http://www.helpexamples.com/flash/myText.htm");

3.

O bloco de cdigo anterior cria uma nova instncia TextField.StyleSheet, que define trs estilos para as marcas HTML html, body e h1. A seguir, o objeto de folha de estilos aplicado ao componente TextArea, e a formatao 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 so aditivos; ou seja, quando os estilos so aninhados, cada nvel de aninhamento pode contribuir com informaes de estilo, que so acrescentadas juntas para resultar na formatao final.

Formatando texto com estilos CSS

453

O exemplo a seguir mostra alguns dados XML atribudos a um campo de texto:


<sectionHeading>This is a section</sectionHeading> <mainBody>This is some main body text, with one <emphasized>emphatic</emphasized> word.</mainBody>

Na palavra enfatizada no texto anterior, o estilo emphasized aninhado no estilo mainBody. O estilo mainBody contribui com regras de cor, tamanho de fonte e formatao. O estilo emphasized adiciona uma regra de espessura de fonte a essas regras. A palavra enfatizada ser formatada usando uma combinao das regras especificadas por mainBody e emphasized.

Usando classes de estilo


Voc pode criar classes de estilo (diferentes das classes do ActionScript 2.0) que podem ser aplicadas a uma marca <p> ou <span> usando o atributo class da marca. Quando aplicado a uma marca <p>, o estilo aplicado no pargrafo inteiro. Voc tambm pode usar a marca <span> para atribuir um estilo a um intervalo de texto que use uma classe de estilo. 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, possvel 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>

Atribuindo estilo a marcas HTML internas


O Flash Player oferece suporte a um subconjunto de marcas HTML. Para obter mais informaes, consulte Usando texto em formato HTML na pgina 461. Voc pode atribuir um estilo CSS a cada instncia de uma marca HTML interna que aparece em um campo de texto. Por exemplo, o cdigo a seguir define um estilo para a marca HTML <p> interna. Todas as instncias dessa marca recebero um estilo da maneira especificada pela regra de estilo.
p { font-family: Arial,Helvetica,sans-serif; font-size: 12px; display: inline; }

454

Trabalhando com texto e seqncias de caracteres

A tabela a seguir mostra as marcas HTML internas que podem receber um estilo e como cada estilo aplicado:
Nome do estilo
p body

Como o estilo se aplica


Afeta todas as marcas <p>. Afeta todas as marcas <body>. O estilo p , se especificado, tem precedncia sobre o estilobody. Afeta todas as marcas de bullet <li>. Afeta todas as marcas de ncora <a>. Afeta todas as marcas de ncora <a>. Este estilo aplicado aps qualquer estilo a. Aplicado a uma marca de ncora <a> quando o ponteiro do mouse est posicionado sobre o link. Este estilo aplicado aps qualquer estilo a e a:link. Quando o ponteiro do mouse sai do link, o estilo a:hover removido do link. Aplicado a uma marca de ncora <a> quando o usurio clica no link. Este estilo aplicado aps qualquer estilo a e a:link. Depois que o boto do mouse liberado, o estilo a:active removido do link.

li a a:link

a:hover

a:active

Um exemplo do uso de estilos com HTML


Esta seo apresenta um exemplo de uso de estilos com marcas HTML. Voc pode criar uma folha de estilos que atribui um estilo a algumas marcas internas e define algumas classes de estilo. Em seguida, poder aplicar essa folha de estilos a um objeto TextField que contm texto em formato HTML.
Para formatar um texto HTML com uma folha de estilo:
1. 2.

Crie um novo arquivo no editor de texto ou CSS de sua preferncia. Adicione a seguinte definio de folha de estilos ao arquivo:
p { color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 12px; display: inline; } a:link { color: #FF0000; }

Formatando texto com estilos CSS

455

a:hover{ text-decoration: underline; } .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 sero aplicadas a todas as instncias dessas marcas. Ela tambm define duas classes de estilos (.headline e .byline) que sero aplicadas a pargrafos especficos e intervalos de texto.
3. 4.

Salve o arquivo como html_styles.css. Crie um novo arquivo de texto em um editor de texto ou HTML e salve o documento como myText.htm. Adicione o cdigo 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

Se voc copiar e colar essa seqncia de caracteres de texto, remova todas as quebras de linha que possam ter sido adicionadas seqncia de caracteres de texto.

5. 6. 7.

Crie o novo documento do Flash na ferramenta de criao do Flash. Selecione o primeiro quadro na Layer 1 da Timeline (Window [Janela] > Timeline). Abra o painel Actions (Aes) (Window > Actions) e adicione o seguinte cdigo a ele:
this.createTextField("news_txt", 99, 50, 50, 450, 300); news_txt.border = true; news_txt.html = true; news_txt.multiline = true; news_txt.wordWrap = true;

456

Trabalhando com texto e seqncias de caracteres

// Create a new style sheet and LoadVars object. var myVars_lv:LoadVars = new LoadVars(); var styles:TextField.StyleSheet = new TextField.StyleSheet(); // Location of CSS and text files to load. var txt_url:String = "myText.htm"; var css_url:String = "html_styles.css"; // Define onData handler and load text to display. myVars_lv.onData = function(src:String):Void { if (src != undefined) { news_txt.htmlText = src; } else { trace("Unable to load HTML file"); } }; myVars_lv.load(txt_url); // Define onLoad handler and Load CSS file. styles.onLoad = function(success:Boolean):Void { if (success) { /* Se a folha de estilos tiver sido carregada sem erros, atribua-a ao objeto de texto e atribua o texto HTML ao campo de texto. */ news_txt.styleSheet = styles; news_txt.text = storyText; } else { trace("Unable to load CSS file."); } }; styles.load(css_url);
N OT A

Nesse ActionScript, voc est carregando o texto de um arquivo externo. Para obter informaes sobre como carregar dados externos, consulte o Captulo 15, Trabalhando com imagens, som e vdeo.

8.

Salve o arquivo como news_html.fla no mesmo diretrio que contm o arquivo CSS criado na etapa 3. Selecione Control (Controlar) > Test Movie (Testar filme) para ver os estilos aplicados ao texto HTML automaticamente.

9.

Formatando texto com estilos CSS

457

Usando estilos para definir novas marcas


Se voc definir um novo estilo em uma folha de estilos, esse estilo poder ser usado como marca, da mesma maneira que voc usaria uma marca HTML interna. Por exemplo, se uma folha de estilos definir um estilo CSS chamado sectionHeading, voc poder usar <sectionHeading> como elemento em qualquer campo de texto associado folha de estilos. Esse recurso permite atribuir qualquer texto em formato XML diretamente ao campo de texto, de maneira que o texto seja formatado automaticamente usando as regras da folha de estilos. Por exemplo, a folha de estilos a seguir cria os novos estilos sectionHeading, mainBody e emphasized.
.sectionHeading { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 18px; display: block } .mainBody { color: #000099; text-decoration: underline; font-size: 12px; display: block } .emphasized { font-weight: bold; display: inline }

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>

Um exemplo do uso de estilos com XML


Nesta seo, voc criar um arquivo FLA com texto em formato XML. Voc criar uma folha de estilos usando o ActionScript, em vez de importando estilos de um arquivo CSS como mostrado em Um exemplo do uso de estilos com HTML na pgina 455
Para formatar XML com uma folha de estilo:
1.

No Flash, crie um documento FLA.

458

Trabalhando com texto e seqncias de caracteres

2.

Usando a ferramenta Text (Texto), crie um campo de texto de aproximadamente 400 pixels de largura por 300 pixels de altura. Abra o inspetor Properties (Propriedades) (Window [Janela] > Properties > Properties) e selecione o campo de texto. No inspetor Properties, selecione Dynamic Text no menu Text Type, selecione Multiline no menu Line Type, selecione a opo Render Text as HTML e digite news_txt na caixa de texto Instance Name. Na Layer 1 da Timeline (Window > Timeline), selecione o primeiro quadro. Para criar o objeto de folha de estilos, abra o painel Actions (Window > Actions) e adicione o seguinte cdigo:
var styles:TextField.StyleSheet = new TextField.StyleSheet(); styles.setStyle("mainBody", { color:'#000000', fontFamily:'Arial,Helvetica,sans-serif', fontSize:'12', display:'block' }); styles.setStyle("title", { color:'#000000', fontFamily:'Arial,Helvetica,sans-serif', fontSize:'18', display:'block', fontWeight:'bold' }); styles.setStyle("byline", { color:'#666600', fontWeight:'bold', fontStyle:'italic', display:'inline' }); styles.setStyle("a:link", { color:'#FF0000' }); styles.setStyle("a:hover", { textDecoration:'underline' });

3.

4.

5. 6.

Esse cdigo cria um novo objeto de folha de estilos chamado styles que define estilos usando o mtodo setStyle(). Os estilos correspondem exatamente aos criados em um arquivo CSS externo, anteriormente neste captulo.

Formatando texto com estilos CSS

459

7.

Para criar o texto XML a ser atribudo ao campo de texto, abra um editor de texto e digite o seguinte texto em um novo documento:
<story><title>Flash now has FlashType</title><mainBody><byline>San Francisco, CA</byline>--Macromedia Inc. announced today a new version of Flash that features the new FlashType rendering technology. For more information, visit the <a href="http:// www.macromedia.com">Macromedia Flash website</a></mainBody></story>
NO TA

Se voc copiar e colar essa seqncia de caracteres de texto, remova todas as quebras de linha que possam ter sido adicionadas seqncia de caracteres de texto. Selecione Hidden Characters (Caracteres ocultos) no menu pop-up do painel Actions para ver e remover quaisquer quebras de linha extras.

8. 9.

Salve o arquivo de texto como story.xml. No Flash, adicione o cdigo a seguir no painel Actions, de acordo com o cdigo da etapa 6. Esse cdigo carrega o documento story.xml, atribui o objeto de folha de estilos propriedade styleSheet do campo de texto e atribui o texto XML ao campo de texto:
var my_xml:XML = new XML(); my_xml.ignoreWhite = true; my_xml.onLoad = function(success:Boolean):Void { if (success) { news_txt.styleSheet = styles; news_txt.text = my_xml; } else { trace("Error loading XML."); } }; my_xml.load("story.xml");
N OT A

Voc est carregando dados XML de um arquivo externo nesse ActionScript. Para obter informaes sobre como carregar dados externos, consulte o Captulo 15, Trabalhando com imagens, som e vdeo..

10. Salve 11.

o arquivo como news_xml.fla na mesma pasta que story.xml.

Execute o arquivo SWF (Control [Controlar] > Test Movie [Testar filme]) para ver os estilos aplicados automaticamente ao texto no campo de texto.

460

Trabalhando com texto e seqncias de caracteres

Usando texto em formato HTML


O Flash Player oferece suporte a um subconjunto de marcas HTML padro, como <p> e <li>, que voc pode usar para atribuir um estilo a um texto em qualquer campo de texto dinmico ou de entrada. No Flash Player 7 e verses posteriores, os campos de texto tambm oferecem suporte marca <img>, o que permite incorporar arquivos de imagem (JPEG, GIF, PNG), arquivos SWF e clipes de filme nesses campos. O Flash Player envolver automaticamente o texto em torno das imagens incorporadas nos campos de texto, de maneira muito parecida com um navegador da Web que envolve o texto em torno de imagens incorporadas em uma pgina HTML. Sobre a incorporao de imagens, arquivos SWF e clipes de filme em campos de texto na pgina 470Para obter mais informaes, consulte . O Flash Player tambm oferece suporte marca <textformat>, que permite a aplicao de estilos de formatao de pargrafo da classe TextFormat em campos de texto ativados por HTML. Para obter mais informaes, consulte Usando a classe TextFormat na pgina 444. Para obter mais informaes sobre texto em formato HTML, consulte os seguintes tpicos:

Propriedades e sintaxe necessrias para usar texto em formato HTML na pgina 461 Sobre marcas HTML suportadas na pgina 462 Sobre entidades HTML suportadas na pgina 469 Sobre a incorporao de imagens, arquivos SWF e clipes de filme em campos de texto na pgina 470

Propriedades e sintaxe necessrias para usar texto em formato HTML


Para usar o formato HTML em um campo de texto, voc deve definir vrias propriedades do campo no inspetor Properties (Propriedades) ou usando o ActionScript:

Ative a formatao HTML do campo de texto selecionando a opo Render Text as HTML (Renderizar texto como HTML) no inspetor Properties ou definindo a propriedade html do campo como true. Para usar marcas HTML, como <p>, <br> e <img>, voc deve tornar o campo de texto um campo de vrias linhas selecionando a opo Multiline (Vrias linhas) no inspetor Properties ou definindo a propriedade multiline do campo como true. No ActionScript, defina o valor de TextField.htmlText com a seqncia de caracteres de texto em formato HTML que deseja exibir.

Por exemplo, o cdigo a seguir ativa a formatao HTML em um campo de texto chamado headline_txt e atribui um cdigo HTML ao campo de texto:

Usando texto em formato HTML

461

this.createTextField("headline_txt", 1, 10, 10, 500, 300); headline_txt.html = true; headline_txt.wordWrap = true; headline_txt.multiline = true; headline_txt.htmlText = "<font face='Times New Roman' size='25'>This is how you assign HTML text to a text field.</font><br>It's very useful.</br>";

Para renderizar o HTML corretamente, necessrio 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 renderizao de texto imprpria. Por exemplo, o trecho de HTML a seguir no pode ser renderizado adequadamente pelo Flash Player porque o valor atribudo ao atributo align (left) no 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 aceitveis de fazer isso:
myField_txt.htmlText myField_txt.htmlText p>"; myField_txt.htmlText myField_txt.htmlText p>'; = "<p align='left'>This uses single quotes</p>"; = "<p align=\"left\">This uses escaped double quotes</ = '<p align="left">This uses outer single quotes</p>'; = '<p align=\'left\'>This uses escaped single quotes</

Voc no precisar acrescentar um caractere de escape para fechar as aspas duplas se estiver carregando texto de um arquivo externo; isso s ser necessrio se voc estiver atribuindo uma seqncia de caracteres de texto no ActionScript.

Sobre marcas HTML suportadas


Esta seo lista as marcas HTML internas que o Flash Player suporta. Voc tambm pode criar novos estilos e marcas usando folhas de estilos CSS; consulte Formatando texto com estilos CSS na pgina 447. Para obter mais informaes sobre marcas HTML suportadas, consulte os seguintes tpicos:

Marca de ncora na pgina 463 Marca de negrito na pgina 463 Marca de quebra na pgina 464 Marca de fonte na pgina 464 Marca de imagem na pgina 465 Marca de itlico na pgina 466 Marca de item de lista na pgina 466

462

Trabalhando com texto e seqncias de caracteres

Marca de pargrafo na pgina 466 Marca de intervalo na pgina 467 Marca de formatao de texto na pgina 467 Marca de sublinhado na pgina 469

Marca de ncora
A marca <a> cria um hiperlink e oferece suporte aos seguintes atributos:

href Uma seqncia de at 128 caracteres que especifica o URL da pgina a ser carregada no navegador. O URL pode ser absoluto ou relativo ao local do arquivo SWF que est carregando a pgina. Um exemplo de referncia absoluta a um URL http:// www.macromedia.com; um exemplo de referncia relativa /index.html. target Especifica o nome da janela de destino na qual a pgina ser carregada. As opes incluem _self, _blank, _parent e _top. A opo _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 nvel superior na janela atual.

Por exemplo, o cdigo HTML a seguir cria o link V para a pgina 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 funo do ActionScript em um arquivo SWF, em vez de abrir um URL. Para obter mais informaes sobre o protocolo asfunction, consulte %{asfunction protocol}% em ActionScript 2.0 Language Reference. Voc tambm 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 pgina 454.
NO T A

Os URLs absolutos devem ter o prefixo http://; caso contrrio, 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 disponvel para a fonte usada para exibir o texto.

Usando texto em formato HTML

463

Marca de quebra
A marca <br> cria uma quebra de linha no campo de texto. Para usar essa marca, defina o campo de texto como um campo de vrias linhas. No exemplo a seguir, h uma quebra de linha entre as frases:
this.createTextField("text1_txt", 1, 10, 10, 200, 100); text1_txt.html = true; text1_txt.multiline = true; text1_txt.htmlText = "The boy put on his coat.<br />His coat was <font color='#FF0033'>red</font> plaid.";

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) so suportados. Por exemplo, o cdigo HTML a seguir cria texto vermelho: 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 vrgula; nesse caso, o Flash Player selecionar a primeira fonte disponvel:

myText_txt.htmlText = "<font color='#FF0000'>This is red text</font>";

face

myText_txt.htmlText = "<font face='Times, Times New Roman'>Displays as either Times or Times New Roman...</font>";

Se a fonte especificada no estiver instalada no computador do usurio ou no estiver incorporada no arquivo SWF, o Flash Player escolher uma fonte substituta. Para obter mais informaes sobre a incorporao de fontes em aplicativos Flash, consulte %{embedFonts (TextField.embedFonts property)}% em ActionScript 2.0 Language Reference e Definindo opes de texto dinmico e de entrada em Usando o Flash.

size

Especifica o tamanho da fonte, em pixels, como mostra este exemplo:

myText_txt.htmlText = "<font size='24' color='#0000FF'>This is blue, 24point text</font>";

Voc tambm pode usar tamanhos de ponto relativos em vez de um tamanho de pixel, como +2 ou -4.

464

Trabalhando com texto e seqncias de caracteres

Marca de imagem
A marca <img> permite incorporar clipes de filme, arquivos SWF e arquivos de imagem (JPEG, GIF, PNG) externos em campos de texto e instncias do componente TextArea. O texto flui automaticamente em torno das imagens incorporadas nos campos de texto ou nos componentes. Para usar essa marca, voc deve definir o campo de texto dinmico ou de entrada como um campo de vrias linhas, com quebra automtica de texto.
Para criar um campo de texto de vrias linhas com quebra automtica de linha, siga um destes procedimentos:

No ambiente de criao do Flash, selecione um campo de texto no Stage (Palco) e, no inspetor Properties (Propriedades), selecione Multiline (Vrias linhas) no menu pop-up Text Type (Tipo de texto). Para um campo de texto criado durante a execuo com %{createTextField (MovieClip.createTextField method)}%, defina as novas propriedades %{multiline (TextField.multiline property)}% e %{multiline (TextField.multiline property)}% da instncia do campo de texto como true.

A marca <img> tem um atributo obrigatrio, src, que especifica o caminho para um arquivo de imagem, um arquivo SWF ou o identificador de vinculao de um smbolo de clipe de filme da biblioteca. Todos os outros atributos so opcionais. As marcas <img> oferecem suporte aos seguintes atributos:

src Especifica o URL para um arquivo de imagem ou SWF ou para o identificador de vinculao de um smbolo de clipe de filme da biblioteca. Este atributo obrigatrio; todos os outros atributos so opcionais. Os arquivos externos (JPEG, GIF, PNG e SWF) s sero exibidos aps a concluso do download. id Especifica o nome da instncia de clipe de filme (criada pelo Flash Player) que contm o arquivo de imagem, o arquivo SWF ou o clipe de filme incorporado. til para controlar o contedo incorporado com o ActionScript.

A largura da imagem, do arquivo SWF ou do clipe de filme que est sendo inserido, em pixels.
width

A altura da imagem, do arquivo SWF ou do clipe de filme que est sendo inserido, em pixels.
height

Especifica o alinhamento horizontal da imagem incorporada no campo de texto. Os valores vlidos so left e right. O valor padro left.
align

Especifica a quantidade de espao horizontal em torno da imagem onde nenhum texto aparecer. O valor padro 8.
hspace

Especifica a quantidade de espao vertical em torno da imagem onde nenhum texto aparecer. O valor padro 8.
vspace

Usando texto em formato HTML

465

Para obter mais informaes e exemplos do uso da marca <img>, consulte Sobre a incorporao de imagens, arquivos SWF e clipes de filme em campos de texto na pgina 470.

Marca de itlico
A marca <i> exibe o texto marcado em itlico, como mostra o seguinte cdigo:
That is very <i>interesting</i>.

Esse exemplo de cdigo seria renderizado da seguinte maneira: That is very interesting. Um tipo itlico deve estar disponvel para a fonte usada.

Marca de item de lista


A marca <li> coloca um marcador na frente do texto includo nela, como mostra o seguinte cdigo:
Grocery list: <li>Apples</li> <li>Oranges</li> <li>Lemons</li>

Esse exemplo de cdigo seria renderizado da seguinte maneira: Grocery list:


Apples Oranges Lemons


N OT A

As listas ordenadas e no ordenadas (marcas<ol> e <ul>) no so reconhecidas pelo Flash Player e, portanto, no modificam o modo como sua lista renderizada. Todos os itens de lista usam marcadores.

Marca de pargrafo
A marca <p> cria um novo pargrafo. Para usar essa marca, defina o campo de texto como um campo de vrias linhas. A marca <p> oferece suporte aos seguintes atributos:

Especifica o alinhamento do texto no pargrafo; os valores vlidos so left, right, justify e center.
align class

Especifica uma classe de estilo CSS definida em um objeto TextField.StyleSheet. Para obter mais informaes, consulte Usando classes de estilo na pgina 454.

466

Trabalhando com texto e seqncias de caracteres

O exemplo a seguir usa o atributo align para alinhar o texto no lado direito de um campo de texto.
this.createTextField("myText_txt", 1, 10, 10, 400, 100); myText_txt.html = true; myText_txt.multiline = true; myText_txt.htmlText = "<p align='right'>This text is aligned on the right side of the text field</p>";

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 disponvel somente para uso com os estilos de texto CSS. Para obter mais informaes, consulte Formatando texto com estilos CSS na pgina 447. Ela oferece suporte ao seguinte atributo:

class

Especifica uma classe de estilo CSS definida em um objeto TextField.StyleSheet. Para obter mais informaes sobre a criao de classes de estilo de texto, consulte Usando classes de estilo na pgina 454.

Marca de formatao de texto


A marca <textformat> permite usar um subconjunto das propriedades de formatao de pargrafo da classe TextFormat nos campos de texto HTML, incluindo entrelinhamento, recuo, margens e interrupes de tabulao. Voc pode combinar as marcas <textformat> com as marcas HTML internas. A marca <textformat> tem os seguintes atributos:

Especifica o recuo do bloco em pontos; corresponde a TextFormat.blockIndent. (Consulte %{blockIndent (TextFormat.blockIndent property)}% em ActionScript 2.0 Language Reference.)
blockindent indent Especifica o recuo do primeiro caractere no pargrafo em relao margem esquerda; corresponde a TextFormat.indent. Permite usar inteiros negativos. (Consulte %{indent (TextFormat.indent property)}% em ActionScript 2.0 Language Reference.)

Usando texto em formato HTML

467

Especifica a quantidade de espao vertical entre as linhas; corresponde ao Permite usar inteiros negativos. (Consulte %{leading (TextFormat.leading property)}% em ActionScript 2.0 Language Reference.)
leading TextFormat.leading. leftmargin

Especifica a margem esquerda do pargrafo, em pontos; corresponde ao TextFormat.leftMargin. (Consulte %{leftMargin (TextFormat.leftMargin property)}% em ActionScript 2.0 Language Reference.) Especifica a margem direita do pargrafo, em pontos; corresponde ao (Consulte %{rightMargin (TextFormat.rightMargin property)}% em ActionScript 2.0 Language Reference.)
rightmargin TextFormat.rightMargin. tabstops Especifica as interrupes de tabulao personalizadas como um array de inteiros no negativos; corresponde ao TextFormat.tabStops. (Consulte %{tabStops (TextFormat.tabStops property)}% em ActionScript 2.0 Language Reference.)

Esta tabela de dados com cabealhos de linha em negrito o resultado do exemplo de cdigo no procedimento apresentado a seguir:
Name
Rick AJ

Age
33 34

Occupation
Detective Detective

Para criar uma tabela formatada de dados usando interrupes de tabulao:


1. 2. 3.

Crie um novo documento do Flash e salve-o como tabstops.fla. Na Timeline, selecione o primeiro quadro na Layer 1. Abra o painel Actions (Aes) (Window (Janela) > Actions) e digite o seguinte cdigo:
// Crie um novo campo de texto. this.createTextField("table_txt", 99, 50, 50, 450, 100); table_txt.multiline = true; table_txt.html = true; // Crie cabealhos de coluna, formatados em negrito, separados por tabulaes. var rowHeaders:String = "<b>Name\tAge\tOccupation</b>"; // Crie linhas com dados. var row_1:String = "Rick\t33\tDetective"; var row_2:String = "AJ\t34\tDetective"; // Defina duas interrupes de tabulao nos pontos 50 e 100. table_txt.htmlText = "<textformat tabstops='[50,100]'>"; table_txt.htmlText += rowHeaders; table_txt.htmlText += row_1; table_txt.htmlText += row_2 ; table_txt.htmlText += "</textformat>";

468

Trabalhando com texto e seqncias de caracteres

O uso da seqncia de escape do caractere de tabulao (\t) adiciona tabulaes entre cada coluna da tabela. Use o operador += para anexar texto.
4.

Selecione Control (Controlar) > Test Movie (Testar filme) para exibir a tabela formatada.

Marca de sublinhado
A marca <u> sublinha o texto marcado, como mostra o seguinte cdigo:
This is <u>underlined</u> text.

Esse cdigo seria renderizado da seguinte maneira:

Sobre entidades HTML suportadas


As entidades HTML ajudam a exibir determinados caracteres em campos de texto em formato HTML, a fim de que no sejam interpretados como HTML. Por exemplo, os caracteres menor que (<) e maior que (>) servem para delimitar as marcas HTML, como <img> e <span>. No Flash, para exibir os caracteres maior que e menor que em campos de texto em formato HTML, necessrio substituir esses caracteres por entidades HTML. O ActionScript a seguir cria um campo de texto em formato HTML no Stage (Palco) e usa entidades HTML para exibir a seqncia de caracteres <b> sem que o texto aparea em negrito:
this.createTextField("my_txt", 10, 100, 100, 100, 19); my_txt.autoSize = "left"; my_txt.html = true; my_txt.htmlText = "The &lt;b&gt; tag makes text appear <b>bold</b>.";

Durante a execuo, o cdigo de exemplo anterior do Flash exibe o seguinte texto no Stage: The <b> tag makes text appear bold. Alm dos smbolos maior que e menor que, o Flash tambm reconhece outras entidades HTML listadas na tabela apresentada a seguir.
Entidade
&lt; &gt; &amp; &quot; &apos;

Descrio
< (menor que) > (maior que) E comercial (&)

" (aspas duplas) ' (apstrofo, aspas simples)

Usando texto em formato HTML

469

O Flash tambm suporta cdigos de caracteres explcitos, como &#39; (E comercial - ASCII) e &#x0026; (E comercial - Unicode). O ActionScript a seguir demonstra como usar cdigos de caracteres ASCII ou Unicode para incorporar um caractere de til (~):
this.createTextField("my_txt", 10, 100, 100, 100, 19); my_txt.autoSize = "left"; my_txt.html = true; my_txt.htmlText = "&#126;"; // tilde (ASCII) my_txt.htmlText += "\t" my_txt.htmlText += "&#x007E;"; // tilde (Unicode)

Sobre a incorporao de imagens, arquivos SWF e clipes de filme em campos de texto


No Flash Player 7 e verses posteriores, voc pode usar a marca <img> para incorporar arquivos de imagem (JPEG, GIF, PNG), arquivos SWF e clipes de filmes em campos de texto dinmico e de entrada, bem como em instncias do componente TextArea. (Para obter uma lista completa de atributos da marca <img>, consulte Marca de imagem na pgina 465.) O Flash exibe a mdia incorporada em um campo de texto em seu tamanho total. Para especificar as dimenses da mdia que est sendo incorporada, use os atributos height e width da marca <img>. (Consulte Sobre a especificao dos valores de altura e largura na pgina 472.) Em geral, uma imagem incorporada em um campo de texto aparece na linha seguinte marca <img>. Entretanto, quando a marca <img> o primeiro caractere no campo de texto, a imagem aparece na primeira linha do campo de texto.

Incorporando arquivos SWF e de imagem


Para incorporar um arquivo de imagem ou SWF em um campo de texto, especifique o caminho absoluto ou relativo para o arquivo da imagem (GIF, JPEG ou PNG) ou SWF no atributo src da marca <img>. Por exemplo, o exemplo a seguir insere um arquivo GIF localizado no mesmo diretrio que o arquivo SWF (um endereo relativo, on-line ou off-line).
Incorporando uma imagem a um campo de texto:
1.

Crie um novo documento do Flash e salve-o como embedding.fla.

470

Trabalhando com texto e seqncias de caracteres

2.

Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:


this.createTextField("image1_txt", 10, 50, 50, 450, 150); image1_txt.html = true; image1_txt.htmlText = "<p>Here's a picture from my vacation:<img src='beach.gif'>";

O cdigo anterior cria um novo campo de texto dinmico no Stage (Palco), ativa a formatao HTML e adiciona um texto ou imagem local ao campo de texto.
3.

Adicione o seguinte ActionScript abaixo do cdigo 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'>";

Tambm possvel inserir uma imagem usando um endereo absoluto. O cdigo anterior insere um arquivo JPEG localizado em um diretrio em um servidor. O arquivo SWF que contm esse cdigo pode estar no disco rgido 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 (Sada), informando que o Flash no pde localizar um arquivo chamado beach.gif no diretrio 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 diretrio de FLA, renomeie a imagem como beach.gif e selecione Control > Test Movie para testar novamente o documento do Flash.
NO T A

Ao usar URLs absolutos, verifique se o URL tem o prefixo http://.

Incorporando smbolos de clipe de filme


Para incorporar um smbolo do clipe de filme a um campo de texto, especifique o identificador de vinculao do smbolo para o atributo src da marca <img>. (Para obter informaes sobre a definio de um identificador de vinculao, consulte Anexando um smbolo de clipe de filme ao Stage na pgina 381.) Por exemplo, o cdigo a seguir insere um smbolo de clipe de filme com o identificador de vinculao symbol_ID em um campo de texto dinmico com o nome de instncia textField_txt.

Usando texto em formato HTML

471

Para incorporar um clipe de filme a um campo de texto:


1. 2.

Crie um novo documento do Flash e salve-o como embeddedmc.fla. Desenhe uma nova forma no Stage (Palco) ou selecione File (Arquivo) > Import (Importar) > Import to Stage (Importar para o palco) e depois selecione uma imagem com mais ou menos 100 pixels de largura por 100 pixels de altura. Converta a forma ou imagem importada na etapa anterior, selecionando-a no Stage e pressionando F8 para abrir a caixa de dilogo Convert to Symbol (Converter em smbolo). Defina o comportamento como Movie Clip (Clipe de filme) e digite um nome de smbolo descritivo. Selecione o quadrado superior esquerdo da grade de ponto de registro e clique em Advanced (Avanado) para alternar para o modo avanado, caso ainda no o tenha feito. Marque as caixas de seleo Export for ActionScript (Exportar para ActionScript) e Export in First Frame (Exportar no primeiro quadro). Digite o identificador de vinculao img_id na caixa de texto Identifier (Identificador) e clique em OK. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
this.createTextField("textField_txt", 10, 0, 0, 300, 200); textField_txt.html = true; textField_txt.htmlText = "<p>Here's a movie clip symbol:<img src='img_id'>";

3.

4.

5.

6.

7.

Para que um clipe de filme incorporado seja exibido adequada e completamente, o ponto de registro de seu smbolo deve ser no ponto (0,0).
8. 9.

Salve as alteraes no documento do Flash. Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.

Sobre a especificao dos valores de altura e largura


Se voc especificar os atributos width e height para uma marca <img>, ser reservado espao no campo de texto para o arquivo de imagem, o arquivo SWF ou o clipe de filme. Aps o download completo de um arquivo de imagem ou SWF, ele aparecer no espao reservado. O Flash dimensiona a mdia para cima ou para baixo, de acordo com os valores especificados para height e width. Para dimensionar a imagem, necessrio inserir valores para os atributos height e width .

472

Trabalhando com texto e seqncias de caracteres

Se voc no especificar os valores height e width, nenhum espao ser reservado para a mdia incorporada. Aps o download completo de um arquivo de imagem ou SWF, o Flash o insere no campo de texto em seu tamanho total e "quebra" novamente o texto em torno dele.
NO TA

Se estiver carregando imagens dinamicamente em um campo de texto que contm texto, recomendvel especificar a largura e a altura da imagem original para dispor o texto adequadamente em torno do espao reservado para a imagem.

Controlando a mdia incorporada com o ActionScript


O Flash cria um novo clipe de filme para cada marca <img> e incorpora esse clipe ao objeto TextField. O atributo id da marca <img> permite atribuir um nome de instncia ao clipe de filme criado. Assim, possvel controlar o clipe de filme com o ActionScript. O clipe de filme criado pelo Flash Player adicionado como um clipe de filme-filho ao campo de texto que contm a imagem. No exemplo a seguir, um arquivo SWF incorporado a um campo de texto.
Para incorporar um arquivo SWF a um campo de texto:
1. 2. 3. 4.

Crie um novo documento do Flash. Redimensione o tamanho do Stage (Palco) do documento com 100 pixels por 100 pixels. Use a ferramenta Rectangle (Retngulo) para desenhar um quadrado vermelho no Stage. Redimensione o quadrado com 80 pixels por 80 pixels, usando o inspetor Properties (Propriedades), e depois mova a forma para o centro do Stage. Selecione Frame 20 (Quadro 20) na Timeline (Linha de tempo) e pressione F7 (Windows ou Macintosh) para inserir um novo quadro-chave em branco. Use a ferramenta Oval para desenhar um crculo azul no Stage, no Frame 20. Redimensione o crculo com 80 pixels por 80 pixels, usando o inspetor Properties, e depois mova-o para o centro do Stage. Clique em um quadro em branco entre Frame 1 (Quadro 1) e Frame 20 (Quadro 20) e defina o tipo de interpolao como Shape (Forma) no inspetor Properties. Salve o documento atual como animation.fla. Control (Controlar) > Test Movie (Testar filme) para visualizar a animao. O arquivo SWF criado no mesmo diretrio que o arquivo FLA. Para que este exerccio funcione corretamente, preciso gerar o arquivo SWF, a fim de que voc possa carreg-lo em um arquivo FLA separado.

5.

6. 7.

8.

9.

10. Selecione

11.

Crie um novo arquivo FLA e salve-o como animationholder.fla. Salve o arquivo na mesma pasta onde anteriormente foi criado o arquivo animation.fla.

Usando texto em formato HTML

473

12. Adicione

o seguinte cdigo ActionScript ao Frame 1 da Timeline principal:

this.createTextField("textField_txt", 10, 0, 0, 300, 200); textField_txt.html = true; textField_txt.htmlText = "Here's an interesting animation: <img src='animation.swf' id='animation_mc'>";

Nesse caso, o caminho totalmente qualificado para o clipe de filme recm-criado textField_txt.animation_mc.
13.

Salve as alteraes no documento do Flash e selecione Control > Test Movie para visualizar a animao no campo de texto.

Para controlar o arquivo SWF durante sua reproduo em um campo de texto, complete o prximo exerccio.
Para controlar um arquivo SWF que est sendo reproduzido em um campo de texto:
1.

Siga as etapas do primeiro procedimento que se encontra em Controlando a mdia incorporada com o ActionScript na pgina 473. Crie uma instncia de boto no Stage (Palco) e d a ela o nome de instncia stop_btn no inspetor Properties (Propriedades). Adicione o seguinte cdigo ActionScript abaixo do cdigo existente no Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
stop_btn.onRelease = function() { textField_txt.animation_mc.stop(); };

2.

3.

4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o aplicativo. Agora, sempre que voc clicar na instncia de boto stop_btn, a linha de tempo da animao aninhada no campo de texto ir parar.

Para obter informaes sobre como criar mdias incorporadas em um hiperlink, consulte Sobre a criao de hiperlinks a partir de uma mdia incorporada na pgina 474.

Sobre a criao de hiperlinks a partir de uma mdia incorporada


Para criar um hiperlink a partir de um arquivo de imagem, um arquivo SWF ou um clipe de filme incorporado, inclua a marca <img> em uma marca <a>:
textField_txt.htmlText = "Click the image to return home<a href='home.htm'><img src='home.jpg'></a>";

474

Trabalhando com texto e seqncias de caracteres

Quando posicionado sobre uma imagem, um arquivo SWF ou um clipe de filme delimitado por marcas <a>, o ponteiro do mouse se transforma no cone de mo indicadora, da mesma forma que quando posicionado em hiperlinks padro. A interatividade, como cliques no boto do mouse e pressionamentos de teclas, no registrada nos arquivos SWF e clipes de filme delimitados por marcas <a>. Para obter informaes sobre como incorporar mdia, consulte Sobre a criao de hiperlinks a partir de uma mdia incorporada na pgina 474.

Exemplo: Criando texto de rolagem


H vrios mtodos para criar texto de rolagem no Flash. Voc poder tornar os campos de texto dinmico e de entrada rolveis selecionando a opo Scrollable (Rolvel) no menu Text (Texto) ou no menu de contexto, ou clicando duas vezes na ala do campo de texto com a tecla Shift pressionada. Voc pode usar as propriedades scroll e maxscroll do objeto TextField para controlar a rolagem vertical, e as propriedades hscroll e maxhscroll para controlar a rolagem horizontal em um campo de texto. As propriedades scroll e hscroll especificam as posies de rolagem vertical e horizontal atuais, respectivamente; voc pode ler e escrever essas propriedades. As propriedades maxscroll e maxhscroll especificam as posies de rolagem vertical e horizontal mximas, respectivamente; voc s pode ler essas propriedades. O componente TextArea permite criar facilmente campos de texto de rolagem com o mnimo de script. Para obter mais informaes, consulte TextArea component em Components Language Reference (Referncia da linguagem de componentes).
Para criar um campo de texto dinmico rolvel:

Siga um destes procedimentos:


Com a tecla Shift pressionada, clique duas vezes na ala do campo de texto dinmico. Selecione o campo de texto dinmico com a ferramenta Selection (Seleo) e selecione Text (Texto) > Scrollable (Rolvel). Selecione o campo de texto dinmico com a ferramenta Selection. Clique com o boto direito do mouse (Windows) ou, pressionando Control, clique (Macintosh) no campo de texto dinmico e selecione Text > Scrollable.

Exemplo: Criando texto de rolagem

475

Para usar a propriedade scroll para criar texto de rolagem:


1.

Siga um destes procedimentos:

Use a ferramenta Text (Texto) para arrastar um campo de texto no Stage (Palco). Atribua ao campo de texto o nome de instncia textField_txt no inspetor Properties (Propriedades). Use o ActionScript para criar um campo de texto dinamicamente com o mtodo MovieClip.createTextField(). Atribua ao campo de texto o nome de instncia textField_txt como parmetro do mtodo.
NO TA

Se no estiver carregando texto dinamicamente no arquivo SWF, selecione Text > Scrollable (Rolvel) no menu principal.

2.

Crie um boto Up (Para cima) e um boto Down (Para baixo) ou selecione Window (Janela) > Common Libraries (Bibliotecas comuns) > Buttons (Botes) e arraste os botes para o Stage. Esses botes sero usados para rolar o texto para cima e para baixo. Selecione o boto Down no Stage e digite down_btn na caixa de texto Instance Name (Nome da instncia). Selecione o boto Up no Stage e digite up_btn na caixa de texto Instance Name. Selecione o Frame 1 (Quadro 1) na Timeline (Linha de tempo) e, no painel Actions (Aes) (Window > Actions), digite o seguinte cdigo a fim de rolar o texto para baixo no campo de texto:
down_btn.onPress = function() { textField_txt.scroll += 1; };

3.

4. 5.

6.

Aps o ActionScript da etapa 5, digite o cdigo a seguir para rolar o texto para cima:
up_btn.onPress = function() { textField_txt.scroll -= 1; };

Os botes up e down podem ser usados para rolar todo texto carregado no campo textField_txt.

476

Trabalhando com texto e seqncias de caracteres

Sobre seqncias de caracteres e a classe String


Em programao, uma seqncia de caracteres uma srie ordenada de caracteres. As seqncias de caracteres so geralmente usadas nos documentos do Flash e em arquivos de classes para exibir texto em aplicativos, como, por exemplo, em campos de texto. Alm disso, possvel armazenar valores como seqncias de caracteres que podem ser usadas em um aplicativo com diversas finalidades. Voc pode colocar seqncias de caracteres diretamente no cdigo ActionScript incluindo os caracteres de dados entre aspas. Para obter mais informaes sobre a criao de seqncias de caracteres, consulte Criando seqncias de caracteres na pgina 486. Para obter informaes sobre o uso de campos de texto, consulte Usando a classe TextField na pgina 406. Voc pode associar cada caractere a um cdigo de caractere especificado, que tambm pode ser usado para exibir texto. Por exemplo, o caractere A representado pelo cdigo de caractere Unicode 0041 ou 65 em ASCII (American Standard Code for Information Interchange, Cdigo padro americano para intercmbio de informaes). Para obter mais informaes sobre cdigos de caractere e grficos de cdigo, consulte www.unicode.org/charts. Como voc pode observar, a maneira como as seqncias de caracteres so representadas em um documento do Flash depende, em grande parte, do conjunto de caracteres escolhido e do mtodo de codificao dos caracteres. A codificao de caracteres refere-se ao cdigo, ou mtodo, usado para representar um conjunto de caracteres em um idioma com cdigos representativos, como valores numricos. O cdigo de caractere (mencionado no pargrafo anterior) a tabela de valores mapeados (como a tabela ASCII, onde A igual a 65). O mtodo de codificao o decifra em um programa de computador. Por exemplo, cada letra do idioma ingls teria um cdigo numrico representativo em uma codificao de caractere. O ASCII codifica cada letra, nmero e alguns smbolos em verses binrias de 7 bits de cada inteiro. O ASCII um conjunto de caracteres composto de 95 caracteres imprimveis e de vrios caracteres de controle; ele usado por computadores para representar texto.

Sobre seqncias de caracteres e a classe String

477

Como o ASCII, o Unicode outra maneira de associar um cdigo a cada letra do alfabeto. Como o ASCII no oferece suporte a conjuntos de caracteres grandes, como o alfabeto chins, o Padro Unicode valioso para a codificao de idiomas. Unicode o padro para conjuntos de caracteres, que pode representar qualquer idioma definido. O Unicode um padro til para o desenvolvimento em vrios idiomas. O cdigo de caractere designa qual caractere ele representa, e o padro tenta fornecer um modo universal de codificar os caracteres que fazem parte de qualquer idioma. As seqncias de caracteres podem ser exibidas em qualquer computador, plataforma ou software usado. Depois, caber ao programa envolvido (como o Flash ou um navegador da Web) exibir o glifo do caractere (sua aparncia visual). Ao longo dos anos, o nmero de caracteres com suporte no Unicode foi expandido para que mais (e maiores) idiomas sejam aceitos. As codificaes de caracteres so denominadas UTF (Unicode Transformation Format, Formato de transformao Unicode) e UCS (Universal Character Set, Conjunto de caracteres universais), que incluem UTF-8, UTF-16 e UTF-32. Na codificao UTF, os nmeros representam o nmero de bits em uma unidade e, na codificao UCS, os nmeros representam bytes.

O UTF-8 a codificao padro para a troca de texto, como em sistemas de email on-line. O UTF um sistema de 8 bits. O UTF-16 normalmente usado para processamento interno.

Seus aplicativos podem conter seqncias de caracteres de diversos tamanhos. Voc pode determinar o tamanho da seqncia de caracteres, embora isso possa variar dependendo do idioma usado. Alm disso, uma seqncia poder conter um caractere de encerramento, e esse caractere nulo no possui nenhum valor. Embora no seja efetivamente um caractere, o caractere de encerramento pode ser usado para determinar o fim de uma seqncia. Por exemplo, se estiver trabalhando com conexes de soquete, voc poder observar o caractere de encerramento para determinar o fim de uma seqncia de caracteres (como em um programa de bate-papo). O arquivo de origem de exemplo, strings.fla, encontra-se na pasta Samples do disco rgido. Esse arquivo mostra como criar um processador de texto simples que compare e recupere selees de seqncias e de subseqncias de caracteres.

No Windows, navegue at a unidade de inicializao\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.

478

Trabalhando com texto e seqncias de caracteres

Para obter mais informaes sobre seqncias de caracteres e a classe String (Seqncia de caracteres), consulte os seguintes tpicos:

Sobre o painel Strings na pgina 479 Usando a classe Locale na pgina 480 Usando um editor de mtodo de entrada na pgina 482 Sobre a classe String na pgina 485 Criando seqncias de caracteres na pgina 486 Sobre o caractere de escape na pgina 487 Analisando e comparando caracteres em seqncias de caracteres na pgina 488 Convertendo e concatenando seqncias de caracteres na pgina 491 Retornando subseqncias de caracteres na pgina 494

Sobre o painel Strings


O painel Strings (Seqncias de caracteres) permite criar e atualizar contedo multilnge. possvel especificar contedo para campos de texto que cobrem vrios idiomas e fazer com que o Flash determine automaticamente o contedo que deve aparecer em um determinado idioma, com base no idioma do computador que est executando o Flash Player. Para obter informaes gerais sobre o painel Strings e como us-lo nos aplicativos, consulte os seguintes tpicos em Using Flash (Usando o Flash):

Criando texto multilnge com o painel Strings na pgina 415 Sobre a edio de seqncias de caracteres no painel Strings na pgina 419 Traduzindo texto no painel Strings ou em um arquivo XML na pgina 425 Importando um arquivo XML para o painel Strings na pgina 426

possvel usar a classe Locale para controlar a exibio de textos multilnges. Para obter mais informaes, consulte Usando a classe Locale na pgina 480 e %{Locale (mx.lang.Locale)}% em ActionScript 2.0 Language Reference.

Sobre seqncias de caracteres e a classe String

479

Usando a classe Locale


A classe Locale (mx.lang.Locale) permite controlar a exibio de textos multilnges em um aplicativo Flash durante a execuo. Com o painel Strings (Seqncias de caracteres), voc pode usar IDs de seqncias de caracteres em vez de literais de seqncias de caracteres em campos de texto dinmicos, o que permite criar um arquivo SWF que exiba texto carregado de um arquivo XML especfico de um idioma. possvel usar os seguintes mtodos para exibir as seqncias de caracteres especficas do idioma, contidas nos arquivos XLIFF (XML Localization Interchange File Format, Formato de arquivo de intercmbio de localizao XML).
Automatically at runtime (Automaticamente durante a execuo) O Flash Player substitui IDs de seqncias de caracteres por seqncias de caracteres do arquivo XML, que corresponde ao cdigo do idioma padro do sistema retornado por %{language (capabilities.language property)}%. Manually using stage language (Usando manualmente o idioma do palco) As IDs de seqncias de caracteres so substitudas por seqncias de caracteres na compilao do arquivo SWF, e o Flash Player no pode alter-las. Using ActionScript at runtime (Usando o ActionScript durante a execuo)

possvel controlar a substituio de IDs de seqncias de caracteres usando o ActionScript, que controlado durante a execuo. Essa opo permite controlar o tempo e o idioma da substituio de IDs de seqncias de caracteres. Voc pode usar as propriedades e os mtodos da classe Locale quando quiser substituir as IDs de seqncias de caracteres usando o ActionScript, a fim de controlar o aplicativo durante a reproduo no Flash Player. Para obter uma demonstrao de como usar a classe Locale, veja o procedimento a seguir.

Para usar a classe Locale para criar sites multilnges:


1. 2.

Crie um novo documento do Flash e salve-o como locale.fla. Abra o painel Strings (Seqncias de caracteres) (Window [Janela] > Other Panels [Outros painis] > Strings) e clique em Settings (Configuraes). Selecione dois idiomas, en (ingls) e fr (francs), e clique em Add (Adicionar) para acrescentar os idiomas ao painel Active Languages (Idiomas ativos). Selecione a opo Via ActionScript at Runtime (Via ActionScript durante a execuo), defina o idioma de execuo padro como francs e clique em OK. Arraste um componente de ComboBox (Caixa de combinao) da pasta User Interface (Interface do usurio) do painel Components (Componentes) (Window > Components) para o Stage (Palco) e atribua a ele o nome de instncia lang_cb.

3.

4.

5.

480

Trabalhando com texto e seqncias de caracteres

6.

Crie um campo de texto dinmico no Stage usando a ferramenta Text (Texto) e atribua a ele o nome de instncia greeting_txt. Com o campo de texto selecionado no Stage, digite o identificador de seqncia de caracteres greeting na caixa de texto ID do painel Strings e clique em Apply (Aplicar). O Flash converter a seqncia de caracteres em IDS_GREETING. Na grade do painel String, digite a seqncia de caracteres hello na coluna en. Digite a seqncia de caracteres bonjour na coluna fr. Voc usar essas seqncias de caracteres ao utilizar a caixa de combinao lang_cb para alterar o idioma no Stage.

7.

8. 9.

10. Adicione

o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo)

principal:
import mx.lang.Locale; Locale.setLoadCallback(localeListener); lang_cb.dataProvider = Locale.languageCodeArray.sort(); lang_cb.addEventListener("change", langListener); greeting_txt.autoSize = "left"; Locale.loadLanguageXML(lang_cb.value); 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 sees. A primeira seo de cdigo importa a classe Locale e especifica um ouvinte de retornos de chamadas, que acionado sempre ao trmino do carregamento do arquivo XML de um idioma. Em seguida, a caixa de combinao lang_cb preenchida com um array classificado dos idiomas disponveis. Sempre que o valor lang_cb muda, o distribuidor de eventos do Flash dispara a funo langListener(), que carrega o arquivo XML do idioma especificado. A segunda seo de cdigo define duas funes: langListener() e localeListener(). A primeira funo, langListener(), chamada sempre que o valor da caixa de combinao lang_cb alterado pelo usurio. A segunda funo, localeListener(), chamada sempre ao trmino do carregamento do arquivo XML de um idioma. A funo verifica se o carregamento foi bem-sucedido e, em caso afirmativo, define a propriedade text da instncia greeting_txt para a saudao do idioma selecionado.

Sobre seqncias de caracteres e a classe String

481

11.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.
DICA AT E N O

O arquivo XML utilizado deve usar o padro XLIFF (XML Localization Interchange File Format, Formato de arquivo de intercmbio de localizao XML). A classe Locale diferente das outras classes do ActionScript 2.0 Language Reference, pois no faz parte do Flash Player. Como essa classe foi instalada no caminho de classe Flash Authoring (Criao do Flash), automaticamente compilada em arquivos SWF. O uso da classe Locale aumenta o tamanho do arquivo SWF ligeiramente, porque a classe deve ser compilada no arquivo SWF.

Para obter mais informaes, consulte %{Locale (mx.lang.Locale)}% em ActionScript 2.0 Language Reference.

Usando um editor de mtodo de entrada


Um IME (Input Method Editor, Editor de mtodo de entrada) permite digitar caracteres de texto no-ASCII em idiomas asiticos, como chins, japons e coreano. A classe IME do ActionScript permite manipular diretamente o IME do sistema operacional que est dentro do aplicativo Flash Player executado em um computador cliente. Usando o ActionScript, possvel determinar:

Se h um IME instalado no computador do usurio. Se o IME est ativado ou desativado no computador do usurio. Qual o modo de converso que o IME atual est utilizando.

A classe IME pode determinar qual o modo de converso que o IME est utilizando. Por exemplo, se o IME de japons estiver ativo, ser possvel determinar se o modo de converso Hiragana, Katakana, etc. usando o mtodo System.IME.getConversionMode() . Voc pode defini-lo com o mtodo System.IME.setConversionMode() .
N OT A

No momento, no possvel saber qual IME est ativo (se houver algum) nem mudar de um IME para outro (por exemplo, de ingls para japons ou de coreano para chins).

Tambm possvel ativar ou desativar o IME usando o aplicativo durante a execuo e executar outras funes, dependendo do sistema operacional do usurio. Voc pode verificar se um sistema possui um IME, utilizando a propriedade System.capabilities.hasIME . O prximo exemplo mostra como determinar se o usurio possui um IME instalado e ativo.
Para determinar se o usurio possui um IME instalado e ativo:
1.

Crie um novo documento do Flash e salve-o como ime.fla.

482

Trabalhando com texto e seqncias de caracteres

2.

Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:


if (System.capabilities.hasIME) { if (System.IME.getEnabled()) { trace("You have an IME installed and enabled."); } else { trace("You have an IME installed but not enabled."); } } else { trace("Please install an IME and try again."); }

Primeiramente, o cdigo anterior verifica se o sistema atual possui um IME instalado. Se houver um IME instalado, o Flash verificar se ele est ativo no momento.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. Uma mensagem aparece no painel Output (Sada) indicando se h um IME instalado e ativo no momento.

Tambm possvel usar a classe IME para ativar e desativar o IME no Flash durante a execuo. O exemplo a seguir requer que exista um IME instalado no sistema. Para obter mais informaes sobre a instalao de um IME na sua plataforma especfica, consulte os seguintes links:

www.microsoft.com/globaldev/default.mspx http://developer.apple.com/documentation/ http://java.sun.com

possvel ativar e desativar um IME durante a reproduo de um arquivo SWF, conforme mostrado no exemplo a seguir.
Para ativar e desativar um editor de mtodo de entrada durante a execuo:
1. 2.

Crie um novo documento do Flash e salve-o como ime2.fla. Crie duas instncias de smbolo de boto no Stage (Palco) e atribua a elas os nomes de instncias enable_btn e disable_btn. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
checkIME(); var my_fmt:TextFormat = new TextFormat(); my_fmt.font = "_sans"; this.createTextField("ime_txt", 10, 100, 10, 320, 240); ime_txt.border = true; ime_txt.multiline = true;

3.

Sobre seqncias de caracteres e a classe String

483

ime_txt.setNewTextFormat(my_fmt); ime_txt.type = "input"; ime_txt.wordWrap = true; 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; } }

O cdigo anterior dividido em cinco sees. A primeira seo chama o mtodo checkIME(), que exibe uma mensagem no painel Output (Sada) se o sistema tiver um IME instalado ou ativo. A segunda seo define um objeto de formato de texto personalizado, o qual define a fonte como _sans. A terceira seo cria um campo de texto de entrada e aplica o formato de texto personalizado. A quarta seo cria alguns manipuladores de eventos para as instncias enable_btn e disable_btn criadas em uma etapa anterior. A quinta e ltima seo de cdigo define a funo personalizada checkIME(), a qual verifica se o sistema atual possui um IME instalado e, em caso afirmativo, se o IME est ativo.
4.

Salve o arquivo FLA e selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
N O TA

Este exemplo requer que exista um IME instalado no sistema. Para obter informaes sobre a instalao 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 boto disable_btn no Stage, o Flash passa a usar o idioma anterior e ignora as atuais definies do IME.

484

Trabalhando com texto e seqncias de caracteres

(capabilities.hasIME property)}%

Para obter informaes sobre System.capabilities.hasIME, consulte %{hasIME em ActionScript 2.0 Language Reference.

Sobre a classe String


Na linguagem ActionScript bsica, uma seqncia de caracteres (String) tambm se refere a uma classe e a um tipo de dados. O tipo de dados String representa uma seqncia de caracteres de 16 bits que pode incluir letras, nmeros e sinais de pontuao. As seqncias de caracteres so armazenadas como caracteres Unicode, usando o formato UTF-16. Uma operao em um valor String retorna uma nova instncia da seqncia de caracteres. O valor padro de uma varivel declarada com o tipo de dados String null. Para obter mais informaes sobre seqncias de caracteres, dados e valores, consulte o Captulo 4, Dados e tipos de dados. A classe String contm mtodos que permitem trabalhar com seqncias de caracteres de texto. As seqncias de caracteres so importantes ao se trabalhar com vrios objetos, e os mtodos descritos neste captulo so teis quando se trabalha com seqncias de caracteres usadas em vrios objetos, como instncias de TextField, XML, ContextMenu e FileReference. A classe String (Seqncia de caracteres) um envoltrio para o tipo de dados String primitivo que fornece mtodos e propriedades que permitem manipular valores primitivos de seqncias de caracteres. possvel converter o valor de qualquer objeto em uma seqncia de caracteres usando a funo String(). Todos os mtodos da classe String, exceto concat(), fromCharCode(), slice() e substr(), so genricos; isso significa que eles chamam a funo toString() antes de executarem suas operaes e que podem ser usados com objetos diferentes de String. Como todos os ndices de seqncia de caracteres tm zero como base, o ndice do ltimo caractere de qualquer seqncia de caracteres myStr myStr.length - 1. O arquivo de origem de exemplo, strings.fla, encontra-se na pasta Samples do disco rgido. Esse arquivo mostra como criar um processador de texto simples que compare e recupere selees de seqncias e de subseqncias de caracteres.

No Windows, navegue at a unidade de inicializao\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.

Sobre seqncias de caracteres e a classe String

485

Criando seqncias de caracteres


Voc pode chamar qualquer mtodo do objeto String usando o mtodo construtor new String() ou usando o valor de uma seqncia de caracteres literal. Se voc especificar o valor literal de uma seqncia de caracteres, o interpretador do ActionScript automaticamente o converter em um objeto String temporrio, chamar o mtodo e depois descartar o objeto String temporrio. Voc tambm pode utilizar a propriedade String.length com o valor literal de uma seqncia de caracteres. No confunda o valor literal de uma seqncia de caracteres com um objeto String. Para obter mais informaes sobre valores literais de seqncias de caracteres e o objeto String, consulte o Captulo 5, Sobre literais, na pgina 138. No exemplo a seguir, a linha de cdigo cria o valor literal de seqncia de caracteres firstStr. Para declarar um valor literal, use uma aspa reta simples (') ou uma aspa reta dupla (") como delimitador.
Para criar e usar seqncias de caracteres:
1. 2.

Crie um novo documento do Flash e salve-o como strings.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var firstStr:String = "foo"; var secondStr:String = new String("foo"); trace(firstStr == secondStr); // true var thirdStr:String; trace(thirdStr); // undefined (indefinido)

Esse cdigo define trs objetos String: um que usa um valor literal de uma seqncia de caracteres, um que usa o operador new e um outro sem um valor inicial. As seqncias de caracteres podem ser comparadas usando o operador de igualdade (==), conforme mostrado na terceira linha de cdigo. Ao fazer referncia a variveis, voc s especifica o tipo de dado quando a varivel estiver sendo definida.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.

Use sempre valores literais de seqncia de caracteres, a menos que seja estritamente necessrio usar um objeto String. Para obter mais informaes sobre valores literais de seqncias de caracteres e o objeto String, consulte o Captulo 5, Sobre literais, na pgina 138. Para usar as aspas retas simples (') e aspas retas duplas (") como delimitadores em um valor literal de seqncia de caracteres, voc poder usar a barra invertida (\) como o caractere de escape. As duas seqncias de caracteres apresentadas a seguir so equivalentes:
var firstStr:String = "That's \"fine\""; var secondStr:String = 'That\'s "fine"';

486

Trabalhando com texto e seqncias de caracteres

Para obter mais informaes sobre o uso da barra invertida em seqncias de caracteres, consulte Sobre o caractere de escape na pgina 487. Lembre-se de que voc no pode usar as aspas curvas ou aspas especiais no cdigo ActionScript; esses caracteres so diferentes das aspas retas (') e ("), que podem ser usadas no cdigo. Ao colar texto de outra origem no ActionScript, como um documento do Word ou da Web, certifique-se de usar os delimitadores aspas retas. O arquivo de origem de exemplo, strings.fla, encontra-se na pasta Samples do disco rgido. Esse arquivo mostra como criar um processador de texto simples que compare e recupere selees de seqncias e de subseqncias de caracteres.

No Windows, navegue at a unidade de inicializao\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.

Sobre o caractere de escape


Voc pode usar o caractere de escape barra invertida (\) para definir outros caracteres em valores literais de seqncias de caracteres.
Seqncia de escape
\b \f \n \r \t \unnnn

Descrio
O caractere backspace. O caractere de alimentao de formulrio. O caractere de nova linha (newline). O caractere de retorno de carro. O caractere de tabulao. O caractere Unicode com o cdigo de caractere especificado pelo nmero hexidecimal nnnn. Por exemplo, \u263a o caractere de sorriso. O caractere ASCII com o cdigo de caractere especificado pelo nmero hexadecimal nn. Uma aspa simples. Uma aspa dupla. Um caractere de barra invertida.

\xnn

\' \" \\

Sobre seqncias de caracteres e a classe String

487

Para obter mais informaes sobre valores literais de seqncias de caracteres, consulte o Captulo 5, Sobre literais, na pgina 138 e Criando seqncias de caracteres na pgina 486.

Analisando e comparando caracteres em seqncias de caracteres


Cada caractere de uma seqncia de caracteres tem uma posio de ndice na seqncia (um inteiro). A posio de ndice do primeiro caractere 0. Por exemplo, na seqncia azul, o caractere a est na posio 0, e o caractere l, na posio 4. Toda seqncia de caracteres tem uma propriedade length, que igual ao nmero de caracteres contido na seqncia:
var companyStr:String = "macromedia"; trace(companyStr.length); // 10

Uma seqncia de caracteres vazia e outra nula tm tamanho igual a zero:


var firstStr:String = new String(); trace(firstStr.length); // 0 var secondStr:String = ""; trace(secondStr.length); // 0

Se uma seqncia de caracteres no contm nenhum valor, o comprimento definido como undefined:
var thirdStr:String; trace(thirdStr.length); // undefined (indefinido)
A VI S O 488

Se a seqncia de caracteres contiver um caractere de byte nulo (\0), o valor da seqncia de caracteres ser truncado.

Tambm possvel usar cdigos de caracteres para definir uma seqncia de caracteres. Para obter mais informaes sobre cdigos de caracteres e codificao de caracteres, consulte Sobre seqncias de caracteres e a classe String na pgina 477. O exemplo a seguir cria uma varivel chamada myStr e define o valor da seqncia de caracteres com base em valores ASCII passados ao mtodo String.fromCharCode():
var myStr:String = String.fromCharCode(104,101,108,108,111,32,119,111,114,108,100,33); trace(myStr); // ol, mundo!

Cada nmero listado no mtodo fromCharCode() do cdigo anterior representa um nico caractere. Por exemplo, o valor ASCII 104 representa um h minsculo, e o valor ASCII 32 representa o caractere de espao.

Trabalhando com texto e seqncias de caracteres

Tambm possvel usar o mtodo String.fromCharCode() para converter valores Unicode, embora o valor Unicode deva ser convertido de valores hexadecimais para decimais, conforme mostrado no seguinte ActionScript:
// Unicode 0068 == "h" var letter:Number = Number(new Number(0x0068).toString(10)); trace(String.fromCharCode(letter)); // h

Voc pode examinar os caracteres que ocupam vrias posies em uma seqncia, como no seguinte exemplo:
Para repetir uma seqncia de caracteres:
1. 2.

Crie um novo documento do Flash. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var myStr:String = "hello world!"; for (var i:Number = 0; i < myStr.length; i++) { trace(myStr.charAt(i)); }

3.

Selecione Control (Controlar) > Test Movie (Testar filme) para visualizar o documento do Flash. Voc dever ver cada caractere apresentado no painel Output (Sada) em uma linha separada. Modifique o cdigo 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)); }

4.

5.

Salve o documento atual do Flash e selecione Control (Controlar) > Test Movie (Testar filme) para visualizar o arquivo SWF. Quando esse cdigo executado, o painel Output (Sada) exibe o seguinte:
h e l l o w o r l ASCII=104 ASCII=101 ASCII=108 ASCII=108 ASCII=111 ASCII=32 ASCII=119 ASCII=111 ASCII=114 ASCII=108

Sobre seqncias de caracteres e a classe String

489

d - ASCII=100 ! - ASCII=33
DICA

Tambm possvel dividir uma seqncia de caracteres em um array de caracteres, usando o mtodo String.split() e inserindo uma seqncia de caracteres vazia ("") como um delimitador; por exemplo, var charArray:Array = myStr.split("");

Voc pode usar operadores para comparar seqncias de caracteres. Para obter informaes sobre o uso de operadores com seqncias de caracteres, consulte Sobre uso de operadores com seqncias de caracteres na pgina 192. Tambm possvel usar esses operadores com instrues condicionais, como if e while. O exemplo a seguir usa operadores e seqncias de caracteres para fazer uma comparao.
Para comparar duas seqncias de caracteres:
1. 2.

Crie um novo documento do Flash e salve-o como comparestr.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var str1:String = "Apple"; var str2:String = "apple"; if (str1 < str2) { trace("Uppercase letters sort first."); }

3.

Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF.

Voc pode usar os operadores de igualdade (==) e de diferena (!=) para comparar seqncias de caracteres com outros tipos de objetos, como mostrado no exemplo a seguir.
Para comparar seqncias de caracteres com outros tipos de dados:
1. 2.

Crie um novo documento do Flash e salve-o como comparenum.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var myStr:String = "4"; var total:Number = 4; if (myStr == total) { trace("Types are converted."); }

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 nmeros), o Flash tenta converter os tipos de dados, de modo a possibilitar a comparao.

490

Trabalhando com texto e seqncias de caracteres

Use os operadores de igualdade estrita (===) e de diferena estrita (!==) para verificar se os dois objetos de comparao so do mesmo tipo. O exemplo a seguir usa operadores de comparao estrita para assegurar que o Flash no tente converter tipos de dados enquanto tenta comparar valores.
Para forar comparaes estritas de tipos de dados:
1. 2.

Crie um novo documento do Flash e salve-o como comparestrict.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var str1:String = "4"; var str2:String = "5"; var total:Number = 4; if (str1 !== total) { trace("Types are not converted."); } if (str1 !== str2) { trace("Same type, but the strings don't match."); }

3.

Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme).

Para obter mais informaes sobre o uso de operadores com seqncias de caracteres, consulte Sobre uso de operadores com seqncias de caracteres na pgina 192. O arquivo de origem de exemplo, strings.fla, encontra-se na pasta Samples do disco rgido. Esse arquivo mostra como criar um processador de texto simples que compare e recupere selees de seqncias e de subseqncias de caracteres.

No Windows, navegue at a unidade de inicializao\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.

Convertendo e concatenando seqncias de caracteres


possvel usar o mtodo toString() para converter vrios objetos em seqncias de caracteres. A maioria dos objetos internos tem um mtodo toString() com essa finalidade:
var n:Number = 0.470; trace(typeof(n.toString())); // seqncia de caracteres

Ao usar o operador de adio (+) com uma combinao de instncias de seqncia de caracteres e de outros tipos, voc no precisa usar o mtodo toString(). Para obter detalhes sobre concatenao, consulte o segundo procedimento desta seo.

Sobre seqncias de caracteres e a classe String

491

Os mtodos toLowerCase() e toUpperCase() convertem os caracteres alfabticos da seqncia em letras minsculas e maisculas, respectivamente. O exemplo a seguir demonstra como converter uma seqncia de caracteres de minsculas em maisculas.
Para converter uma seqncia de caracteres de minsculas em maisculas:
1. 2.

Crie um novo documento do Flash e salve-o como convert.fla. Digite o seguinte cdigo no Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var myStr:String = "Dr. Bob Roberts, #9."; trace(myStr.toLowerCase()); // dr. bob roberts, #9. trace(myStr.toUpperCase()); // DR. BOB ROBERTS, #9. trace(myStr); // Dr. Bob Roberts, #9.

3.

Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme).
N OT A

Aps a execuo desses mtodos, a seqncia de caracteres de origem permanece inalterada. Para transformar a seqncia de caracteres de origem, use o seguinte:

myStr = myStr.toUpperCase();

Quando voc concatena duas seqncias de caracteres, elas so unidas seqencialmente em uma s. Por exemplo, voc pode usar o operador de adio (+) para concatenar duas seqncias de caracteres. O prximo exemplo mostra como fazer isso.
Para concatenar duas seqncias de caracteres:
1. 2.

Crie um novo documento do Flash e salve-o como concat.fla. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var str1:String var str2:String trace(str2); // // var str3:String str3 += "ish"; trace(str3); // = "green"; = str1 + "ish"; verde claro = "yellow"; amarelo claro

O cdigo anterior mostra dois mtodos de concatenar seqncias de caracteres. O primeiro mtodo usa o operador de adio (+) para unir a seqncia de caracteres str1 seqncia " claro". O segundo mtodo usa o operador de adio e atribuio (+=) para concatenar a seqncia de caracteres " claro" com o valor atual de str3.
3.

Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme).

Voc tambm pode usar o mtodo concat() da classe String para concatenar seqncias de caracteres. Esse mtodo demonstrado neste exemplo.

492

Trabalhando com texto e seqncias de caracteres

Para concatenar duas seqncias de caracteres com o mtodo concat():


1. 2.

Crie um novo documento do Flash e salve-o como concat2.fla. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
var str1:String var str2:String var str3:String var str4:String trace(str4); // = "Bonjour"; = "from"; = "Paris"; = str1.concat(" ", str2, " ", str3); Bonjour from Paris

3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.

Se voc usar o operador de adio (+) (ou o operador de adio e atribuio [+=]) com um objeto String (Seqncia de caractere) e outro diferente de String, o ActionScript converter automaticamente o objeto diferente de String em seqncias de caracteres para avaliar a expresso. Essa converso demonstrada no seguinte cdigo de exemplo:
var version:String = "Flash Player "; var rel:Number = 8; version = version + rel; trace(version); // Flash Player 8

Entretanto, voc pode usar parnteses para forar o operador de adio (+) a fazer uma avaliao aritmtica, conforme demonstrado no seguinte cdigo ActionScript:
trace("Total: $" + 4.55 + 1.46); // Total: $4.551.46 trace("Total: $" + (4.55 + 1.46)); // Total: $6.01

Voc pode usar o mtodo split() para criar um array de subseqncias de caracteres de uma seqncia, que dividido com base em um caractere delimitador. Por exemplo, voc poderia segmentar uma seqncia delimitada por vrgulas ou tabulaes em vrias seqncias. Por exemplo, o cdigo a seguir mostra como dividir um array em subseqncias de caracteres usando o caractere de E comercial (&) como delimitador.
Para criar uma array de subseqncias de caracteres segmentado por delimitador:
1. 2.

Crie um novo documento do Flash e salve-o como strsplit.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var queryStr:String = "first=joe&last=cheng&title=manager&startDate=3/6/ 65"; var params:Array = queryStr.split("&", 2); trace(params); // first=joe,last=cheng /* params is set to an array with two elements: params[0] == "first=joe"

Sobre seqncias de caracteres e a classe String

493

params[1] == "last=cheng" */ 3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.
D IC A DICA

O segundo parmetro do mtodo split() define o tamanho mximo do array. Se voc no quiser limitar o tamanho do array criado pelo mtodo split(), poder omitir osegundo parmetro. O modo mais fcil de analisar uma seqncia de caracteres de consulta (uma seqncia de caracteres delimitada por caracteres & e =) usar o mtodo LoadVars.decode(), conforme mostrado no seguinte ActionScript:

var queryStr:String = "first=joe&last=cheng&title=manager&startDate=3/6/ 65"; var my_lv:LoadVars = new LoadVars(); my_lv.decode(queryStr); trace(my_lv.first); // joe

Para obter mais informaes sobre o uso de operadores com seqncias de caracteres, consulte Sobre uso de operadores com seqncias de caracteres na pgina 192. O arquivo de origem de exemplo, strings.fla, encontra-se na pasta Samples do disco rgido. Esse arquivo mostra como criar um processador de texto simples que compare e recupere selees de seqncias e de subseqncias de caracteres.

No Windows, navegue at a unidade de inicializao\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.

Retornando subseqncias de caracteres


Os mtodos substr() e substring() da classe String so semelhantes. Ambos retornam uma subseqncia de uma seqncia de caracteres e ambos usam dois parmetros. Nos dois mtodos, o primeiro parmetro a posio do caractere inicial na seqncia especificada. Entretanto, no mtodo substr(), o segundo parmetro o tamanho da subseqncia a ser retornada e, no mtodo substring(), o segundo parmetro a posio do caractere localizado no fim da subseqncia (que no est includo na seqncia retornada). Este exemplo mostra a diferena entre os dois mtodos:
Para localizar um subseqncia por posio de caractere:
1.

Crie um novo documento do Flash e salve-o como substring.fla.

494

Trabalhando com texto e seqncias de caracteres

2.

Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:


var myStr:String = "Hello from Paris, Texas!!!"; trace(myStr.substr(11,15)); // Paris, Texas!!!!!! trace(myStr.substring(11,15)); // Pari

O primeiro mtodo, substr(), retorna uma seqncia com 15 caracteres, comeando no dcimo-primeiro caractere. O segundo mtodo, substring(), retorna uma seqncia de caracteres com quatro caracteres, retendo todos os caracteres entre o dcimo-primeiro e o dcimo-quinto.
3.

Adicione o seguinte ActionScript abaixo do cdigo criado na etapa anterior:


trace(myStr.slice(11, trace(myStr.slice(-3, trace(myStr.slice(-3, trace(myStr.slice(-3, trace(myStr.slice(-8, 15)); // Pari -1)); // !! 26)); // !!! myStr.length)); // !!! -3)); // Texas

O mtodo slice() funciona de forma semelhante ao mtodo substring(). Quando dois inteiros no negativos so fornecidos como parmetros, ele funciona de forma idntica. No entanto, o mtodo slice() pode ter inteiros negativos como parmetros.
4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.
N OT A

possvel combinar inteiros no negativos e negativos como os parmetros do mtodo slice().

Voc pode usar os mtodos indexOf() e lastIndexOf() para localizar subseqncias correspondentes em uma seqncia de caracteres, como no exemplo apresentado a seguir.
Para localizar a posio de caractere de uma subseqncia correspondente:
1. 2.

Crie um novo documento do Flash e salve-o como indexof.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var myStr:String = "The moon, the stars, the sea, the land"; trace(myStr.indexOf("the")); // 10 trace(myStr.indexOf("the", 11)); // 21

O primeiro ndice da palavra the comea no dcimo caractere, porque o mtodo indexOf() faz distino entre maisculas e minsculas; portanto, a primeira instncia de The no ser levada em considerao. Voc pode especificar um segundo parmetro para o mtodo indexOf(), a fim de indicar em qual posio de ndice na seqncia de caracteres a pesquisa deve iniciar: No cdigo anterior, o Flash pesquisa o primeiro ndice da palavra the que ocorre aps o dcimo-primeiro caractere.

Sobre seqncias de caracteres e a classe String

495

3.

Adicione o seguinte ActionScript abaixo do cdigo criado na etapa anterior:


trace(myStr.lastIndexOf("the")); // 30 trace(myStr.lastIndexOf("the", 29)); // 21

O mtodo lastIndexOf() localiza a ltima ocorrncia de uma subseqncia na seqncia de caracteres: Por exemplo, em vez de pesquisar um caractere ou subseqncia desde o incio de uma seqncia de caracteres, o mtodo lastIndexOf() comea no fim de uma seqncia de caracteres e trabalha de forma retroativa. De maneira semelhante ao mtodo indexOf(), se voc incluir um segundo parmetro com o mtodo lastIndexOf(), a pesquisa ser conduzida a partir dessa posio de ndice, sendo que a seqncia de caracteres ser pesquisada de forma retroativa (da direita para a esquerda).
4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.
DICA

Os mtodos indexOf() e lastIndexOf() fazem distino entre maisculas e minsculas.

O arquivo de origem de exemplo, strings.fla, encontra-se na pasta Samples do disco rgido. Esse arquivo mostra como criar um processador de texto simples que compare e recupere selees de seqncias e de subseqncias de caracteres.

No Windows, navegue at a unidade de inicializao\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.

496

Trabalhando com texto e seqncias de caracteres

CAPTULO 13

Animao, filtros e desenhos


Este captulo descreve como adicionar animao aos aplicativos Macromedia Flash Basic 8 e Macromedia Flash Professional 8 com o ActionScript em vez de (ou alm de) animaes baseadas na timeline que usam interpolaes de movimento ou de forma. O uso de cdigo para criar animao e efeitos normalmente reduz o tamanho de arquivo do aplicativo concludo, alm de poder melhorar o desempenho e a consistncia da animao em si. Algumas vezes, as animaes baseadas em ActionScript podem at mesmo reduzir sua carga de trabalho: escrever o cdigo pode ser um procedimento mais rpido, alm da facilidade de aplic-lo a vrias instncias de uma vez ou reutiliz-lo em outros aplicativos. Este captulo tambm mostra como animar usando os conceitos bsicos fundamentais do ActionScript, as classes Tween e TransitionManager, a API (Application Programming Interface, Interface de programao de aplicativos) de desenho, as classes de filtro e os modos de mistura. Use a API de desenho, que consiste nos mtodos de desenho da classe MovieClip, para adicionar animao e desenhar. Esses mtodos permitem usar cdigo para criar linhas, preenchimentos e formas, em vez das ferramentas de desenho da ferramenta de criao. Filtros e outros efeitos expressivos tambm so importantes em vrios aplicativos Flash, para aplicar rapidamente um efeito e anim-lo. Voc pode usar cdigo para adicionar e animar efeitos de filtro, modos de mistura e imagens de bitmap. O captulo contm as seguintes sees, que descrevem o uso do ActionScript para criar animao e adicionar efeitos, bem como o uso da API de desenho para desenhar no ActionScript:
Scripts de animao com o ActionScript 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 Sobre cache de bitmap, rolagem e desempenho . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 Sobre as classes Tween e TransitionManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Usando efeitos de filtro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .526 Trabalhando com filtros usando ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .534 Manipulando efeitos de filtro com cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .557 Criando bitmaps com a classe BitmapData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 Modos de mistura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .564

13

497

Sobre a ordem de operao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 Desenhando com o ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 Noes bsicas sobre dimensionamento e guias de trecho. . . . . . . . . . . . . . . . . . .583

Scripts de animao com o ActionScript 2.0


Voc pode usar o ActionScript 2.0 para adicionar animao aos aplicativos Flash, em vez de interpolaes de movimento ou de forma em uma timeline. As sees a seguir mostram como usar cdigo para animar instncias, por exemplo, alterar a transparncia e a aparncia da instncia e mov-la no Stage (Palco). Para obter informaes sobre como usar as classes Tween e TransitionManager para automatizar ainda mais as animaes baseadas em cdigo, consulte TransitionManager class e Tween class em Components Language Reference. Essas classes ajudam a adicionar equaes de atenuao avanadas e animaes de transio a instncias de clipe de filme em seu aplicativo. Vrios desses efeitos so difceis de serem recriados com o ActionScript sem essas classes predefinidas, pois o cdigo a ser usado envolve a criao de equaes matemticas complexas para atingir o efeito. Para obter mais informaes sobre como animar desenhos criados com cdigo, consulte Desenhando com o ActionScript na pgina 567. As sees a seguir descrevem como usar animaes com script:

Sobre animao e taxa de quadros na pgina 499 Efeitos de fade em objetos com cdigo na pgina 500 Adicionando efeitos de cor e brilho com cdigo na pgina 502 Movimentao de objetos com cdigo na pgina 505 Efeito de imagem panormica com cdigo na pgina 506

Para obter um exemplo de animao com script no Flash, localize um arquivo de origem de exemplo, animation.fla, na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\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.

498

Animao, filtros e desenhos

H exemplos de aplicativos de galeria de fotos em seu disco rgido. Esses arquivos mostram como usar o ActionScript para controlar clipes de filme dinamicamente ao carregar arquivos de imagem em um arquivo SWF, que inclui animao com script. Os arquivos de origem de exemplo, gallery_tree.fla e gallery_tween.fla, podem ser encontrados na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Sobre animao e taxa de quadros


Ao adicionar animao a um aplicativo, considere a taxa de quadros definida para o seu arquivo FLA. Leve em considerao a taxa de quadros ao trabalhar com animaes, pois ela pode afetar o desempenho de seu arquivo SWF e o computador que o executa. A configurao de uma taxa muito alta pode causar problemas no processador, principalmente quando voc usa vrios recursos ou o ActionScript para criar animao. Entretanto, leve em considerao tambm a configurao da taxa de quadros, pois ela afeta a suavidade de reproduo de sua animao. Por exemplo, uma animao definida como 12 quadros por segundo (qps) no inspetor Properties (Propriedades) reproduz 12 quadros a cada segundo. Se a taxa de quadros do documento estiver definida como 24 qps, a animao dar a impresso de ser reproduzida com mais suavidade do que se fosse executada a 12 qps. Entretanto, a animao a 24 qps tambm reproduzida com mais rapidez do que a animao a 12 qps, portanto, a durao total (em segundos) menor. Desse modo, se precisar criar uma animao de 5 segundos usando uma taxa de quadros mais alta, voc precisar adicionar mais quadros para preencher esses cinco segundos do que a uma taxa de quadros mais baixa (aumentando, portanto, o tamanho total do arquivo da animao). Em geral, uma animao de 5 segundos a 24 qps possui um tamanho de arquivo maior do que uma animao de 5 segundos a 12 qps.
NO T A

Quando voc usa um manipulador de eventos onEnterFrame para criar animaes com script, a animao executada segundo a taxa de quadros do documento, da mesma forma como se voc tivesse criado uma interpolao de movimento em uma timeline. Uma alternativa para o manipulador de eventos onEnterFrame a funo setInterval (consulte %{funo setInterval}% em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0)). Em vez de depender da taxa de quadros, voc pode chamar funes em um intervalo especificado. Da mesma forma que com o manipulador onEnterFrame, quanto mais voc usar setInterval para chamar uma funo, mais recursos ter a animao em seu processador.

Scripts de animao com o ActionScript 2.0

499

O uso da taxa de quadros mais baixa possvel que aparentemente faa sua animao ser reproduzida suavamente durante a execuo ajudar a reduzir a sobrecarga no processador do usurio final. Tente no usar uma taxa de quadros maior que 30 a 40 qps; taxas de quadro altas sobrecarregam bastante os processadores; no altere tambm a aparncia da animao (ou no a altere muito) durante a execuo. Alm disso e, principalmente se estiver trabalhando com animao baseada na timeline, selecione uma taxa de quadros para a animao o quanto antes no processo de desenvolvimento. Ao testar o arquivo SWF, verifique a durao e o tamanho do arquivo SWF de sua animao. A taxa de quadros afeta bastante a velocidade da animao.

Efeitos de fade em objetos com cdigo


Ao trabalhar com clipes de filme no Stage, voc talvez deseje usar o recurso de fade-in ou fadeout no clipe em vez de alternar a propriedade _visible. O procedimento a seguir demonstra como usar um manipulador de eventos onEnterFrame para animar um clipe de filme.
Para aplicar os efeitos de fade a um clipe de filme usando cdigo:
1. 2.

Crie um novo documento do Flash chamado fade1.fla. Desenhe alguns grficos no Stage usando as ferramentas de desenho ou importe uma imagem para o Stage (File (Arquivo) > Import (Importar) > Import to Stage (Importar para o palco)). Selecione o contedo no Stage e escolha Modify (Modificar) > Convert to Symbol (Converter em smbolo). Selecione a opo Movie clip (Clipe de filme) e clique em OK para criar o smbolo. Selecione a instncia de clipe de filme no Stage e digite img1_mc na caixa de texto Instance Name (Nome da instncia) do inspetor Properties (Propriedades). Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e adicione o cdigo a seguir ao painel Actions (Aes):
img1_mc.onEnterFrame = function() { img1_mc._alpha -= 5; if (img1_mc._alpha <= 0) { img1_mc._visible = false; delete img1_mc.onEnterFrame; } };

3.

4. 5.

6.

500

Animao, filtros e desenhos

Esse cdigo usa um manipulador de eventos onEnterFrame que chamado repetidamente de acordo com a taxa de quadros do arquivo SWF. O nmero de vezes por segundo que o manipulador de eventos chamado depende da taxa de quadros definida no documento do Flash. Se a taxa de quadros for 12 quadros por segundo (qps), o manipulador de eventos onEnterFrame ser chamado 12 vezes por segundo. Da mesma maneira, se a taxa de quadros do documento do Flash for 30 qps, o manipulador de eventos ser chamado 30 vezes por segundo.
7.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. O clipe de filme adicionado ao Stage desaparece lentamente.

Voc pode modificar a propriedade _alpha usando a funo setInterval(), em vez de um manipulador de eventos onEnterFrame, conforme mostrado no procedimento a seguir.
Para aplicar o efeito de fade a um objeto usando a funo setInterval():
1. 2.

Crie um novo documento do Flash chamado fade2.fla. Desenhe alguns grficos no Stage ou importe uma imagem para ele (File > Import > Import to Stage). Selecione o contedo no Stage e escolha Modify > Convert to Symbol. Selecione a opo Movie clip e clique em OK para criar o smbolo. Selecione a instncia de clipe de filme no Stage e digite img1_mc na caixa de texto Instance Name do inspetor Properties. Selecione o Frame 1 da Timeline e adicione o cdigo a seguir ao painel Actions:
var alpha_interval:Number = setInterval(fadeImage, 50, img1_mc); function fadeImage(target_mc:MovieClip):Void { target_mc._alpha -= 5; if (target_mc._alpha <= 0) { target_mc._visible = false; clearInterval(alpha_interval); } }

3. 4. 5.

6.

A funo setInterval() comporta-se de uma maneira ligeiramente diferente do manipulador de eventos onEnterFrame, pois setInterval() informa ao Flash precisamente com que freqncia o cdigo deve chamar uma funo especfica. Nesse exemplo de cdigo, a funo fadeImage() definida pelo usurio chamada a cada 50 milissegundos (20 vezes por segundo). A funo fadeImage() decrementa o valor da propriedade _alpha do clipe de filme atual. Quando o valor de _alpha for menor que ou igual a 0, o intervalo ser apagado, interrompendo a execuo da funo fadeImage().
7.

Selecione Control > Test Movie para testar o documento. O clipe de filme adicionado ao Stage desaparece lentamente.

Scripts de animao com o ActionScript 2.0

501

Para obter mais informaes sobre funes definidas pelo usurio, consulte Definindo funes globais e de timeline na pgina 224. Para obter mais informaes sobre o manipulador de eventos onEnterFrame, consulte %{onEnterFrame (manipulador MovieClip.onEnterFrame)}% em ActionScript 2.0 Language Reference. Para obter mais informaes sobre a funo setInterval(), consulte %{funo setInterval}% em ActionScript 2.0 Language Reference. Para obter um exemplo de animao com script no Flash, localize um arquivo de origem de exemplo, animation.fla, na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\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.

Adicionando efeitos de cor e brilho com cdigo


Alm de usar o ActionScript para definir e animar recursos de fade alfa (consulte Efeitos de fade em objetos com cdigo na pgina 500), voc pode animar diversos efeitos de cor e brilho usando cdigo em vez do painel Filters (Filtros) no inspetor Properties. O procedimento a seguir carrega uma imagem JPEG e aplica um filtro de transformao de cor, que modifica os canais vermelho e verde quando o ponteiro do mouse passa pelos eixos x e y.
Para alterar os canais de cor de um objeto usando o ActionScript:
1. 2.

Crie um novo documento do Flash chamado colorTrans.fla. Selecione o Frame 1 da Timeline e adicione o cdigo a seguir ao painel Actions:
import flash.geom.Transform; import flash.geom.ColorTransform; var imageClip:MovieClip = this.createEmptyMovieClip("imageClip", 1); var clipLoader:MovieClipLoader = new MovieClipLoader(); clipLoader.loadClip("http://www.helpexamples.com/flash/images/ image1.jpg", imageClip); var mouseListener:Object = new Object(); mouseListener.onMouseMove = function():Void { var transformer:Transform = new Transform(imageClip); var colorTransformer:ColorTransform = transformer.colorTransform; colorTransformer.redMultiplier = (_xmouse / Stage.width) * 1; colorTransformer.greenMultiplier = (_ymouse / Stage.height) * 1; transformer.colorTransform = colorTransformer;

502

Animao, filtros e desenhos

} Mouse.addListener(mouseListener); 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 tambm 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. 2.

Crie um novo documento do Flash chamado grayscale.fla. Selecione o Frame 1 da Timeline e adicione o cdigo 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);

O cdigo anterior comea a importar a classe ColorMatrixFilter e cria um objeto ouvinte que ser usado com uma nova instncia MovieClipLoader criada em algum cdigo posterior. Em seguida, uma nova instncia de clipe de filme criada com o nome img_mc, e tambm uma nova instncia de clipe de filme carregador cujo nome ser img_mcl. Finalmente, o clipe de filme de origem carregado no clipe de filme img_mc no Stage. Depois que a imagem for carregada com xito, o manipulador de eventos onLoadInit ser chamado e anexar ColorMatrixFilter a ela.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. A imagem carregada no Stage alterada para uma imagem em escala de cinza. Exiba a imagem on-line (http://www.helpexamples.com/flash/images/image1.jpg) para ver sua cor original.

Scripts de animao com o ActionScript 2.0

503

Voc tambm pode definir o brilho de uma imagem usando o cdigo ActionScript do procedimento a seguir.
Para alterar o brilho de uma imagem:
1. 2.

Crie um novo documento do Flash chamado brightness.fla. Selecione o Frame 1 da Timeline e adicione o cdigo 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 = [1, 0, 0, 0, 100, 0, 1, 0, 0, 100, 0, 0, 1, 0, 100, 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/image2.jpg", img_mc);

Este bloco de cdigo 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 aparncia original.

Para obter um exemplo de animao com script no Flash, localize um arquivo de origem de exemplo, animation.fla, na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\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.

504

Animao, filtros e desenhos

Voc tambm pode obter exemplos de aplicativos de galeria de fotos em seu disco rgido. Esses arquivos fornecem exemplos de como usar o ActionScript para controlar clipes de filme dinamicamente durante o carregamento de arquivos de imagem em um arquivo SWF, que inclui animao com script. Os arquivos de origem de exemplo, gallery_tree.fla e gallery_tween.fla, podem ser encontrados na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Movimentao de objetos com cdigo


Usar o ActionScript para mover um objeto semelhante a modificar a propriedade _alpha de um objeto, embora voc esteja modificando a propriedade _x ou _y do objeto. O procedimento a seguir mostra uma animao de uma imagem JPEG carregada dinamicamente e desliza-a horizontalmente pelo Stage:
Para mover uma instncia no Stage usando cdigo:
1. 2.

Crie um novo documento do Flash chamado moveClip.fla. Altere a taxa de quadros do documento para 24 qps no inspetor Properties. A animao ficar muito mais suave se voc usar uma taxa de quadros mais alta, por exemplo, 24 qps.

3.

Selecione o Frame 1 da Timeline e adicione o cdigo a seguir ao painel Actions:


// Criar uma instncia de clipe de filme. this.createEmptyMovieClip("img1_mc", 10); var mcl_obj:Object = new Object(); mcl_obj.onLoadInit = function (target_mc:MovieClip):Void { target_mc._x = Stage.width; target_mc.onEnterFrame = function() { target_mc._x -= 3; // diminuir para 3 pixels a posio _x atual if (target_mc._x <= 0) { target_mc._x = 0; delete target_mc.onEnterFrame; } }; }; var img_mcl:MovieClipLoader = new MovieClipLoader(); img_mcl.addListener(mcl_obj); // Carregar uma imagem no clipe de filme img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img1_mc);

Scripts de animao com o ActionScript 2.0

505

Esse exemplo de cdigo carrega uma imagem externa a partir de um servidor Web remoto e, depois que a imagem carregada completamente, ela animada no sentido horizontal pelo Stage. Em vez de usar um manipulador de eventos onEnterFrame, voc poderia usar a funo setInterval() para animar a imagem.
4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. A imagem carregada e, em seguida, animada desde o lado direito do Stage at seu canto superior esquerdo.

Para obter informaes sobre como usar um manipulador de eventos onEnterFrame ou a funo setInterval() para animar a imagem, consulte Efeitos de fade em objetos com cdigo na pgina 500. Para obter um exemplo de animao com script no Flash, localize um arquivo de origem de exemplo, animation.fla, na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\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.

Tambm h exemplos de aplicativos de galeria de fotos em seu disco rgido. Esses arquivos mostram como usar o ActionScript para controlar clipes de filme dinamicamente ao carregar arquivos de imagem em um arquivo SWF, que inclui animao com script. Os arquivos de origem de exemplo, gallery_tree.fla e gallery_tween.fla, podem ser encontrados na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Efeito de imagem panormica com cdigo


Com o ActionScript, fcil utilizar grandes imagens panormicas em seus documentos do Flash. Isso til quando a imagem no cabe no Stage ou quando voc deseja criar um efeito de animao, movendo um clipe de filme em panormica de um lado a outro do Stage. Por exemplo, se voc possui uma grande imagem panormica maior do que o tamanho do Stage e no deseja reduzir as dimenses da imagem ou aumentar as dimenses do Stage, poder criar um clipe de filme que funcionar como uma mscara para a imagem maior. O procedimento a seguir demonstra como mascarar um clipe de filme dinamicamente e usar o manipulador de eventos onEnterFrame para animar uma imagem atrs da mscara.

506

Animao, filtros e desenhos

Para mover uma instncia em panormica no Stage usando cdigo:


1. 2.

Crie um novo documento do Flash chamado pan.fla. Altere a taxa de quadros do documento para 24 qps no inspetor Properties. A animao ficar muito mais suave se voc usar uma taxa de quadros mais alta, por exemplo, 24 qps.

3.

Selecione o Frame 1 da Timeline e adicione o cdigo a seguir ao painel Actions:


System.security.allowDomain("http://www.helpexamples.com/"); // inicializar variveis var direction:Number = -1; var speed:Number = 5; // criar clipe para carregar uma imagem nele this.createEmptyMovieClip("img_mc", 10); // criar um clipe para usar como mscara this.createEmptyMovieClip("mask_mc", 20); // usar a API de desenho para desenhar/criar uma mscara with (mask_mc) { beginFill(0xFF0000, 0); moveTo(0, 0); lineTo(300, 0); lineTo(300, 100); lineTo(0, 100); lineTo(0, 0); endFill(); } var mcl_obj:Object = new Object(); mcl_obj.onLoadInit = function(target_mc:MovieClip) { // definir a mscara do clipe de filme de destino como mask_mc target_mc.setMask(mask_mc); target_mc.onEnterFrame = function() { target_mc._x += speed * direction; // se target_mc estiver em uma borda, inverta a direo da animao if ((target_mc._x <= -(target_mc._width-mask_mc._width)) || (target_mc._x >= 0)) { direction *= -1; } }; }; var my_mcl:MovieClipLoader = new MovieClipLoader(); my_mcl.addListener(mcl_obj); my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc);

Scripts de animao com o ActionScript 2.0

507

A primeira seo de cdigo neste exemplo define duas variveis: direction e speed. A varivel direction controla se a imagem mascarada rolar da esquerda para a direita (1) ou da direita para a esquerda (-1). A varivel speed controla quantos pixels so movidos cada vez que o manipulador de eventos onEnterFrame chamado. Nmeros maiores fazem a animao mover-se mais rapidamente, embora ela seja exibida com um pouco menos de suavidade. A prxima seo de cdigo cria dois clipes de filme vazios: img_mc e mask_mc. Um retngulo de 300 X 100 pixels desenhado dentro do clipe de filme mark_mc usando a API de desenho. Em seguida, um novo objeto (mcl_obj) criado e ser usado como ouvinte para uma instncia MovieClipLoader criada no bloco de cdigo final. Esse objeto define um ouvinte de eventos para o evento onLoadInit, mascara a imagem carregada dinamicamente e configura a animao de rolagem. Quando a imagem estiver na borda esquerda ou direita da mscara, a animao ser invertida. O bloco de cdigo final define uma instncia MovieClipLoader, especifica o objeto ouvinte criado anteriormente e comea a carregar a imagem JPEG no clipe de filme img_mc.
4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. A imagem carregada e animada em um movimento panormico (de um lado para o outro). Ela mascarada durante a execuo. Para ver a imagem original, voc poder exibila on-line (http://www.helpexamples.com/flash/images/image1.jpg).

Sobre cache de bitmap, rolagem e desempenho


O Flash Player 8 introduz o recurso de cache de bitmap, que ajuda a melhorar o desempenho de clipes de filme imutveis nos aplicativos. Quando voc define a propriedade MovieClip.cacheAsBitmap ou Button.cacheAsBitmap como true, o Flash Player armazena em cache uma representao de bitmap interna da instncia de boto ou de clipe de filme. Isso pode melhorar o desempenho de clipes de filme que contm contedo vetorial complexo. Todos os dados vetoriais de um clipe de filme com bitmap armazenado em cache so desenhados no bitmap, e no no Stage principal.
N OT A 508

O bitmap copiado para o Stage principal como pixels no esticados e no girados, encaixados nos limites dos pixels mais prximos. Os pixels so mapeados de um para um com o objeto pai. Se os limites do bitmap forem alterados, o bitmap ser recriado, e no esticado.

Animao, filtros e desenhos

Para obter informaes detalhadas sobre como armazenar em cache instncias de botes ou de clipes de filme, consulte as prximas sees no Captulo 11, Trabalhando com clipes de filme:

Sobre o armazenamento em cache e a rolagem de clipes de filme com o ActionScript na pgina 389 Armazenando um clipe de filme em cache na pgina 393 Definindo o plano de fundo de um clipe de filme na pgina 396

ideal usar a propriedade cacheAsBitmap com clipes de filme que possuem, na maioria, contedo esttico e que no so dimensionados e girados com freqncia. O uso dessa propriedade com esses clipes de filme poder resultar em aumento de desempenho quando o clipe de filme for convertido (quando sua posio x e y for alterada). Para obter informaes detalhadas sobre quando usar esse recurso, consulte Quando ativar o armazenamento em cache na pgina 391. H um arquivo de origem de exemplo, cacheBitmap.fla, que mostra como o cache de bitmap pode ser aplicado a uma instncia. O arquivo est localizado na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\CacheBitmap. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/CacheBitmap.

Tambm h um arquivo de origem de exemplo, flashtype.fla, que mostra como aplicar cache de bitmap a um texto de rolagem. O arquivo est localizado na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\FlashType. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/FlashType.

Sobre as classes Tween e TransitionManager


Ao instalar o Flash Basic 8 ou Flash Professional 8, voc tambm instala duas classes poderosas: as classes Tween e TransitionManager. Esta seo descreve como usar essas classes com clipes de filme e componentes do Macromedia V2 (includos no Flash MX 2004 e no Flash 8) para adicionar animao facilmente aos arquivos SWF.

Sobre as classes Tween e TransitionManager

509

Se voc criar uma apresentao de slides ou aplicativo de formulrio com o Flash Professional 8 (somente ActionScript 2.0), pode selecionar comportamentos que adicionam diferentes tipos de transio entre slides, semelhante ao que feito em apresentaes do PowerPoint. Voc adiciona essa funcionalidade a um aplicativo de tela usando as classes Tween e TransitionManager, que geram um ActionScript que anima as telas dependendo do comportamento escolhido. Voc tambm pode usar essas classes fora de documentos com base em tela, no Flash Basic 8 ou no Flash Professional 8. Por exemplo, voc pode usar as classes com o conjunto de componentes da verso 2 da Arquitetura de Componentes Macromedia ou com clipes de filme. Se desejar alterar a animao de um componente ComboBox (Caixa de combinao), voc poder usar a classe TransitionManager para adicionar um pouco de atenuao na abertura do menu. A atenuao refere-se acelerao ou desacelerao gradual durante uma animao, o que confere um aspecto mais realista s animaes. Voc tambm pode usar as classes Tween e TransitionManager, em vez de criar interpolaes de movimento na timeline ou escrever um cdigo personalizado, para criar um sistema prprio de menu animado.
NO TA

As classes Tween e TransitionManager esto disponveis somente no ActionScript 2.0, mas esto disponveis no Flash Basic 8 e no Flash Professional 8.

Para obter informaes sobre cada mtodo e propriedade da classe Tween, consulte o Chapter 51, Tween class em Components Language Reference (Referncia da linguagem de componentes). Para obter informaes sobre cada mtodo e propriedade da classe TransitionManager, consulte o Chapter 48, TransitionManager class em Components Language Reference. Para obter informaes sobre como trabalhar com pacotes, consulte Trabalhando com pacotes de filtro na pgina 528. H um arquivo de origem de exemplo, tweenProgress.fla, que usa essas classes para adicionar animao com script. Esse arquivo est localizado na pasta Samples do seu disco rgido. No Windows, navegue at unidade de inicializao\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 informaes sobre as classes Tween e TransitionManager , consulte os seguintes tpicos: Adicionando interpolaes e transies a um arquivo no Flash Professional 8 (somente Flash Professional 8) na pgina 511 Animando com as classes TransitionManager e Tween na pgina 513 Sobre classes e mtodos de atenuao na pgina 516

510

Animao, filtros e desenhos

Sobre a classe Tween na pgina 517 Usando a classe Tween na pgina 518 Combinando as classes TransitionManager e Tween na pgina 524

Adicionando interpolaes e transies a um arquivo no Flash Professional 8 (somente Flash Professional 8)


N OT A

Esta seo descreve a adio de interpolaes e transies a uma apresentao de slides do Flash Professional para demonstrar sua aparncia para os usurios desse programa. Entretanto, voc poder adicionar transies e interpolaes aos aplicativos Flash Basic 8 (ou Flash Professional 8) se utilizar cdigo. As sees a seguir incluem exemplos que mostram esse procedimento.

As classes Tween e TransitionManager foram criadas para permitir a adio de animaes a partes do arquivo SWF usando um ActionScript simples. O ambiente de criao do Flash contm comportamentos que permitem usar classes predefinidas para transies em um aplicativo com base em tela. Para criar uma apresentao de slides ou aplicativo de formulrio, voc pode selecionar comportamentos que adicionam diferentes tipos de transio entre os slides. Antes de voc comear a usar essas transies com clipes de filme em Flash, veja o que eles fazem ao usar um aplicativo com base em tela.
Para exibir o ActionScript que cria uma transio em uma apresentao de slides:
1.

Selecione File (Arquivo) > New (Novo) para criar uma nova apresentao de slides no Flash Professional 8. Selecione Flash Slide Presentation (Apresentao de slides do Flash) na guia General (Geral) e clique em OK. Selecione Window (Janela) > Behaviors (Comportamentos) para abrir o painel Behaviors (Comportamentos). Clique em Add Behavior (+) (Adicionar comportamento). Selecione Screen (Tela) > Transition (Transio) no menu pop-up para abrir a caixa de dilogo Transitions (Transies). Selecione a transio Zoom. Digite 1 na caixa de texto Duration (Durao). Selecione Bounce (Salto) no menu pop-up Easing (Atenuao).

2.

3.

4. 5.

6. 7. 8.

Sobre as classes Tween e TransitionManager

511

9.

Clique em OK para aplicar as configuraes e fechar a caixa de dilogo. Esse procedimento adiciona cerca de 15 linhas de ActionScript diretamente no slide. O trecho de cdigo a seguir mostra o cdigo de transio relevante:
mx.transitions.TransitionManager.start(eventObj.target, {type:mx.transitions.Zoom, direction:0, duration:1, easing:mx.transitions.easing.Bounce.easeOut, param1:empty, param2:empty});

Esse cdigo chama a classe TransitionManager e, em seguida, aplica a transio Zoom com o mtodo de atenuao mx.transitions.easing.Bounce.easeOut especificado. Nesse caso, a transio aplicada ao slide selecionado. Para aplicar esse efeito a um clipe de filme, voc pode modificar o ActionScript e us-lo nas animaes Flash. fcil modificar o cdigo para trabalhar com um smbolo de clipe de filme: altere o primeiro parmetro de eventObj.target para o nome de instncia do clipe de filme desejado. O Flash inclui dez transies, que voc pode personalizar usando os mtodos de atenuao e diversos parmetros opcionais. Lembre-se de que a atenuao refere-se acelerao ou desacelerao gradual durante uma animao, o que confere um aspecto mais realista s animaes. Por exemplo, a velocidade de uma bola pode aumentar gradualmente no incio de uma animao, mas pode diminuir antes de parar completamente no final. H muitas equaes para essa acelerao e essa desacelerao, que alteram a animao da atenuao de acordo. A tabela a seguir descreve as transies includas no Flash Basic 8 (usando cdigo) e no Flash Professional 8 (usando cdigo ou comportamentos):
Transio
Iris Wipe Pixel Dissolve Blinds Fade Fly Zoom Squeeze

Descrio
Revela a tela ou o clipe de filme usando uma mscara de animao de uma forma que aumenta o zoom. Revela a tela ou o clipe de filme usando uma mscara de animao de uma forma que move-se horizontalmente. Mascara a tela ou o clipe de filme usando retngulos que desaparecem e aparecem. Revela a prxima tela ou clipe de filme usando retngulos que desaparecem ou aparecem. Faz aparecer e ou desaparecer gradualmente a tela ou o clipe de filme. Desliza na tela ou no clipe de filme a partir de uma direo. Aproxima ou diminui o zoom da tela ou do clipe de filme. Dimensiona horizontalmente ou verticalmente a tela ou o clipe de filme atual.

512

Animao, filtros e desenhos

Transio
Rotate Photo

Descrio
Gira a tela ou o clipe de filme atual. Faz a tela ou o clipe de filme aparecer como em um flash fotogrfico.

Cada transio possui personalizaes ligeiramente diferentes que voc pode aplicar animao. A caixa de dilogo Transitions permite que voc visualize uma animao de exemplo antes de usar o efeito no slide ou no formulrio.
D IC A

Para visualizar o modo de funcionamento de cada transio com os diferentes mtodos nas classes de atenuao, voc pode clicar duas vezes em Transition.swf na pasta unidade de inicializao\Program Files\Macromedia\Flash 8\idioma\First Run\Behaviors\ ou Macintosh HD:Applications:Macromedia Flash 8:First Run:Behaviors: para abrir o arquivo SWF no exibidor independente.

Animando com as classes TransitionManager e Tween


Voc pode usar as classes TransitionManager e Tween no Flash Basic 8 e no Flash Professional 8 para adicionar animaes a clipes de filme, componentes e quadros com o ActionScript. Se no usar a classe TransitionManager ou Tween, voc dever escrever um cdigo personalizado para animar clipes de filme ou modificar o nvel de transparncia (alfa) e as coordenadas (local). Se voc desejar adicionar atenuao animao, o ActionScript (e a matemtica) poder se tornar rapidamente complexo. No entanto, se desejar alterar a atenuao em uma determinada animao e usar essas classes predefinidas, selecione uma classe diferente em vez de tentar descobrir as novas equaes matemticas necessrias para criar uma animao suave. O procedimento a seguir anima um clipe de filme de modo que aumente o zoom no Stage usando a classe TransitionManager.
Para animar um clipe de filme usando a classe TransitionManager:
1. 2. 3. 4.

Selecione File > New e escolha Flash Document (Documento do Flash). Clique em OK para criar o novo arquivo FLA. Salve o arquivo FLA como zoom.fla. Selecione File (Arquivo) > Import (Importar)> Import to Stage (Importar para o palco) e selecione uma imagem no disco rgido a ser importada para o arquivo FLA. A imagem importada para o arquivo como bitmap, portanto, preciso convert-la manualmente em um smbolo de clipe de filme.

5.

Clique em Open (Abrir) para importar a imagem.

Sobre as classes Tween e TransitionManager

513

6.

Selecione a imagem importada no Stage e escolha Modify (Modificar) > Convert to Symbol (Converter em smbolo). Nomeie o smbolo como img1 e verifique se definiu o comportamento como Movie Clip (Clipe de filme). Por padro, o ponto de registro do smbolo est localizado no seu canto superior esquerdo. Clique em OK para converter a imagem bitmap em um clipe de filme. Ainda com a imagem selecionada, abra o inspetor Properties (Window (Janela) > Properties (Propriedades) > Properties (Propriedades)) e atribua o nome de instncia img1_mc ao clipe de filme. o Frame 1 da Timeline principal e adicione o seguinte ActionScript ao painel Actions:
mx.transitions.TransitionManager.start(img1_mc, {type:mx.transitions.Zoom, direction:0, duration:1, easing:mx.transitions.easing.Bounce.easeOut, param1:empty, param2:empty});
N OT A

7.

8. 9.

10. Selecione

Para obter informaes sobre como trabalhar com pacotes, consulte Trabalhando com pacotes de filtro na pgina 528.

11.

Selecione Control > Test Movie para testar a animao. A imagem cresce e produz um leve efeito de salto antes de retornar ao tamanho original. Se a animao se mover rpido demais, aumente sua durao (no trecho de cdigo anterior) de um para dois ou trs segundos (por exemplo, duration:3). Voc talvez perceba que a imagem fica ancorada no canto superior esquerdo e cresce em direo ao canto inferior direito. Isso diferente da visualizao vista na caixa de dilogo Transitions (Transies). facil criar animaes complexas usando as classes Tween e TransitionManager; alm disso, isso no exige a criao de interpolaes de forma ou de movimento na timeline. E, o que mais importante, voc no precisa escrever clculos matemticos complexos para criar mtodos de atenuao. Se voc desejar que as imagens aumentem o zoom a partir do centro em vez de ancorar em um canto, modifique o ponto de registro do smbolo ao converter a imagem de bitmap em smbolo.

Para aumentar o zoom de imagens a partir do centro:


1. 2.

Conclua as etapas descritas no procedimento anterior. Abra o arquivo zoom.fla e selecione File (Arquivo) > Save As (Salvar como) para salvar uma nova cpia do documento. Salve o arquivo como zoom2.fla.

514

Animao, filtros e desenhos

3.

Arraste uma cpia do smbolo do bitmap do painel Library para o Stage ao lado do smbolo atual do clipe de filme. Ainda com a imagem de bitmap selecionada no Stage, pressione F8 para converter o smbolo em um clipe de filme. Nomeie o smbolo como img2. Na caixa de dilogo Convert to Symbol, clique no centro da grade de 3x3 para definir o centro do bitmap como ponto de registro e clique em OK.

4.

5.

6.

Selecione o novo clipe de filme no Stage e atribua a ele o nome de instncia img2_mc usando o inspetor Properties. Selecione o Frame 1 da Timeline principal e adicione o seguinte ActionScript ao cdigo existente:
mx.transitions.TransitionManager.start(img2_mc, {type:mx.transitions.Zoom, direction:mx.transitions.Transition.IN, duration:1, easing:mx.transitions.easing.Bounce.easeOut});

7.

8.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar a animao. O segundo clipe de filme cresce a partir do centro do smbolo, e no a partir do canto.
NO T A

Algumas transies so sensveis ao local definido para o ponto de registro. Alterar o ponto de registro pode afetar consideravalmente a aparncia da animao em um arquivo SWF. Por exemplo, se o ponto de registro estiver localizado no canto superior esquerdo (padro) quando voc usar a transio Zoom, a transio ser iniciada a partir desse local.

Para obter informaes sobre cada mtodo e propriedade da classe Tween, consulte o Chapter 51, Tween class em Components Language Reference. Para obter informaes sobre cada mtodo 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 animao com script. Esse arquivo est localizado na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\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.

Sobre as classes Tween e TransitionManager

515

Sobre classes e mtodos de atenuao


Adicionando interpolaes e transies a um arquivo no Flash Professional 8 (somente Flash Professional 8) na pgina 511 descreve como usar a classe de atenuao Bounce para adicionar um efeito de salto ao clipe de filme. Alm da classe Bounce, o Flash 8 oferece mais cinco classes de atenuao, que esto descritas na tabela a seguir:
Transio
Back Bounce

Descrio
Estende a animao para alm do intervalo de transio em uma ponta ou nas duas uma vez para dar um efeito de transbordamento. Adiciona um efeito de salto dentro do intervalo de transio em uma ponta ou nas duas. O nmero de saltos refere-se durao: maior durao produz mais saltos. Adiciona um efeito de elstico que cai para fora do intervalo de transio em uma ponta ou nas duas. A quantidade de elasticidade no afetada pela durao. Adiciona movimentos mais lentos em uma ponta ou nas duas. Esse recurso permite adicionar um efeito de acelerao, um efeito de desacelerao ou ambos. Adiciona movimentos mais lentos em uma ponta ou nas duas. Esse efeito semelhante atenuao Regular, mas muito mais destacado. Adiciona um movimento igual do incio ao final sem efeitos, desacelerao ou acelerao. Essa transio tambm chamada de transio linear.

Elastic

Regular

Strong Nenhum

Cada uma dessas seis classes de atenuao possui trs mtodos de atenuao, que esto descritos na seguinte tabela:
Mtodo
easeIn easeOut easeInOut

Descrio
Produz o efeito de atenuao no incio da transio. Produz o efeito de atenuao no final da transio. Produz o efeito de atenuao no incio e no final da transio.

Para abrir essas classes no Flash ou no editor do ActionScript, navegue at a pasta Disco Rgido\Program Files\Macromedia\Flash 8\idioma\First Run\Classes\mx\transitions\easing\ no Windows (considerando uma instalao padro) ou HD Macintosh:Applications:Macromedia Flash 8:First Run:Classes:mx:transitions:easing.

516

Animao, filtros e desenhos

O procedimento sobre como aumentar o zoom de imagens em Animando com as classes TransitionManager e Tween na pgina 513 usou o mtodo e a classe de atenuao mx.transitions.easing.Bounce.easeOut. Na pasta localizada no seu disco rgido, o ActionScript refere-se ao mtodo easeOut() dentro da classe Bounce.as. Esse arquivo do ActionScript est localizado na pasta de atenuao. Para obter informaes sobre cada mtodo e propriedade da classe Tween, consulte o Chapter 51, Tween class em Components Language Reference. Para obter informaes sobre cada mtodo e propriedade da classe TransitionManager, consulte o Chapter 48, TransitionManager class em Components Language Reference.
D IC A

Para visualizar o modo de funcionamento de cada transio com os diferentes mtodos nas classes de atenuao, voc pode clicar duas vezes em Transition.swf em unidade de inicializao\Program Files\Macromedia\Flash 8\idioma\First Run\Behaviors\ ou HD Macintosh:Applications:Macromedia Flash 8:First Run:Behaviors: para abrir o arquivo SWF no exibidor independente.

H um arquivo de origem de exemplo, tweenProgress.fla, que usa essas classes para adicionar animao com script. Esse arquivo est localizado na pasta Samples do seu disco rgido. No Windows, navegue at unidade de inicializao\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.

Sobre a classe Tween


A classe Tween permite movimentar, redimensionar e fazer aparecer clipes de filme com facilidade no Stage. O construtor da classe mx.transitions.Tween possui os seguintes tipos e nomes de parmetro:
function Tween(obj, prop, func, begin, finish, duration, useSeconds) { // cdigo ... } obj

O objeto de clipe de filme de destino da instncia Tween.

prop Uma seqncia de caracteres que corresponde ao nome de uma propriedade em obj no qual os valores devem ser interpolados. func

O mtodo de atenuao que calcula um efeito de atenuao para os valores de propriedade do objeto interpolado. Um nmero que indica o valor inicial de prop (a propriedade do objeto de destino a ser interpolada).

begin

Sobre as classes Tween e TransitionManager

517

finish Um nmero que indica o valor final de prop (a propriedade do objeto de destino a ser interpolada). duration

Um nmero que indica a durao do movimento de interpolao. Se o nmero tiver sido omitido, a durao ser definida como infinity por padro.

useSeconds

Um valor booleano relacionado ao valor especificado no parmetro duration, que indica o uso de segundos se for true ou de quadros se for false.

Por exemplo, imagine que voc deseje mover um clipe de filme pelo Stage. Voc pode adicionar quadros-chave a uma timeline e inserir uma interpolao de forma ou de movimento entre eles, escrever um cdigo em um manipulador de eventos onEnterFrame ou usar a funo setInterval() para chamar uma funo em intervalos peridicos. Se usar a classe Tween, voc ter uma outra opo que permite modificar as propriedades _x e _y de um clipe de filme. Voc tambm pode adicionar os mtodos de atenuao descritos anteriormente. Para aproveitar a classe Tween, voc pode usar o ActionScript a seguir:
new mx.transitions.Tween(ball_mc, "_x", mx.transitions.easing.Elastic.easeOut, 0, 300, 3, true);

Esse trecho de ActionScript cria uma nova instncia 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 trs segundos, e o ActionScript aplica um mtodo de atenuao elstico. Isso significa que a bola estende-se alm 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 animao com script. Esse arquivo est localizado na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\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.

Usando a classe Tween


Se voc usar uma classe Tween em mais de um local no documento Flash, voc deve usar uma instruo import. Isso permite importar a classe e mtodos de atenuao, em vez de atribuir nomes de classe totalmente qualificados cada vez que us-la, conforme o procedimento a seguir:
Para importar e usar a classe Tween:
1. 2.

Crie um novo documento chamado easeTween.fla. Crie um clipe de filme no Stage.

518

Animao, filtros e desenhos

3.

Selecione a instncia de clipe de filme e digite ball_mc na caixa de texto Instance Name (Nome da instncia) do inspetor Properties. Selecione o Frame 1 da Timeline e adicione o seguinte cdigo ao painel Actions:
import mx.transitions.Tween; import mx.transitions.easing.*; new Tween(ball_mc, "_x", Elastic.easeOut, Stage.width, 0, 3, true);

4.

Este exemplo de cdigo usa duas instrues import. A primeira instruo importa somente a classe mx.transitions.Tween, e a segunda instruo import usa o atalho de caractere curinga (*) para importar cada uma das seis classes de atenuao usando uma nica linha de cdigo. A segunda instruo importa um pacote inteiro de classes.
NO T A

Para obter informaes sobre como trabalhar com pacotes, consulte Trabalhando com pacotes de filtro na pgina 528.

5.

Selecione Control > Test Movie para ver a animao.

A documentao do Flash define pacote como diretrios que contm um ou mais arquivos de classe e que residem em um diretrio especfico de caminho de classe. Neste caso, o pacote reside n pasta C:\Program Files\Macromedia\Flash 8\language\First Run\Classes\mx\transitions\easing (Windows) ou em HD:Applications:Macromedia Flash 8:First Run:Classes:mx:transitions:easing (Macintosh). Voc deve concordar que importar um pacote inteiro muito melhor do que ter que importar seis classes separadamente. Em vez de referir-se classe mx.transitions.Tween, o ActionScript refere-se diretamente classe Tween. Da mesma maneira, em vez de utilizar o nome de classe totalmente qualificado para as classes de atenuao, por exemplo, mx.transitions.easing.Elastic.easeOut, voc pode digitar Elastic.easeOut no cdigo ActionScript. Para obter mais informaes, consulte Trabalhando com pacotes de filtro na pgina 528. Usando um cdigo semelhante, voc define a propriedade _alpha para fazer aparecer e desaparecer instncias, em vez da propriedade _x, conforme mostrado no procedimento a seguir.
Para fazer aparecer e desaparecer instncias usando a classe Tween:
1. 2. 3.

Crie um novo documento chamado fadeTween.fla. Crie um clipe de filme no Stage. Selecione a instncia de clipe de filme e digite ball_mc na caixa de texto Instance Name do inspetor Properties. Selecione o Frame 1 da Timeline e adicione o seguinte cdigo ao painel Actions:
import mx.transitions.Tween; import mx.transitions.easing.*; new Tween(ball_mc, "_alpha", Strong.easeIn, 100, 0, 3, true);

4.

Sobre as classes Tween e TransitionManager

519

Em vez de mover-se pelo Stage, agora ball_mc alterado de 100% visvel a completamente transparente em trs segundos. Para que o smbolo desaparea mais rapidamente, altere o parmetro de durao de 3 para 1 ou 2.
5.

Selecione Control > Test Movie para ver a animao. Se voc alterar a taxa de quadros do documento, a animao aparentemente ser reproduzida com mais suavidade. Para obter informaes sobre animao e taxa de quadros, consulte Sobre animao e taxa de quadros na pgina 499.

Em vez de usar segundos, voc pode fazer desaparecer o smbolo usando quadros. Para definir a durao em quadros em vez de segundos na classe Tween, altere o parmetro final, useSeconds, de true para false. Quando voc define o parmetro para true, voc informa ao Flash que a durao especificada expressa em segundos. Se voc definir o parmetro para false, a durao o nmero de quadros que voc deseja usar para a interpolao. O procedimento a seguir mostra como definir uma interpolao para quadros, e no para segundos.
Para definir uma durao de quadros em vez de segundos:
1. 2. 3.

Crie um novo documento chamado framesTween.fla. Crie um clipe de filme no Stage. Selecione a instncia de clipe de filme e digite ball_mc na caixa de texto Instance Name do inspetor Properties. Selecione o Frame 1 da Timeline e adicione o seguinte cdigo ao painel Actions:
import mx.transitions.Tween; import mx.transitions.easing.*; new Tween(ball_mc, "_alpha", Strong.easeIn, 100, 0, 24, false);

4.

Este cdigo faz desaparecer a instncia ball_mc usando o mtodo de atenuao Strong.easeIn. Em vez de fazer desaparecer a instncia por trs segundos, ele o faz em 24 quadros.
5.

Selecione Control > Test Movie para ver a animao. Aguarde um momento at a instncia desaparecer pelos 24 quadros. Retorne ao ambiente de criao e abra o inspetor Properties. Altere a taxa de quadros do documento para 24 qps. Se aumentar a taxa de quadros de seu arquivo FLA, voc logo ver a instncia desaparecer. Para obter informaes sobre animao e taxa de quadros, consulte Sobre animao e taxa de quadros na pgina 499.

6. 7.

520

Animao, filtros e desenhos

Usar quadros em vez de segundos oferece mais flexibilidade, mas lembre-se de que a durao corresponde taxa de quadros do documento do Flash atual. Se o documento do Flash usar uma taxa de 12 quadros por segundo (qps), o trecho de cdigo anterior far desaparecer a instncia em dois segundos (24 quadros/12 qps = 2 segundos). No entanto, se a taxa de quadros for 24 qps, o mesmo cdigo far a instncia desaparecer em um segundo (24 quadros/ 24 qps = 1 segundo). Se usar quadros para medir durao, voc poder alterar a velocidade da animao significativamente ao alterar a taxa de quadros do documento, sem modificar o ActionScript. A classe Tween possui vrios outros recursos teis. Por exemplo, voc pode escrever um manipulador de eventos que seja ativado quando a animao for concluda, conforme mostrado no procedimento a seguir:
Para ativar o cdigo quando uma animao for concluda:
1. 2. 3.

Crie um novo documento chamado triggerTween.fla. Crie um clipe de filme no Stage. Selecione a instncia de clipe de filme e digite ball_mc na caixa de texto Instance Name (Nome da instncia) do inspetor Properties. Selecione o Frame 1 da Timeline e adicione o seguinte cdigo ao painel Actions:
import mx.transitions.Tween; import mx.transitions.easing.*; var tween_handler:Object = new Tween(ball_mc, "_alpha", Strong.easeIn, 100, 0, 3, true); tween_handler.onMotionFinished = function() { trace("onMotionFinished triggered"); };

4.

Se voc testar esse ActionScript no arquivo FLA, a mensagem onMotionFinished triggered (onMotionFinished ativado) ser exibida no painel Output (Sada) depois que ball_mc desaparecer do Stage.
5.

Selecione Control > Test Movie para ver a animao. Aguarde um momento at a instncia desaparecer. No final da interpolao, a mensagem ser exibida no painel Output.

Para obter mais informaes sobre funes, consulte o Captulo 7, Classes.

Sobre as classes Tween e TransitionManager

521

Sobre animaes contnuas com o mtodo continueTo()


A seo Usando a classe Tween na pgina 518 demonstra como usar a classe Tween em aplicativos. Entretanto, se desejar mover a bola aps a concluso da animao inicial, voc poder fazer isso pelo menos de duas maneiras. Uma das solues consiste em reanimar a bola usando o manipulador de eventos onMotionFinished. No entanto, a classe Tween oferece uma soluo mais simples: o mtodo continueTo(). O mtodo continueTo() instrui a animao interpolada a continuar a partir do valor atual para um novo valor, 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); };

Aps o trmino da interpolao inicial, o clipe de filme ball_mc interpola para a posio original de 0 pixels. O trecho de cdigo a seguir (editado para simplificar) mostra o prottipo da funo para o mtodo continueTo():
function continueTo(finish:Number, duration:Number):Void { /* omitted to save space. */ }

Somente dois argumentos passam para o mtodo continueTo(), em vez dos sete argumentos para o mtodo construtor Tween, conforme mostrado no trecho a seguir:
function Tween (obj, prop, func, begin, finish, duration, useSeconds) { /* omitted to save space. */ }

Os cinco parmetros que no so exigidos pelo mtodo continueTo() (obj, prop, func, begin e useSeconds) usam os argumentos definidos anteriomente na chamada para a classe Tween. Ao chamar o mtodo continueTo(), voc pressupe que os argumentos obj, prop, func (tipo de atenuao) e useSeconds sejam os mesmos usados na chamada anterior para a classe Tween. O mtodo 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); };

522

Animao, filtros e desenhos

Esse cdigo move a instncia ball_mc pelo eixo x- de 0 a 300 pixels em trs segundos. Aps o trmino da animao, o manipulador de eventos onMotionFinished ativado e chama o mtodo continueTo(). O mtodo continueTo() informa ao objeto de destino (ball_mc) para continuar a partir de sua posio atual, animar por trs segundos ao longo do eixo x at 0 pixels e usar o mesmo mtodo de atenuao. Os valores especificados na chamada para o mtodo construtor Tween so usados para qualquer parmetro que no seja definido no mtodo continueTo(). Se a durao no for especificada para o mtodo continueTo(), ele usar a durao especificada na chamada para o construtor Tween.

Criando animaes executadas continuamente


Voc pode criar uma animao que se movimente continuamente pelo eixo x sem parar. A classe Tween acomoda esse tipo de animao com o sugestivo mtodo chamado yoyo(). O mtodo yoyo() aguarda a execuo do manipulador de eventos onMotionFinished e, em seguida, inverte os parmetros begin e finish. A animao comea novamente, conforme o procedimento a seguir.
Para criar uma animao contnua:
1. 2.

Crie um novo documento do Flash chamado yoyo.fla. Abra o painel Actions e insira o seguinte ActionScript no Frame 1 da Timeline:
import mx.transitions.Tween; import mx.transitions.easing.*; 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 seo de cdigo comea importando a classe Tween, assim como cada classe do pacote de atenuao. A prxima seo de cdigo cria um novo clipe de filme com uma instncia denominada box_mc e desenha um retngulo de 20 pixels de largura e da mesma altura que o Stage.
3.

Adicione o seguinte ActionScript aps o cdigo criado na etapa anterior:


var box_tween:Tween = new Tween(box_mc, "_x", Regular.easeInOut, 0, Stage.width, 3, true); box_tween.onMotionFinished = function() {

Sobre as classes Tween e TransitionManager

523

box_tween.yoyo(); };

Esse cdigo cria uma nova interpolao 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 animao. A caixa animada da esquerda para a direita e ao contrrio. Se a animao no 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 no seja grave, voc no vai querer que o retngulo desaparea em um lado do Stage e, um segundo depois, reaparea para ser animado na outra direo. Para fazer ajustes, anime o retngulo a partir de 0 pixels at a largura do Stage menos a largura do clipe de filme box_mc.

5.

Para impedir que o retngulo desaparea, revise as linhas correspondentes de cdigo da etapa 3 para que correspondam ao cdigo a seguir:
var box_tween:Tween = new Tween(box_mc, "_x", Regular.easeInOut, 0, (Stage.width - box_mc._width), 3, true);

6.

Teste a animao novamente (Control > Test Movie). Agora, a caixa interrompe a atenuao antes de sair dos limites do Stage.

Combinando as classes TransitionManager e Tween


Voc pode gerar efeitos interessantes ao combinar as classes TransitionManager e Tween. Voc pode usar a classe TransitionManager para mover um clipe de filme no eixo x enquanto ajusta a mesma propriedade _alpha do clipe com a classe Tween. Cada classe pode usar um mtodo de atenuao diferente, ou seja, h muitas possibilidades de animao para objetos nos arquivos SWF. Voc pode tirar proveito dos mtodos continueTo() e yoyo() na classe Tween ou do manipulador de eventos onMotionFinished para criar um efeito exclusivo. possvel combinar as classes TransitionManager e Tween para animar um clipe de filme carregado dinamicamente e faz-lo aparecer no Stage depois de ser completamente carregado do servidor remoto, conforme o procedimento a seguir.
Para usar as classes TransitionManager e Tween em conjunto:
1. 2.

Crie um novo documento do Flash e salve o arquivo como combination.fla. Adicione o seguinte ActionScript no Frame 1 do Timeline:
import mx.transitions.*; import mx.transitions.easing.*; var mcl_obj:Object = new Object();

524

Animao, filtros e desenhos

mcl_obj.onLoadInit = function(target_mc:MovieClip) { new Tween(target_mc, "_alpha", Strong.easeIn, 0, 100, 2, true); TransitionManager.start(target_mc, {type:Fly, direction:Transition.IN, duration:3, easing:Elastic.easeInOut, startPoint:6}); }; var my_mcl:MovieClipLoader = new MovieClipLoader(); my_mcl.addListener(mcl_obj); my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", this.createEmptyMovieClip("img_mc", this.getNextHighestDepth()));

Esse cdigo separado em trs sees principais. A primeira seo de cdigo importa as classes dentro dos pacotes de transio assim como o pacote transitions.easing. Importe o pacote de transio inteiro nesse exemplo para no precisar informar o nome de classe totalmente qualificado para as classes Tween, TransitionManager ou a transio selecionada (nesse caso, Fly). Esse processo pode reduzir a quantidade de cdigo digitada e evitar possveis erros tipogrficos. A segunda seo do ActionScript cria um objeto ouvinte da instncia de classe MovieClipLoader, que voc cria na terceira seo do cdigo. Quando o clipe de filme de destino for carregado na instncia MovieClipLoader, o evento onLoadInit ativar e executar o bloco de cdigo, que chama as classes Tween e TransitionManager. Esse manipulador de eventos aparece no clipe de filme de destino porque voc modifica a propriedade _alpha na classe Tween e faz surgir o clipe de filme de destino no eixo x. A terceira seo do cdigo ActionScript cria uma instncia MovieClipLoader e aplica o objeto ouvinte criado anteriormente (de modo que a instncia do clipe de filme carregador de destino possa ouvir o evento onLoadInit). Em seguida, carregue a imagem JPEG de destino em um clipe de filme criado dinamicamente chamando o mtodo createEmptyMovieClip().
3.

Salve o documento e selecione Control > Test Movie para exibir a animao no ambiente de teste. Aps o download da imagem JPEG externa ser feito, a imagem aparece gradualmente e animada da direita para a esquerda no Stage.

Para obter informaes sobre como usar a classe Tween, consulte Usando a classe Tween na pgina 518. Para obter informaes sobre cada mtodo e propriedade da classe Tween, consulte o Chapter 51, Tween class em Components Language Reference. Para obter informaes sobre cada mtodo e propriedade da classe TransitionManager, consulte o Chapter 48, TransitionManager class em Components Language Reference.

Sobre as classes Tween e TransitionManager

525

H um arquivo de origem de exemplo, tweenProgress.fla, que usa essas classes para adicionar animao com script. Esse arquivo est localizado na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\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.

Usando efeitos de filtro


Os filtros so efeitos visuais que voc pode aplicar a objetos renderizados durante a execuo pelo Flash Player, como instncias de clipe de filme. Os filtros incluem sombreamento, embaamento, brilho, chanfro, brilho gradiente e chanfro gradiente. Tambm possvel usar um filtro de ajuste de cor que permita editar o brilho, o contraste, a saturao e o matiz de um clipe de filme. Voc pode aplicar filtros usando a interface de usurio do Flash no Flash Professional 8 ou usando ActionScript no Flash Basic 8 ou no Flash Professional 8. possvel aplicar cada um desses efeitos de filtro a clipes de filme, botes ou campos de texto usando a guia Filters (Filtros) no inspetor Properties ou o ActionScript. Se usar o ActionScript para aplicar os filtros a uma instncia, voc tambm poder usar um filtro de mapa de deslocamento (consulte Usando o filtro de mapa de deslocamento na pgina 556) ou um filtro de convoluo (consulte Usando o filtro de toro na pgina 554). Esses filtros so aplicados s definies vetoriais, o que no causa sobrecarga de armazenamento de uma imagem de bitmap no arquivo SWF. Voc tambm pode criar um ActionScript que permita modificar um filtro existente aplicado a um campo de texto, a um clipe de filme ou a um boto. O procedimento a seguir demonstra como usar um manipulador de eventos onEnterFrame para animar um efeito de filtro de brilho em um clipe de filme.
Para animar um efeito de filtro aplicado a uma instncia de clipe de filme:
1. 2.

Crie um novo documento do Flash e salve-o como animFilter.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
this.createEmptyMovieClip("box_mc", 10); box_mc.lineStyle(20, 0x000000); box_mc.beginFill(0x000000); box_mc.moveTo(0, 0); box_mc.lineTo(160, 0); box_mc.lineTo(160, 120); box_mc.lineTo(0, 120); box_mc.lineTo(0, 0); box_mc.endFill();

526

Animao, filtros e desenhos

box_mc._x = 100; box_mc._y = 100; box_mc.filters = [new flash.filters.GlowFilter()]; var dir:Number = 1; box_mc.blur = 10; box_mc.onEnterFrame = function() { box_mc.blur += dir; if ((box_mc.blur >= 30) || (box_mc.blur <= 10)) { dir *= -1; } var filter_array:Array = box_mc.filters; filter_array[0].blurX = box_mc.blur; filter_array[0].blurY = box_mc.blur; box_mc.filters = filter_array; };

Esse cdigo executa duas funcionalidades diferentes. A primeira seo cria e posiciona uma instncia de clipe de filme e, em seguida, desenha um retngulo preto arredondado no Stage. O segundo bloco de cdigo aplica um filtro de brilho ao retngulo no Stage e define um manipulador de eventos onEnterFrame, responsvel pela animao do efeito de filtro. O manipulador de eventos onEnterFrame anima o filtro de brilho entre um embaamento de 10 e 30 pixels e, quando a animao fica igual ou maior que 30 ou igual ou menor que 10, a direo dela inverte.
3.

Salve as alteraes no documento do Flash e selecione Control > Test Movie para testar o arquivo SWF.

Para obter mais informaes sobre como trabalhar com filtros em um aplicativo, consulte os seguintes tpicos:

Trabalhando com pacotes de filtro na pgina 528 Trabalhando com filtros, armazenamento em cache e a classe MovieClip na pgina 530 Sobre deteco de cliques e filtros de rotao, inclinao e dimensionamento na pgina 532 Aplicando filtros a instncias de objeto e instncias de BitmapData na pgina 532 Sobre manipulao de erros, desempenho e filtros na pgina 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 rgido.

No Windows, navegue at unidade de inicializao\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.

Usando efeitos de filtro

527

Trabalhando com pacotes de filtro


Os pacotes so diretrios que contm um ou mais arquivos de classe e residem em um diretrio especfico de caminho de classe. Por exemplo, o pacote flash.filters um diretrio no disco rgido que contm vrios arquivos de classe para cada tipo de filtro (como BevelFilter, BlurFilter, DropShadowFilter etc.) no Flash 8. Quando os arquivos de classe esto organizados dessa maneira, voc deve acessar as classes de uma maneira especfica. Voc importa a classe ou faz referncia a ela usando um nome totalmente qualificado.
NO TA 528

Para usar a instruo import, especifique ActionScript 2.0 e Flash Player 6 ou uma verso posterior na guia Flash da caixa de dilogo Publish Settings (Configuraes de publicao) do arquivo FLA.

A instruo import permite acessar classes sem que seja necessrio especificar seus nomes totalmente qualificados. Por exemplo, para usar a classe BlurFilter em um script, voc dever fazer referncia a ela pelo seu nome totalmente qualificado (flash.filters.BlurFilter) ou import-la. Se a importar, voc poder fazer referncia a ela pelo seu nome de classe (BlurFilter) em seu cdigo. O cdigo ActionScript a seguir demonstra as diferenas entre o uso da instruo import e o uso de nomes de classe totalmente qualificados. Se voc no importar a classe BlurFilter, o seu cdigo 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 cdigo, escrito com uma instruo import, permite acessar a classe BlurFilter usando o nome de classe em vez de fazer uma referncia contnua a ela com o nome totalmente qualificado. Isso pode reduzir a quantidade de cdigo digitada e evitar possveis erros de digitao:
// com importao import flash.filters.BlurFilter; var myBlur:BlurFilter = new BlurFilter(10, 10, 3);

Para importar vrias classes de um pacote (como BlurFilter, DropShadowFilter e GlowFilter), escolha uma das maneiras a seguir para importar cada classe. A primeira maneira usada para importar vrias classes consiste em importar cada uma delas usando uma instruo import separada, como mostra o trecho de cdigo a seguir:
import flash.filters.BlurFilter; import flash.filters.DropShadowFilter; import flash.filters.GlowFilter;

Animao, filtros e desenhos

A utilizao de instrues import individuais para cada classe de um pacote pode aumentar bastante o tempo de criao e resultar em erros de digitao. Para evitar a importao de arquivos de classe individuais, utilize um caractere curinga de importao, que importa todas as classes em um nvel especfico de um pacote. O ActionScript a seguir mostra um exemplo de como usar um caractere curinga de importao:
import flash.filters.*; // importa cada classe do pacote flash.filters

A instruo 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 referncia 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, faa referncia s classes desse pacote pelos seus nomes totalmente qualificados ou adicione uma instruo import ao outro quadro que importar as classes desse pacote. Ao usar as instrues import, lembre-se de que as classes somente so importadas para o nvel especificado. Por exemplo, se voc importar todas as classes do pacote mx.transitions, somente as classes do diretrio /transitions/ sero importadas, e no todas as classes dos subdiretrios (por exemplo, as classes do pacote mx.transitions.easing ).
DICA

Se voc importar uma classe, mas no a usar no script, ela no 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 includo 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 rgido. No Windows, navegue at unidade de inicializao\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.

Usando efeitos de filtro

529

Trabalhando com filtros, armazenamento em cache e a classe MovieClip


Se um clipe de filme tiver um filtro associado, ele ser marcado para fazer o seu prprio armazenamento em cache como um bitmap transparente quando o arquivo SWF for carregado. O Flash Player armazena em cache o clipe de filme como um bitmap durante a execuo, forando a propriedade cacheAsBitmap como true, contanto que o clipe de filme tenha, no mnimo, um filtro aplicado a ele. O bitmap armazenado em cache usado como imagem de origem para os efeitos de filtro. Geralmente, cada clipe de filme possui dois bitmaps: um bitmap equivale ao clipe de filme de origem sem filtro, e o segundo corresponde imagem final aps a filtragem. Se voc no alterar a aparncia do clipe de filme durante a execuo, a imagem final no precisar ser atualizada, o que ajudar a melhorar o desempenho.
MovieClip.filters.

Voc pode acessar os filtros aplicados a uma instncia chamando a propriedade Em seguida, um array retornado contendo cada objeto de filtro associado no momento instncia de clipe de filme. O prprio filtro possui um conjunto de propriedades exclusivas, por exemplo:

trace(my_mc.filters[0].angle); // 45.0 trace(my_mc.filters[0].distance); // 4

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 no uma referncia. Para modificar um filtro existente, possvel usar um cdigo semelhante ao do procedimento a seguir.
Para modificar as propriedades de um filtro aplicado a uma instncia de clipe de filme:
1. 2.

Crie um novo documento do Flash e salve-o como modifyFilter.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
this.createEmptyMovieClip("my_mc", 10); // desenhar quadrado with (my_mc) { beginFill(0xFF0000, 100); moveTo(0, 0); lineTo(100, 0); lineTo(100, 100); lineTo(0, 100); lineTo(0, 0); endFill(); } my_mc._x = 100;

530

Animao, filtros e desenhos

my_mc._y = 100; // usar valores padro de DropShadowFilter my_mc.filters = [new flash.filters.DropShadowFilter()]; trace(my_mc.filters[0].distance); // 4 var filter_array:Array = my_mc.filters; filter_array[0].distance = 10; my_mc.filters = filter_array; trace(my_mc.filters[0].distance); // 10

A primeira seo deste cdigo usa a API de desenho para criar um quadrado vermelho e posiciona a forma no Stage. A segunda seo do cdigo aplica um filtro de sombreamento ao quadrado. Em seguida, o cdigo cria um array temporrio 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 instncia de clipe de filme my_mc.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.
N OT A DICA

No momento, no h suporte disponvel para a rotao de qualquer filtro com base na rotao de seu respectivo pai ou para algum outro tipo de rotao. O filtro de embaamento sempre embaa perfeitamente na horizontal ou na vertical, independentemente da rotao ou da inclinao de qualquer item na rvore de objetos pai. O contedo filtrado possui as mesmas restries de tamanho do contedo cuja propriedade cacheAsBitmap esteja definida como true. Se o autor aumentar o zoom muito distante no arquivo SWF, os filtros no estaro mais visveis quando a representao de bitmap for maior que 2880 pixels em qualquer direo. Quando voc publicar arquivos SWF com filtros, convm desativar as opes do menu de zoom.

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 rgido.

No Windows, navegue at unidade de inicializao\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.

Usando efeitos de filtro

531

Sobre deteco de cliques e filtros de rotao, inclinao e dimensionamento


Nenhuma regio filtrada (um sombreamento, por exemplo) fora do retngulo da caixa delimitadora da instncia de clipe de filme considerada parte da superfcie para fins de deteco de cliques (determinando se uma instncia substitui ou faz interseo com outra). Como a deteco de cliques baseada em vetores, no possvel executar esse tipo de deteco no resultado de bitmap. Por exemplo, se voc aplicar um filtro de chanfro a uma instncia de boto, a deteco de cliques no estar disponvel na parte chanfrada da instncia. Os filtros no oferecem suporte a dimensionamento, rotao e inclinao; se a instncia for dimensionada (_xscale e _yscale no forem 100%), o efeito de filtro no ser dimensionado junto com ela. Isso significa que a forma original da instncia girada, dimensionada ou inclinada; entretanto, o filtro no gira, inclina nem dimensionado junto com ela. Voc pode animar uma instncia com um filtro para criar efeitos realistas ou aninhar instncias e usar a classe BitmapData para animar filtros a fim de atingir esse efeito.

Aplicando filtros a instncias de objeto e instncias de BitmapData


O uso de filtros depende da instncia de objeto qual voc aplicar o filtro. Use as diretrizes a seguir ao aplicar um filtro a uma instncia de objeto ou instncia BitmapData:

Para aplicar filtros a clipes de filme, campos de texto e botes durante a execuo, use a propriedade filters. A definio da propriedade filters de um objeto no modifica o objeto e pode ser desfeita desmarcando a propriedade. Para aplicar filtros a instncias de BitmapData, use o mtodo BitmapData.applyFilter(). A chamada de applyFilter() em um objeto BitmapData modifica esse objeto e no pode ser desfeita.
N O TA

(Somente Flash Professional 8) Voc tambm pode aplicar efeitos de filtro a imagens e vdeo durante a criao atravs da guia Filters (Filtros) no inspetor Properties (Propriedades).

532

Animao, filtros e desenhos

Sobre manipulao de erros, desempenho e filtros


Um dos problemas que ocorrem quando voc usa uma grande quantidade de filtros em um aplicativo a possibilidade de usar muita memria, o que pode causar prejuzo no desempenho do Flash Player. Como um clipe de filme com filtros anexados possui dois bitmaps de 32 bits, esses bitmaps podem fazer com que o seu aplicativo utilize muita memria no caso de vrios bitmaps. possvel que seja exibido um erro de falta de memria gerado pelo sistema operacional do computador. Em um computador moderno, esses erros devem ser raros, a menos que voc esteja usando muitos efeitos de filtro em um aplicativo (por exemplo, se houver milhares de bitmaps no Stage). Entretanto, se um erro de falta de memria for realmente exibido, ocorrer o seguinte:

O array de filtros ser ignorado. O clipe de filme ser desenhado com o renderizador vetorial comum. Nenhum bitmap armazenado em cache para o clipe de filme.

Aps a exibio de um erro de falta de memria, o clipe de filme nunca tentar usar um array de filtros ou um cache de bitmap. Outro fator que afeta o desempenho do exibidor o valor usado para o parmetro quality no caso de cada filtro aplicado. Valores mais altos exigem mais consumo de CPU e memria para renderizar o efeito, ao passo que a configurao do parmetro quality para um valor mais baixo exige menos recursos do computador. Portanto, evite usar um nmero excessivo de filtros e utilize uma configurao mais baixa para quality quando possvel.
A T E N O

Se um objeto de 100 X 100 pixels aumentar o zoom uma vez, ele usar quatro vezes a memria, pois as dimenses do contedo passaro 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 memria em comparao ao objeto original de 100 X 100 pixels. Sempre que voc usar filtros em um arquivo SWF, convm sempre desativar as opes do menu de zoom no menu de contexto desse arquivo.

Voc tambm poder encontrar erros se usar tipos de parmetro invlidos. Alguns parmetros de filtro tambm possuem um intervalo vlido especfico. Se voc definir um valor fora do intervalo vlido, o valor ser alterado para um valor vlido dentro do intervalo. Por exemplo, quality deve ser um valor de 1 a 3 para uma operao padro e somente pode ser definido para o intervalo de 0 a 15. Qualquer valor acima de 15 ser definido como 15.

Usando efeitos de filtro

533

Alm disso, alguns construtores fazem restries quanto ao tamanho dos arrays necessrios como parmetros de entrada. Se um filtro de convoluo ou um filtro de matriz de cores for criado com um array invlido (que no seja do tamanho adequado), o construtor no ter xito e o filtro no ser criado corretamente. Se o objeto de filtro for usado como entrada no array de filtros de um clipe de filme, ele ser ignorado.
DICA

Com um filtro de embaamento, utilize potncias de 2 para blurX e blurY (por exemplo, 2, 4, 8, 16 e 32), pois eles so calculados de forma mais rpida, alm de melhorar o desempenho em 20% a 30%.

Trabalhando com filtros usando ActionScript


O pacote flash.filters contm classes para os efeitos de filtro de bitmap, que so novidade no Flash Player 8. Os filtros permitem usar o ActionScript para aplicar efeitos visuais sofisticados, como embaamento, chanfro, brilho e sombreamento, s instncias de texto, clipe de filme e boto. Voc tambm pode usar a ferramenta de criao do Flash para aplicar efeitos de filtro a objetos, como texto, imagens e vdeo. O Flash possui nove efeitos de filtro, embora somente sete sejam acessveis atravs da interface de usurio no Flash Professional 8. Os filtros ConvolutionFilter e DisplacementMapFilter esto disponveis apenas atravs do cdigo ActionScript.
NO T A

Todos os filtros esto disponveis usando o ActionScript no Flash Basic 8 e no Flash Professional 8.

O procedimento a seguir carrega uma imagem PNG semitransparente e aplica um efeito GlowFilter parte no transparente da imagem.
Para aplicar filtros a imagens semitransparentes:
1. 2.

Crie um novo documento do Flash e salve-o como transparentImg.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.filters.GlowFilter; System.security.allowDomain("http://www.helpexamples.com"); var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip) { target_mc._x = (Stage.width - target_mc._width) / 2; target_mc._y = (Stage.height - target_mc._height) / 2; var glow:GlowFilter = new GlowFilter(); target_mc.filters = [glow]; }; this.createEmptyMovieClip("img_mc", 10);

534

Animao, filtros e desenhos

var img_mcl:MovieClipLoader = new MovieClipLoader(); img_mcl.addListener(mclListener); img_mcl.loadClip("http://www.helpexamples.com/flash/images/logo.png", img_mc);

Esse cdigo usa uma instncia do clipe de filme carregador para carregar uma imagem PNG semitransparente. Aps 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 (no transparente) da imagem PNG.

As sees a seguir descrevem como usar os filtros:


Usando o filtro de embaamento na pgina 536 Usando o filtro de sombreamento na pgina 538 Usando o filtro de brilho na pgina 542 Criando brilhos gradientes na pgina 543 Usando o filtro de chanfro na pgina 545 Aplicando um filtro de chanfro gradiente na pgina 551 Usando o filtro de matriz de cores na pgina 552 Usando o filtro de toro na pgina 554 Usando o filtro de mapa de deslocamento na pgina 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 rgido.

No Windows, navegue at unidade de inicializao\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.

Trabalhando com filtros usando ActionScript

535

Usando o filtro de embaamento


A classe BlurFilter permite aplicar um efeito visual de embaamento a vrios objetos no Flash. O efeito de embaamento suaviza os detalhes de uma imagem. possvel produzir embaamentos que variam desde a criao de uma aparncia suavemente desfocada at um embaamento gaussiano, ou seja, uma aparncia turva como se voc estivesse vendo a imagem atravs de um vidro semi-opaco. O filtro de embaamento baseia-se em um filtro de embaamento passa-caixa. O parmetro quality define o nmero de vezes para repetio do embaamento (trs passagens aproxima-se de um filtro de embaamento gaussiano).

Para obter mais informaes sobre esse filtro, consulte %{BlurFilter (flash.filters.BlurFilter)}% em ActionScript 2.0 Language Reference. O procedimento a seguir embaa uma imagem carregada dinamicamente com base na posio atual do ponteiro do mouse no Stage. Quanto mais distante o ponteiro estiver do centro do Stage, mais embaada estar a imagem.
Para embaar uma imagem com base na posio do ponteiro do mouse:
1. 2.

536

N OT A

O filtro de embaamento dimensiona somente quando voc aumenta o zoom no Stage.

Crie um novo documento do Flash e salve-o como dynamicblur.fla. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):
import flash.filters.BlurFilter; System.security.allowDomain("http://www.helpexamples.com"); var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip) { // Centralizar o clipe de filme target_mc no Stage. target_mc._x = (Stage.width - target_mc._width) / 2;

Animao, filtros e desenhos

target_mc._y = (Stage.height - target_mc._height) / 2; }; this.createEmptyMovieClip("img_mc", 10); var img_mcl:MovieClipLoader = new MovieClipLoader(); img_mcl.addListener(mclListener); img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc); var blur:BlurFilter = new BlurFilter(10, 10, 2); var mouseListener:Object = new Object(); mouseListener.onMouseMove = function():Void { /* Moving the pointer to the center of the Stage sets the blurX and blurY properties to 0%. */ blur.blurX = Math.abs(_xmouse - (Stage.width / 2)) / Stage.width * 2 * 255; blur.blurY = Math.abs(_ymouse - (Stage.height / 2)) / Stage.height * 2 * 255; img_mc.filters = [blur]; }; Mouse.addListener(mouseListener);

A primeira seo deste cdigo carrega e posiciona uma imagem carregada dinamicamente no Stage. A segunda seo define um ouvinte que chamado sempre que o mouse movido. Calcule a quantidade de embaamento horizontal e vertical com base na posio atual do ponteiro do mouse no Stage. Quanto mais distante voc mover o ponteiro do mouse do centro do Stage, mais embaamento ser aplicado instncia.
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 embaamento horizontal. A instncia ficar mais embaada quanto mais afastado estiver o ponteiro do centro horizontal do Stage. Mover o ponteiro ao longo do eixo y faz com que o embaamento vertical aumente ou diminua, dependendo da distncia do centro vertical do Stage.
DICA ATENO

Com um filtro de embaamento, utilize potncias de dois para blurX e blurY (por exemplo, 2, 4, 8, 16 e 32), pois eles so calculados de forma mais rpida, alm de melhorar o desempenho em 20% a 30%. A configurao de um valor de embaamento menor que 1,03125 desativa o efeito de embaamento.

Trabalhando com filtros usando ActionScript

537

Usando o filtro de sombreamento


A classe DropShadowFilter permite adicionar um sombreamento a vrios objetos no Flash. O algoritmo de sombreamento baseia-se no mesmo filtro de caixa usado pelo filtro de embaamento (consulte Usando o filtro de embaamento na pgina 536). Vrias opes esto disponveis para o estilo de sombreamento, inclusive sombreamento interno ou externo e modo vazado. Para obter mais informaes sobre o filtro de sombreamento, consulte %{DropShadowFilter (flash.filters.DropShadowFilter)}% em ActionScript 2.0 Language Reference. O procedimento a seguir usa a API de desenho para criar um quadrado no Stage. Quando voc move o ponteiro do mouse horizontalmente no Stage, este cdigo modifica a distncia do quadrado que contm o sombreamento, ao passo que ao mover o cursor verticalmente, voc modifica a quantidade de embaamento do sombreamento.
Para usar o filtro de sombreamento:
1. 2.

Crie um novo documento do Flash e salve-o como dropshadow.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
// import the filter classes import flash.filters.DropShadowFilter; // criar um clipe de filme chamado shapeClip this.createEmptyMovieClip("shapeClip", 1); // usar a API de desenho para criar uma forma with (shapeClip) { beginFill(0xFF0000, 100); moveTo(0, 0); lineTo(100, 0); lineTo(100, 100); lineTo(0, 100); lineTo(0, 0); endFill(); } // posicionar a forma shapeClip._x = 100; shapeClip._y = 100; // clicar no quadrado e aumentar a intensidade do sombreamento shapeClip.onPress = function():Void { dropShadow.strength++; shapeClip.filters = [dropShadow]; }; // criar um filtro var dropShadow:DropShadowFilter = new DropShadowFilter(4, 45, 0x000000, 0.4, 10, 10, 2, 3); var mouseListener:Object = new Object();

538

Animao, filtros e desenhos

// criar e aplicar um ouvinte que controla o filtro quando o mouse movimentado mouseListener.onMouseMove = function():Void { dropShadow.distance = (_xmouse / Stage.width) * 50 - 20; dropShadow.blurX = (_ymouse / Stage.height) * 10; dropShadow.blurY = dropShadow.blurX; shapeClip.filters = [dropShadow]; }; Mouse.addListener(mouseListener);

A primeira seo do cdigo cria um novo clipe de filme e utiliza a API de desenho para criar um quadrado vermelho. A segunda seo define um ouvinte de mouse que chamado sempre que o mouse movido. O ouvinte de mouse calcula a distncia do sombreamento e o nvel de embaamento com base nas posies 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 distncia do sombreamento e, em seguida, mova o ponteiro ao longo do eixo y para alterar a quantidade de embaamento aplicada instncia do clipe de filme.

Voc tambm pode criar sombreamentos e aplic-los a imagens carregadas dinamicamente. O procedimento a seguir demonstra como carregar uma imagem externa e aplicar um sombreamento que segue o ponteiro do mouse. Quanto mais distante voc mover o ponteiro do canto superior esquerdo da imagem, mais embaamento horizontal e vertical ser aplicado imagem.

Trabalhando com filtros usando ActionScript

539

Para criar um sombreamento que segue o ponteiro do mouse:


1. 2.

Crie um novo documento do Flash e salve-o como dropshadowmouse.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.filters.DropShadowFilter; System.security.allowDomain("http://www.helpexamples.com"); var dropShadow:DropShadowFilter = new DropShadowFilter(4, 45, 0x000000, 0.8, 10, 10, 2, 2); // Carregar e posicionar a imagem no Stage. 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; }; this.createEmptyMovieClip("img_mc", 10); var img_mcl:MovieClipLoader = new MovieClipLoader(); img_mcl.addListener(mclListener); img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc); // Recalcular a posio do sombreamento quando o mouse for movimentado. var mouseListener:Object = new Object(); mouseListener.onMouseMove = function():Void { var p1:Number = img_mc._y - _ymouse; var p2:Number = img_mc._x - _xmouse; var degrees:Number = Math.atan2(p1, p2) / (Math.PI / 180); dropShadow.distance = Math.sqrt(Math.pow(p1, 2) + Math.pow(p2, 2)) * 0.5; dropShadow.blurX = dropShadow.distance; dropShadow.blurY = dropShadow.blurX; dropShadow.angle = degrees - 180; img_mc.filters = [dropShadow]; }; Mouse.addListener(mouseListener);

A primeira seo deste cdigo define uma instncia de sombreamento, carrega uma imagem externa e reposiciona a imagem no centro do Stage. A segunda seo define um ouvinte de mouse que chamado sempre que o usurio movimenta o ponteiro do mouse no Stage. Sempre que o mouse for movido, o manipulador de eventos recalcular a distncia e o ngulo entre o ponteiro do mouse e o canto superior esquerdo da imagem. Com base nesse clculo, o filtro de sombreamento ser reaplicado ao clipe de filme.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.

540

Animao, filtros e desenhos

O sombreamento seguir o ponteiro do mouse quando voc executar o arquivo SWF. Quanto mais voc mover o ponteiro do mouse para perto do canto superior esquerdo da imagem no Stage, menor ser o efeito de embaamento aplicado imagem. Quanto mais para longe voc move o ponteiro do mouse do canto superior esquerdo da imagem, mais o efeito de sombreamento torna-se aparente. Voc tambm pode aplicar sombreamentos e aplic-los a imagens PNG semitransparentes carregadas dinamicamente. No procedimento a seguir, o filtro de sombreamento aplicado somente rea slida da imagem PNG, e no transparncia.
Para aplicar um sombreamento a uma imagem semitransparente:
1. 2.

Crie um novo documento do Flash e salve-o como dropshadowTransparent.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.filters.DropShadowFilter; System.security.allowDomain("http://www.helpexamples.com"); 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; var dropShadow:DropShadowFilter = new DropShadowFilter(4, 45, 0x000000, 0.5, 10, 10, 2, 3); target_mc.filters = [dropShadow]; }; mclListener.onLoadError = function(target_mc:MovieClip):Void { trace("unable to load image."); }; this.createEmptyMovieClip("logo_mc", 10); var my_mcl:MovieClipLoader = new MovieClipLoader(); my_mcl.addListener(mclListener); my_mcl.loadClip("http://www.helpexamples.com/flash/images/logo.png", logo_mc);

Este cdigo 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 (no transparente) da imagem ter o filtro aplicado.

Trabalhando com filtros usando ActionScript

541

Usando o filtro de brilho


A classe GlowFilter permite adicionar um efeito de brilho a vrios objetos no Flash. O algoritmo de brilho baseia-se no mesmo filtro de caixa usado pelo filtro de embaamento (consulte Usando o filtro de embaamento na pgina 536). Voc pode definir o estilo do brilho de vrias maneiras, inclusive o brilho interno ou externo e o modo vazado. O filtro de brilho semelhante ao filtro de sombreamento, com as propriedades distance e angle do sombreamento definidas como 0. Para obter mais informaes sobre o filtro de brilho, consulte {GlowFilter (flash.filters.GlowFilter)}% em ActionScript 2.0 Language Reference. O procedimento a seguir demonstra como aplicar um filtro de brilho a um clipe de filme criado dinamicamente no Stage. Mover o ponteiro do mouse no Stage altera o embaamento do clipe de filme e clicar na forma criada dinamicamente aumenta a intensidade do filtro.
Para usar o filtro de brilho:
1. 2.

Crie um novo documento do Flash e salve-o como glowfilter.fla. Adicione o ActionScript a seguir ao Frame 1 da Timeline:
import flash.filters.GlowFilter; 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);

542

Animao, filtros e desenhos

Este cdigo usa a API de desenho para criar um quadrado no Stage e aplica um filtro de brilho forma. Sempre que voc move o ponteiro do mouse ao longo do eixo x ou y, o embaamento do filtro calculado e aplicado forma.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. A quantidade de embaamento horizontal e vertical calculada pelas posies _xmouse e _ymouse atuais do ponteiro do mouse. A quantidade de embaamento horizontal e vertical diminui medida que voc move o ponteiro do mouse para o canto superior esquerdo do Stage. Inversamente, quantidade de embaamento horizontal e vertical aumenta medida que voc move o ponteiro do mouse para o canto inferior direito do Stage.

Criando brilhos gradientes


A classe GradientGlowFilter permite aplicar um efeito de brilho gradiente a vrios objetos no Flash. O brilho gradiente um brilho de aparncia realista com um gradiente de cores possvel de ser especificado. Voc pode aplicar um brilho gradiente ao redor da borda interna ou externa de um objeto ou sobre um objeto.

Para obter mais informaes sobre esse filtro, consulte %{GradientBevelFilter (flash.filters.GradientBevelFilter)}% em ActionScript 2.0 Language Reference. O procedimento a seguir usa a API de desenho para criar um quadrado no Stage e, em seguida, aplica um filtro de brilho gradiente forma. Clicar no quadrado do Stage aumenta a intensidade do filtro, ao passo que mover o ponteiro do mouse horizontal ou verticalmente modifica a quantidade de embaamento ao longo do eixo x ou y.
Para aplicar um filtro de brilho gradiente:
1.

Crie um novo documento do Flash e salve-o como loadvarsText.fla.

Trabalhando com filtros usando ActionScript

543

2.

Adicione o seguinte ActionScript ao Frame 1 da Timeline:


import flash.filters.GradientGlowFilter; // criar uma nova instncia shapeClip var shapeClip:MovieClip = this.createEmptyMovieClip("shapeClip", 10); // usar a API de desenho para criar uma forma with (shapeClip) { beginFill(0xFF0000, 100); moveTo(0, 0); lineTo(100, 0); lineTo(100, 100); lineTo(0, 100); lineTo(0, 0); endFill(); } // 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"); // definir um ouvinte de mouse, ouvir dois eventos var mouseListener:Object = new Object(); mouseListener.onMouseDown = function():Void { gradientGlow.strength++; shapeClip.filters = [gradientGlow]; }; mouseListener.onMouseMove = function():Void { gradientGlow.blurX = (_xmouse / Stage.width) * 255; gradientGlow.blurY = (_ymouse / Stage.height) * 255; shapeClip.filters = [gradientGlow]; }; Mouse.addListener(mouseListener);

O cdigo anterior dividido em trs sees. A primeira seo do cdigo usa a API de desenho para criar um quadrado e posiciona a forma no Stage. A segunda seo define uma nova instncia de filtro de brilho gradiente, que cria um brilho variando de vermelho a preto. A terceira seo 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.

544

Animao, filtros e desenhos

O embaamento do filtro de brilho gradiente aumenta e diminui de intensidade quando voc move o ponteiro do mouse no Stage. Clique no boto esquerdo do mouse para aumentar a intensidade do brilho.

Usando o filtro de chanfro


A classe BevelFilter permite adicionar um efeito de chanfro a vrios objetos no Flash. O efeito de chanfro aplica uma aparncia tridimensional aos objetos. Voc pode personalizar a aparncia do chanfro usando diferentes cores de sombreamento e de realce, a quantidade de embaamento no chanfro, o ngulo do chanfro, a posio do chanfro e o efeito vazado.

Para obter mais informaes sobre esse filtro, consulte %{BevelFilter (flash.filters.BevelFilter)}% em ActionScript 2.0 Language Reference. O procedimento a seguir usa a API de desenho para criar um quadrado e adiciona um chanfro forma.
Para usar o filtro de chanfro:
1. 2.

Crie um novo documento do Flash e salve-o como bevel.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.filters.BevelFilter; // definir um filtro de chanfro var bevel:BevelFilter = new BevelFilter(4, 45, 0xFFFFFF, 1, 0xCC0000, 1, 10, 10, 2, 3); // criar uma nova instncia shapeClip var shapeClip:MovieClip = this.createEmptyMovieClip("shapeClip", 1); // usar a API de desenho para criar uma forma with (shapeClip) { beginFill(0xFF0000, 100);

Trabalhando com filtros usando ActionScript

545

moveTo(0, 0); lineTo(100, 0); lineTo(100, 100); lineTo(0, 100); lineTo(0, 0); endFill(); } // posicionar a forma no Stage shapeClip._x = 100; shapeClip._y = 100; // clicar no mouse para aumentar a intensidade shapeClip.onPress = function():Void { bevel.strength += 2; shapeClip.filters = [bevel]; }; // definir um ouvinte para modificar o filtro quando o ponteiro for movido var mouseListener:Object = new Object(); mouseListener.onMouseMove = function():Void { bevel.distance = (_xmouse / Stage.width) * 10; bevel.blurX = (_ymouse / Stage.height) * 10; bevel.blurY = bevel.blurX; shapeClip.filters = [bevel]; }; Mouse.addListener(mouseListener);

A primeira seo do cdigo define uma instncia 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 aparncia mais alta e legvel ao chanfro. A segunda seo define um ouvinte de mouse, que modifica a distncia e o embaamento do chanfro com base na posio 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 distncia 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 embaamento horizontal e vertical.

546

Animao, filtros e desenhos

Sobre o filtro de chanfro gradiente


O filtro de chanfro gradiente aplicado a um objeto, por exemplo, um retngulo, com as cores do gradiente distribudas por trs partes da forma: duas bordas de chanfro (um de realce e outro de sombreamento) e uma rea conhecida como preenchimento de base. Os diagramas a seguir ilustram o retngulo, com o tipo de chanfro definido como interno No retngulo esquerdo, as reas em cinza escuro correspondem s bordas do chanfro, e a rea em cinza claro representa o preenchimento de base. No retngulo direito, aplicado um chanfro gradiente em arco-ris, com um chanfro de quatro cores em cada borda.

As diferentes propriedades do filtro de chanfro gradiente controlam o modo de aplicao do filtro. As cores do chanfro gradiente so definidas no array de cores. A distribuio real de cores em cada parte do retngulo determinada pelo array de propores. A propriedade distance determina a distncia de deslocamento ou a distncia em pixels a ser aplicada borda de chanfro em relao ao objeto. As propriedades blurX e blurY controlam a nitidez das cores no chanfro; os valores mais altos tornam o chanfro efetivamente mais largo e suave, ao passo que os valores mais baixos o tornam mais fino e ntido. A propriedade angle equivale fonte de luz terica que incide sobre o objeto, causando um efeito de realce e sombreamento em suas bordas. A propriedade strength controla a distribuio das cores: um valor de intensidade mais baixo obscurece as cores, como pode ser visto no exemplo, enquanto um valor mais alto torna os nmeros externos no array mais ntidos, forando um menor realce das cores intermedirias no array. Finalmente, as propriedades knockout e type determinam como e onde o filtro de chanfro ser aplicado ao objeto inteiro: se o filtro vazar o objeto e onde ele ser posicionado.

Trabalhando com filtros usando ActionScript

547

Um dos conceitos mais complicados no que se refere aplicao ao filtro de chanfro gradiente consiste na distribuio de cores. Para compreender o modo de distribuio das cores em um chanfro gradiente, pense primeiro nas cores que deseja usar em seu chanfro gradiente. Como um chanfro simples aplica os conceitos j compreendidos sobre cor de realce e cor de sombreamento, voc pode aplicar os mesmos conceitos para compreender o filtro de chanfro gradiente: h um gradiente de realce e um gradiente de sombreamento. O realce aparece no canto superior esquerdo, e o sombreamento, no canto inferior direito. H quatro cores no realce e quatro no sombreamento. Entretanto, necessrio adicionar outra cor (a cor do preenchimento de base), que aparecer na interseo das bordas do realce e do sombreamento. O array contm nove cores, conforme ilustrado no diagrama anterior. O nmero de cores no array determina o nmero de elementos no array de valores alfa e de propores. O primeiro item no array de cores corresponde ao primeiro item no array de valores alfa e no array de propores e assim por diante. Por haver nove cores, tambm h nove valores no array de valores alfa e nove no array de propores. Os valores alfa definem o valor de transparncia alfa das cores. Os valores de proporo no array de propores pode variar de 0 a 255 pixels. O valor intermedirio 128, que o valor do preenchimento de base. Na maioria das utilizaes, para voc obter o efeito de chanfro desejado, atribua os valores de proporo conforme o modo a seguir, usando o exemplo das nove cores:

As quatro primeiras cores variam de 0 a 127 e aumentam de valor, de modo que cada valor seja maior ou igual ao anterior. Essa a primeira borda de chanfro, ou seja, nosso realce. A quinta cor (intermediria) corresponde ao preenchimento de base, definida como 128. O valor de pixel 128 define o preenchimento de base, que aparecer fora da forma (e ao redor das bordas de chanfro) se type for definida como outer; ou dentro da fora, cobrindo efetivamente o preenchimento do prprio objeto se type for definida como inner. As quatro ltimas cores variam de 129 a 255 e aumentam de valor, de modo que cada valor seja maior ou igual ao anterior. Essa a segunda borda de chanfro, por exemplo, o seu sombreamento.

Se voc imaginar um gradiente como composto de listras de vrias cores, que se misturam umas s outras, cada valor de proporo definir o nmero de pixels da cor associada, definindo, portanto, a largura da listra de cor no gradiente. Se desejar uma distribuio igual de cores para cada borda:

Use um nmero mpar de cores, com a cor intermediria como o preenchimento de base. Distribua os valores entre 0 a 127 e 129 a 255 igualmente entre as cores.

548

Animao, filtros e desenhos

Ajuste o valor para alterar a largura de cada listra de cor no gradiente.


NO TA

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 aparecero no objeto. As cores so aplicadas na mesma ordem do array. O cdigo a seguir usa um quadrado rosa (criado com a API de desenho) e aplica um filtro de gradiente em arco-ris. As cores so, 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 proporo, atribumos 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 cdigo acima, um chanfro em arco-ris de nove cores aplicado a um clipe de filme de retngulo vermelho:

Trabalhando com filtros usando ActionScript

549

A linha tracejada mostra como os ngulos so determinados. A figura mostra como o ngulo de 225 percebido no filtro e tambm mostra cada valor de proporo para cada cor. Definir o ngulo a 225 indica que a primeira cor do array iniciar a 225, ou seja, no canto superior esquerdo (o realce). A linha pontilhada mostra onde so aplicados os gradientes de realce e de sombreamento. A cor do clipe de filme original rosa, mas a configurao do valor 128 para vermelho significa que o valor de 128 pixels o preenchimento de base e cobre o preenchimento do clipe de filme original. Entretanto, quando voc define a propriedade filters, o objeto original no alterado; basta voc desmarcar a propriedade filters para restaurar o preenchimento do clipe de filme original. As propriedades de todos os filtros afetam uns aos outros, portanto, se ajustar uma propriedade para alterar o efeito que estiver aplicando, possvel que voc tambm precise ajustar outra propriedade. Este o cdigo ActionScript completo para criar a figura anterior:
import flash.filters.GradientBevelFilter; // desenha uma forma quadrada preenchida this.createEmptyMovieClip("square_mc", this.getNextHighestDepth()); square_mc.beginFill(0xFF99CC); square_mc.moveTo(40, 40); square_mc.lineTo(200, 40); square_mc.lineTo(200, 200); square_mc.lineTo(40, 200); square_mc.lineTo(40, 40); square_mc.endFill(); /* GradientBevelFilter(distance:Number, angle:Number, colors:Array, alphas:Array, ratios:Array, blurX:Number, blurY:Number, strength:Number, quality:Number, type:String, knockout:Boolean) */ // criar cores, alfas e arrays de propores var colors:Array = [0x0000FF, 0x00FF00, 0x9900FF, 0xFFFF00, 0xFF0000, 0xFFFF00, 0x9900FF, 0x00FF00,0x000000];//blue, green, purple, yellow, red, yellow, purple, green, black var alphas:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1]; var ratios:Array = [16, 32, 64, 96, 128, 160, 192, 224, 235]; // criar o objeto de filtro var gradientBevel:GradientBevelFilter = new GradientBevelFilter(8, 225, colors, alphas, ratios, 16, 16, 1.3, 2, "inner", false); // aplicar o filtro ao clipe de filme quadrado square_mc.filters = [gradientBevel];

550

Animao, filtros e desenhos

Aplicando um filtro de chanfro gradiente


A classe GradientBevelFilter permite aplicar um efeito de chanfro gradiente aos objetos no Flash. O chanfro gradiente uma borda chanfrada aprimorada com cor de gradiente na parte externa ou interna do objeto ou sobre ele. As bordas chanfradas conferem uma aparncia tridimensional aos objetos, podendo ter resultados coloridos conforme mostrado na figura a seguir.

Para obter mais informaes sobre esse filtro, consulte %{GradientBevelFilter (flash.filters.GradientBevelFilter)}% em ActionScript 2.0 Language Reference. O procedimento a seguir usa a API de desenho para criar um quadrado no Stage e, em seguida, aplica um filtro de chanfro gradiente forma.
Para usar o filtro de chanfro gradiente:
1. 2.

Crie um novo documento do Flash e salve-o como gradientbevel.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.filters.GradientBevelFilter; var shapeClip:MovieClip = this.createEmptyMovieClip("shape_mc", 1); with (shapeClip) { beginFill(0xFF0000, 100); moveTo(0, 0); lineTo(200, 0); lineTo(200, 200); lineTo(0, 200); lineTo(0, 0); endFill(); } shapeClip._x = (Stage.width - shapeClip._width) / 2; shapeClip._y = (Stage.height - shapeClip._height) / 2; var colors:Array = new Array(0xFFFFFF, 0xCCCCCC, 0x000000); var alphas:Array = new Array(1, 0, 1); var ratios:Array = new Array(0, 128, 255);

Trabalhando com filtros usando ActionScript

551

var gradientBevel:GradientBevelFilter = new GradientBevelFilter(10, 45, colors, alphas, ratios, 4, 4, 5, 3); var mouseListener:Object = new Object(); mouseListener.onMouseDown = function() { gradientBevel.strength++; shapeClip.filters = [gradientBevel]; }; mouseListener.onMouseMove = function() { gradientBevel.blurX = (_xmouse / Stage.width) * 255; gradientBevel.blurY = (_ymouse / Stage.height) * 255; shapeClip.filters = [gradientBevel]; }; Mouse.addListener(mouseListener);

Este cdigo 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 embaamento ao longo dos eixos x e y aumentar ou diminuir. Quando voc mover o ponteiro para a esquerda do Stage, a quantidade de embaamento horizontal diminuir. Quando voc mov-lo para a direita do Stage, o embaamento aumentar. Da mesma forma, quanto maior o ponteiro no Stage, menor ser a quantidade de embaamento ao longo do eixo y.
3.

Selecione Control > Test Movie para testar o documento e exibir os resultados.

Usando o filtro de matriz de cores


A classe ColorMatrixFilter permite aplicar uma matriz de transformao 4 x 5 aos valores alfa e de cor RGBA (vermelho, verde, azul e alfa) de cada pixel na imagem de entrada a fim de produzir um resultado com um novo conjunto de valores alfa e de cor RGBA. Esse filtro permite matiz (cor ou tonalidade distinta), rotao, alteraes de saturao (intensidade de uma matiz especfica), luminncia (brilho ou intensidade de uma cor) para alfa, alm de vrios outros efeitos. Voc tambm pode animar esses filtros para criar efeitos em seus aplicativos.
NO T A

Voc pode aplicar o filtro de matriz de cores a bitmaps e instncias de clipes de filme.

Para obter mais informaes 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 instncia, conforme demonstrado no exemplo a seguir.
Para aumentar o brilho de um clipe de filme:
1. 2.

Crie um novo documento do Flash e salve-o como brightness.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:

552

Animao, filtros e desenhos

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 = [1, 0, 0, 0, 100, 0, 1, 0, 0, 100, 0, 0, 1, 0, 100, 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/image2.jpg", img_mc);

Este cdigo carrega dinamicamente uma imagem JPEG usando uma instncia MovieClipLoader. Depois que a imagem estiver completamente carregada e posicionada no Stage, o brilho da instncia ser definido como 100% usando um filtro de matriz de cores.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.

Voc tambm pode criar um efeito de brilho animado combinando a classe Tween com a classe ColorMatrixFilter, conforme mostrado no procedimento a seguir.
Para animar o nvel de brilho de uma instncia usando a classe Tween:
1. 2.

Crie um novo documento do Flash e salve-o como brightnesstween.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.filters.ColorMatrixFilter; import mx.transitions.Tween; import mx.transitions.easing.*; System.security.allowDomain("http://www.helpexamples.com"); var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip):Void { // centralizar a instncia de clipe de filme no Stage target_mc._x = (Stage.width - target_mc._width) / 2; target_mc._y = (Stage.height - target_mc._height) / 2; target_mc.watch("brightness", brightnessWatcher, target_mc); // animar o clipe de filme target_mc entre o brilho -100 e +100 var t:Object = new Tween(target_mc, "brightness", Elastic.easeOut, 100, -100, 3, true); t.onMotionFinished = function() { this.yoyo(); }; }; this.createEmptyMovieClip("img_mc", 10);

Trabalhando com filtros usando ActionScript

553

var img_mcl:MovieClipLoader = new MovieClipLoader(); img_mcl.addListener(mclListener); img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc); function brightnessWatcher(prop:String, oldVal:Number, newVal:Number, target_mc:MovieClip):Number { var brightness_array:Array = [1, 0, 0, 0, newVal, 0, 1, 0, 0, newVal, 0, 0, 1, 0, newVal, 0, 0, 0, 1, 0]; target_mc.filters = [new ColorMatrixFilter(brightness_array)]; return newVal; };

A primeira seo de cdigo 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 nvel de brilho da imagem. Para animar o brilho, use o mtodo 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 instncia target_mc, voc chamar a funo brightnessWatcher. A funo 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. Aps a concluso da interpolao de brilho, a animao ser invertida com o mtodo Tween.yoyo(), que resultar em uma animao constante da interpolao.

Usando o filtro de toro


A classe ConvolutionFilter aplica um efeito de filtro de convoluo de matriz. Uma convoluo combina pixels em uma imagem de origem especificada com pixels vizinhos a fim de produzir uma imagem. O uso do filtro de convoluo permite que voc obtenha uma ampla variedade de operaes de imagem, que inclui efeitos de embaamento, deteco de borda, nitidez, relevo e chanfro.
N OT A 554

Voc pode aplicar esse filtro a bitmaps e instncias de clipe de filme.

Animao, filtros e desenhos

Uma convoluo de matriz baseia-se em uma matriz n x m, que descreve como um determinado valor de pixel na imagem de entrada combinado com seus valores de pixels vizinhos para produzir um valor de pixel resultante. Cada pixel resultante determinado aplicando a matriz ao pixel de origem correspondente e a seus pixels vizinhos. Esse filtro somente est disponvel quando voc utiliza o ActionScript. Para obter mais informaes sobre esse filtro, consulte %{ConvolutionFilter (flash.filters.ConvolutionFilter)}% em ActionScript 2.0 Language Reference. O procedimento a seguir aplica o filtro de convoluo a uma imagem JPEG carregada dinamicamente.
Para usar o filtro de convoluo e modificar a cor de uma imagem:
1. 2.

Crie um novo documento do Flash e salve-o como convolution.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.filters.ConvolutionFilter; import flash.display.BitmapData; 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]; var mouseListener:Object = new Object(); mouseListener.onMouseMove = function():Void { convolution.divisor = (_xmouse / Stage.width) * 271; convolution.bias = (_ymouse / Stage.height) * 100; shape_mc.filters = [convolution]; }; Mouse.addListener(mouseListener);

O cdigo anterior dividido em trs sees. A primeira seo importa duas classes: ConvolutionFilter e BitmapData. A segunda seo 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 convoluo criado e aplicado ao clipe de filme shape_mc. A seo final do cdigo define um objeto ouvinte de mouse que modifica as propriedades divisor e bias do filtro de convoluo com base na posio atual do ponteiro do mouse e reaplica o filtro ao clipe de filme shape_mc.

Trabalhando com filtros usando ActionScript

555

3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. Mover o ponteiro do mouse ao longo do eixo x do Stage modifica o divisor do filtro, enquanto mov-lo ao longo do eixo y do Stage modifica o seu bias.

Usando o filtro de mapa de deslocamento


A classe DisplacementMapFilter usa os valores de pixel do objeto BitmapData especificado (chamado imagem de mapa de deslocamento) para deslocar uma instncia no Stage, por exemplo, uma instncia de clipe de filme ou uma instncia de dados de bitmap. Voc pode usar esse filtro para obter um efeito distorcido ou mosqueado em uma instncia especificada. Esse filtro somente est disponvel quando voc utiliza o ActionScript. Para obter mais informaes sobre esse filtro, consulte %{DisplacementMapFilter (flash.filters.DisplacementMapFilter)}% em ActionScript 2.0 Language Reference. O procedimento a seguir carrega uma imagem JPEG e aplica a ele um filtro de mapa de deslocamento, que faz com que a imagem tenha uma aparncia distorcida. Sempre que o usurio move o mouse, o mapa de deslocamento regenerado.
Para distorcer uma imagem com o filtro de mapa de deslocamento:
1. 2.

Crie um novo documento do Flash e salve-o como displacement.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.filters.DisplacementMapFilter; import flash.geom.Point; import flash.display.BitmapData; 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);

556

Animao, filtros e desenhos

imageLoader.loadClip("http://www.helpexamples.com/flash/images/ image1.jpg", shapeClip.holderClip); var mouseListener:Object = new Object(); mouseListener.onMouseMove = function():Void { perlinBmp.perlinNoise(shapeClip._width, shapeClip._height, 10, Math.round(Math.random() * 100000), false, true, 1, false); shapeClip.filters = [displacementMap]; }; Mouse.addListener(mouseListener);

Este cdigo carrega uma imagem JPEG inserindo-a no Stage. Depois que a imagem estiver completamente carregada, o cdigo criar uma instncia BitmapData e usar o mtodo perlinNoise() para preench-la com pixels colocados aleatoriamente. A instncia BitmapData passa para o filtro de mapa de deslocamento, que aplicado imagem fazendo com que ela tenha uma aparncia distorcida.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.

Mova o ponteiro do mouse no Stage para recriar um mapa de deslocamento, chamando o mtodo perlinNoise(), que altera a aparncia da imagem JPEG.

Manipulando efeitos de filtro com cdigo


O Flash Basic 8 e o Flash Professional 8 permitem adicionar dinamicamente diversos filtros a clipes de filme, campos de texto e botes no Stage, em vez de adicionar filtros no ambiente de criao do Flash Professional 8 (atravs da guia Filters no inspetor Properties). Ao adicionar e manipular filtros durante a reproduo, voc pode incluir sombreamentos, embaamentos e brilhos realistas que reajam aos movimentos do mouse ou aos eventos do usurio.

Manipulando efeitos de filtro com cdigo

557

Para obter exemplos de manipulao de filtros com cdigo, consulte os seguintes tpicos:

Ajustando propriedades de filtro na pgina 558 Animando um filtro com o ActionScript na pgina 559 Usando o mtodo clone() na pgina 560

Ajustando propriedades de filtro


O array de filtros aplicado a um objeto pode ser acessado atravs de chamadas do ActionScript padro com a propriedade MovieClip.filters. Esse processo retorna um array contendo cada objeto de filtro associado no momento ao MovieClip. Cada filtro possui um conjunto de propriedades exclusivo a ele. Os filtros podem ser acessados e modificados da mesma forma que um objeto de array, embora uma duplicata do objeto filters seja retornada, em vez de uma referncia, se voc desejar obter e definir os filtros com a propriedade filters. Definir a propriedade filters duplica a array de filtros passada e no a armazena como uma referncia. Quando a propriedade filters obtida, ela retorna uma nova cpia do array. Uma implicao negativa dessa abordagem que o cdigo a seguir no funciona:
// no funciona my_mc.filters[0].blurX = 20;

Como o trecho de cdigo anterior retorna uma cpia do array de filtros, o cdigo modifica a cpia, em vez do array original. Para modificar a propriedade blurX, voc precisaria usar o seguinte cdigo ActionScript:
// funciona var filterArray:Array = my_mc.filters; filterArray[0].blurX = 20; my_mc.filters = filterArray;

O procedimento a seguir embaa uma imagem com base na posio 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 embaamento so modificadas adequadamente.
Para ajustar as propriedades de filtro de um clipe de filme:
1. 2.

Crie um novo documento do Flash e salve-o como adjustfilter.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.filters.BlurFilter; this.createEmptyMovieClip("holder_mc", 10); holder_mc.createEmptyMovieClip("img_mc", 20); holder_mc.img_mc.loadMovie("http://www.helpexamples.com/flash/images/ image2.jpg");

558

Animao, filtros e desenhos

holder_mc.filters = [new BlurFilter(10, 10, 2)]; holder_mc._x = 75; holder_mc._y = 75; 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]; };

O cdigo anterior dividido em trs sees. A primeira seo importa a classe flash.filters.BlurFilter para que voc no precise usar o nome de classe totalmente qualificado quando se referir classe BlurFilter. A segunda seo de cdigo cria alguns clipes de filme e carrega uma imagem em um dos clipes aninhados. A terceira seo de cdigo responde ao movimento do mouse no Stage e ajusta o embaamento adequadamente.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. Mover o ponteiro do mouse ao longo do eixo x modifica a propriedade blurX do filtro de embaamento. Mover o ponteiro do mouse ao longo do eixo y modifica a propriedade blurY do filtro de embaamento. Quanto mais prximo estiver o ponteiro do mouse do canto superior esquerdo do Stage, menos embaamento ser aplicado ao clipe de filme.

Animando um filtro com o ActionScript


Voc pode usar o ActionScript, como a classe Tween, para animar filtros durante a execuo, o que permitir aplicar efeitos interessantes e animados aos seus aplicativos Flash. No exemplo a seguir, voc verifica como combinar BlurFilter com a classe Tween para criar um embaamento animado que modifica o filtro de embaamento em um valor entre 0 e 10 durante a execuo.
Para animar embaamentos com a classe Tween:
1. 2.

Crie um novo documento do Flash e salve-o como animatedfilter.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.filters.BlurFilter; import mx.transitions.Tween; import mx.transitions.easing.*; this.createEmptyMovieClip("holder_mc", 10); holder_mc.createEmptyMovieClip("img_mc", 20); var mclListener:Object = new Object();

Manipulando efeitos de filtro com cdigo

559

mclListener.onLoadInit = function(target_mc:MovieClip) { target_mc._x = (Stage.width - target_mc._width) / 2; target_mc._y = (Stage.height - target_mc._height) / 2; var myTween:Tween = new Tween(target_mc, "blur", Strong.easeInOut, 0, 20, 3, true); myTween.onMotionChanged = function() { target_mc._parent.filters = [new BlurFilter(target_mc.blur, target_mc.blur, 1)]; }; myTween.onMotionFinished = function() { myTween.yoyo(); } }; var my_mcl:MovieClipLoader = new MovieClipLoader(); my_mcl.addListener(mclListener); my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", holder_mc.img_mc);

O cdigo anterior dividido em trs sees. A primeira seo importa as classes e os pacotes necessrios. A segunda seo cria um clipe de filme aninhado que usado para carregar uma imagem e aplicar filtros ao clipe de filme holder. A seo final do cdigo cria uma nova instncia MovieClipLoader e um ouvinte para o clipe de filme carregador. O objeto ouvinte define uma nica funo de manipulador de eventos, onLoadInit, que iniciada assim que a imagem carregada com xito e disponibilizada no Stage. Primeiro, a imagem reposicionada no centro do Stage; em seguida, um novo objeto Tween criado e anima o clipe de filme, aplicando um filtro de embaamento entre 0 e 10.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.

Usando o mtodo clone()


O mtodo clone() em cada classe de filtro retorna uma nova instncia de filtro com todas as mesmas propriedades da instncia de filtro original. Ao trabalhar com filtros, convm criar uma cpia de um filtro e, para isso, voc precisar duplicar o filtro usando o mtodo clone(). Se voc no usar esse mtodo para duplicar um filtro, o Flash criar uma referncia somente ao filtro original. Se ele criar uma referncia ao filtro original, qualquer alterao feita no filtro duplicado tambm modificar o objeto de filtro original. O procedimento a seguir cria uma nova instncia DropShadowFilter (greenDropShadow), chama o mtodo clone() para duplicar o filtro de sombreamento verde e salva um novo filtro como redDropShadow. O filtro clonado define uma nova cor de sombreamento e ambos os filtros so aplicados instncia de clipe de filme flower_mc localizada no Stage.

560

Animao, filtros e desenhos

Para usar o mtodo clone:


1. 2. 3.

Crie um novo documento do Flash e atribua o nome clone.fla a ele. Crie um clipe de filme no Stage. Selecione a instncia de clipe de filme e digite flower_mc na caixa de texto Instance Name do inspetor Properties. Selecione o Frame 1 da Timeline e adicione o seguinte cdigo ao painel Actions:
import flash.filters.DropShadowFilter; var greenDropShadow:DropShadowFilter = new DropShadowFilter(); greenDropShadow.color = 0x00FF00; // verde var redDropShadow:DropShadowFilter = greenDropShadow.clone(); redDropShadow.color = 0xFF0000; // vermelho flower_mc.filters = [greenDropShadow, redDropShadow];

4.

O cdigo anterior cria uma nova instncia do filtro de sombreamento e atribui o nome greenDropShadow a ele. O objeto de sombreamento verde duplicado com o mtodo DropShadowFilter.clone() e cria um novo objeto de filtro denominado redDropShadow. Os filtros de sombreamento verde e vermelho so aplicados instncia de clipe de filme flower_mc no Stage. Se voc no tiver chamado o mtodo clone(), os dois sombreamentos sero exibidos em vermelho. O motivo dessa aparncia que a configurao da propriedade redDropShadow.color altera os objetos de sombreamento vermelho e verde, pois o sombreamento vermelho contm uma referncia 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 so aplicados instncia flower_mc.

Para obter mais informaes sobre o mtodo clone(), consulte %{clone (mtodo DropShadowFilter.clone)}% em ActionScript 2.0 Language Reference. Para obter informaes relacionadas, consulte tambm o mtodo clone() de qualquer classe de filtro.

Criando bitmaps com a classe BitmapData


A classe BitmapData permite criar imagens de bitmap opacas ou transparentes, dimensionadas de forma arbitrria e manipul-las de vrias maneiras durante a execuo. Ao manipular uma instncia BitmapData diretamente com o ActionScript, voc poder criar imagens bastante complexas sem precisar redesenhar constantemente o contedo a partir de dados vetorias no Flash Player. Os mtodos da classe BitmapData oferecem suporte a vrios efeitos no disponveis atravs da guia Filters na rea de trabalho do Flash.

Criando bitmaps com a classe BitmapData

561

Um objeto BitmapData contm um array de dados de pixel. Esses dados podem representar um bitmap totalmente opaco ou um bitmap transparente contendo dados de um canal alfa. Qualquer um dos tipos de objeto BitmapData armazenado como um buffer de inteiros de 32 bits. Cada inteiro de 32 bits determina as propriedades de um nico pixel no bitmap. Cada inteiro de 32 bits uma combinao de quatro valores de canal de 8 bits (de 0 a 255) que descrevem a transparncia alfa e os valores vermelho, verde e azul (RGBA) do pixel. Para obter informaes sobre como trabalhar com pacotes, consulte Trabalhando com pacotes de filtro na pgina 528. H um arquivo de origem de exemplo, BitmapData.fla, que usa a classe BitmapData para manipular uma imagem. O arquivo est localizado na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\BitmapData. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/BitmapData.

O procedimento a seguir carrega dinamicamente uma imagem JPEG no Stage e usa a classe BitmapData para criar um efeito de rudo, semelhante ao rudo esttico que voc v na televiso. O efeito de rudo redesenhado com um padro aleatrio a cada 100 milissegundos (1/10 de segundo). Mover o ponteiro do mouse ao longo dos eixos x e y afeta o volume de rudo esttico desenhado em cada intervalo.
Para criar um efeito de rudo com a classe BitmapData:
1. 2.

Crie um novo documento do Flash e salve-o como noise.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import flash.display.BitmapData; this.createTextField("status_txt", 90, 0, 0, 100, 20); status_txt.selectable = false; status_txt.background = 0xFFFFFF; status_txt.autoSize = "left"; function onMouseMove() { status_txt._x = _xmouse; status_txt._y = _ymouse-20; updateAfterEvent(); } this.createEmptyMovieClip("img_mc", 10); img_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg"); var noiseBmp:BitmapData = new BitmapData(Stage.width, Stage.height, true); this.attachBitmap(noiseBmp, 20); setInterval(updateNoise, 100); var grayScale:Boolean = true; function updateNoise():Void { var low:Number = 30 * _xmouse / Stage.width;

562

Animao, filtros e desenhos

var high:Number = 200 * _ymouse / Stage.height; status_txt.text = "low:" + Math.round(low) + ", high:" + Math.round(high); noiseBmp.noise(Math.round(Math.random() * 100000), low, high, 8, true); }

Este cdigo cria um campo de texto com o nome de instncia status_txt, que segue o ponteiro do mouse e exibe os valores atuais dos parmetros high e low para o mtodo noise(). A funo setInterval() altera o efeito de rudo, que atualizado a cada 100 milissegundos (1/10 de segundo), chamando continuamente a funo updateNoise(). Os parmetros high e low para o mtodo noise() so determinados calculando a posio 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 parmetrolow, enquanto mov-lo ao longo do eixo y afeta o parmetrohigh.

A classe BitmapData permite distorcer uma imagem carregada dinamicamente usando uma combinao de um efeito do mtodo perlinNoise() com um filtro de mapa de deslocamento. O procedimento a seguir mostra o seguinte.
Para aplicar um filtro de mapa de deslocamento a uma imagem:
1. 2.

Crie um novo documento do Flash e salve-o como displacement.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
// Importar classes. import flash.filters.DisplacementMapFilter; import flash.display.BitmapData; import flash.geom.Point; // Criar um clipe e um clipe aninhado. var shapeClip:MovieClip = this.createEmptyMovieClip("shapeClip", 1); shapeClip.createEmptyMovieClip("holderClip", 1); // Carregar JPEG. var imageLoader:MovieClipLoader = new MovieClipLoader(); imageLoader.loadClip("http://www.helpexamples.com/flash/images/ image4.jpg", shapeClip.holderClip); // Criar uma instncia BitmapData. var perlinBmp:BitmapData = new BitmapData(Stage.width, Stage.height); perlinBmp.perlinNoise(Stage.width, Stage.height, 10, Math.round(Math.random() * 100000), false, true, 1, false); // Criar e aplicar o filtro de mapa de deslocamento. var displacementMap:DisplacementMapFilter = new DisplacementMapFilter(perlinBmp, new Point(0, 0), 1, 1, 100, 100, "color", 1); shapeClip.filters = [displacementMap]; // Criar e aplicar um ouvinte. var mouseListener:Object = new Object();

Criando bitmaps com a classe BitmapData

563

mouseListener.onMouseMove = function():Void { perlinBmp.perlinNoise(Stage.width, Stage.height, 10, Math.round(Math.random() * 100000), false, true, 1, false); shapeClip.filters = [displacementMap]; } Mouse.addListener(mouseListener);

Esse exemplo de cdigo consiste em cinco sees lgicas. A primeira seo importa as classes necessrias para o exemplo. O segundo bloco de cdigo cria um clipe de filme aninhado e carrega uma imagem JPEG a partir de um servidor remoto. O terceiro bloco de cdigo cria uma nova instncia BitmapData denominada perlinBmp, cujo tamanho igual s dimenses do Stage. A instncia perlinBmp contm os resultados de um efeito de rudo de Perlin e usada posteriormente como parmetro para o filtro de mapa de deslocamento. O quarto bloco de cdigo cria e aplica o efeito de filtro de mapa de deslocamento imagem carregada dinamicamente que foi criada anteriormente. O quinto e ltimo bloco de cdigo cria um ouvinte do mouse que gera novamente o rudo de Perlin usado pelo filtro de mapa de deslocamento sempre que o usurio 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 atravs da rea de trabalho do Flash (Flash Professional 8) ou do ActionScript (Flash Basic 8 e Flash Professional 8). Durante a execuo, vrios grficos so mesclados como uma forma. Por esse motivo, no possvel aplicar diferentes modos de mistura a diferentes smbolos grficos. Para obter mais informaes sobre como usar o ActionScript para aplicar modos de mistura, consulte Aplicando modos de mistura na pgina 565. Os modos de mistura envolvem a combinao 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 posio no resultado. A propriedade MovieClip.blendMode oferece suporte aos seguintes modos de mistura:
add

Normalmente usado para criar um efeito de dissoluo de luminosidade animado entre duas imagens. Normalmente usado para aplicar a transparncia do primeiro plano no fundo. Normalmente usado para sobrepor um tipo.

alpha darken

564

Animao, filtros e desenhos

difference erase

Normalmente usado para criar cores mais vibrantes.

Normalmente usado para remover (apagar) parte do fundo usando o alfa do primeiro Normalmente usado para criar efeitos de sombreado.

plano.
hardlight invert layer

Usado para inverter o fundo.

Usado para forar a criao de um buffer temporrio para a pr-composio de um clipe de filme especfico. Normalmente usado para sobrepor um tipo. Normalmente usado para criar efeitos de sombreamento e profundidade.

lighten multiply normal

Usado para especificar que os valores de pixel da imagem de mistura substituam os da imagem base. Normalmente usado para criar efeitos de sombreado. Normalmente usado para criar realces e reflexos de lentes.

overlay screen

subtract Normalmente usado para criar um efeito de dissoluo de escurido animado entre duas imagens.

Aplicando modos de mistura


O procedimento a seguir carrega uma imagem dinmica e permite aplicar diferentes modos de mistura imagem selecionando um modo de mistura em uma caixa de combinao no Stage.
Para aplicar diferentes modos de mistura a uma imagem:
1. 2.

Crie um novo documento do Flash e salve-o como blendmodes.fla. Arraste uma instncia do componente ComboBox para o Stage e atribua o nome blendMode_cb a ele. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
var blendMode_dp:Array = new Array(); blendMode_dp.push({data:"add", label:"add"}); blendMode_dp.push({data:"alpha", label:"alpha"}); blendMode_dp.push({data:"darken", label:"darken"}); blendMode_dp.push({data:"difference", label:"difference"}); blendMode_dp.push({data:"erase", label:"erase"}); blendMode_dp.push({data:"hardlight", label:"hardlight"}); blendMode_dp.push({data:"invert", label:"invert"}); blendMode_dp.push({data:"layer", label:"layer"}); blendMode_dp.push({data:"lighten", label:"lighten"}); blendMode_dp.push({data:"multiply", label:"multiply"}); blendMode_dp.push({data:"normal", label:"normal"}); blendMode_dp.push({data:"overlay", label:"overlay"});

3.

Modos de mistura

565

blendMode_dp.push({data:"screen", label:"screen"}); blendMode_dp.push({data:"subtract", label:"subtract"}); blendMode_cb.dataProvider = blendMode_dp; var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip) { var blendModeClip:MovieClip = target_mc.createEmptyMovieClip("blendModeType_mc", 20); with (blendModeClip) { beginFill(0x999999); moveTo(0, 0); lineTo(target_mc._width / 2, 0); lineTo(target_mc._width / 2, target_mc._height); lineTo(0, target_mc._height); lineTo(0, 0); endFill(); } target_mc._x = (Stage.width - target_mc._width) / 2; target_mc._y = (Stage.height - target_mc._height) / 2; blendModeClip.blendMode = blendMode_cb.value; }; this.createEmptyMovieClip("img_mc", 10); var img_mcl:MovieClipLoader = new MovieClipLoader(); img_mcl.addListener(mclListener); img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc); function cbListener(eventObj:Object):Void { img_mc.blendModeType_mc.blendMode = eventObj.target.value; } blendMode_cb.addEventListener("change", cbListener);

Este cdigo ActionScript preenche a caixa de combinao com cada tipo de modo de mistura, para que o usurio possa ver cada efeito na imagem carregada dinamicamente. Um objeto ouvinte criado e usado com uma instncia MovieClipLoader. O objeto ouvinte define um nico ouvinte de eventos, onLoadInit, que chamado depois que o download da imagem tiver sido concludo 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 instncia do ComboBox aplicado ao clipe de filme blendModeType_mc. O restante do cdigo configura a instncia MovieClipLoader, responsvel pelo carregamento da imagem especificada em um clipe de filme no Stage. Finalmente, um ouvinte definido para a instncia do ComboBox blendMode_cb, que aplica o modo de mistura selecionado sempre que um novo item escolhido na instncia do ComboBox.
4.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.

566

Animao, filtros e desenhos

Sobre a ordem de operao


A lista a seguir relaciona a ordem das operaes nas quais arrays de filtros, modos de mistura, transformaes de cores e camadas de mscara so anexados ou executados para uma instncia de clipe de filme:
1.

O bitmap do clipe de filme atualizado a partir do contedo vetorial (a propriedade cacheAsBitmap definida como true). Se voc usar o mtodo setMask() e a mscara tiver um cache de bitmap, o Flash executar uma mistura alfa entre as duas imagens. Em seguida, so aplicados filtros (embaamento, sombreamento, brilho etc.) Se voc usar a classe ColorTransform, a operao de transformao de classe ser executada e armazenada em cache como um resultado de bitmap. Se voc aplicar um modo de mistura, a mistura ser executada (atravs de um renderizador vetorial). Se voc aplicar camadas de mscara externas, elas executaro o mascaramento (atravs de um renderizador vetorial).

2.

3. 4.

5.

6.

Desenhando com o ActionScript


Voc pode usar mtodos da classe MovieClip para desenhar linhas e preenchimentos no Stage. Isso permite criar ferramentas de desenho para usurios e desenhar formas no arquivo SWF em resposta a eventos. Estes so os mtodos de desenho da classe MovieClip:

beginFill() beginGradientFill() clear() curveTo() endFill() lineTo() lineStyle() moveTo()

Voc pode usar os mtodos de desenho com qualquer clipe de filme. No entanto, se usar os mtodos de desenho com um clipe de filme criado no modo de criao, esses mtodos sero executados antes de o clipe ser desenhado. Ou seja, o contedo criado no modo de criao desenhado por cima do contedo desenhado com os mtodos de criao. possvel usar clipes de filme com mtodos de desenho como mscaras, porm, como em todas as mscaras de clipes de filme, os traos so ignorados.

Desenhando com o ActionScript

567

Para obter mais informaes sobre como desenhar com o ActionScript, consulte os seguintes tpicos:

Usando mtodos de desenho para desenhar linhas, curvas e formas na pgina 568 Desenhando formas especficas na pgina 570 Usando preenchimentos de gradiente complexos na pgina 573 Usando estilos de linha na pgina 574 Usando mtodos de API de desenho e scripts de animao na pgina 581

Voc pode localizar um arquivo de origem de exemplo, drawingapi.fla, na pasta Samples do seu disco rgido, que mostra como usar a API de desenho em um aplicativo Flash.

No Windows, navegue at unidade de inicializao\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.

Usando mtodos de desenho para desenhar linhas, curvas e formas


Voc pode usar a API de desenho do Flash para criar formas dinamicamente no Stage durante a execuo. Voc pode usar essas formas para mascarar um contedo dinamicamente, aplicar filtros a elas ou anim-las no Stage. Voc tambm pode usar a API de desenho para criar diversas ferramentas de desenho, que permitam aos usurios usar o mouse ou o teclado para desenhar formas no arquivo SWF.
Para desenhar uma linha:
1. 2.

Crie um novo documento do Flash e salve-o como line.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
this.createEmptyMovieClip("line_mc", 10); line_mc.lineStyle(1, 0x000000, 100); line_mc.moveTo(0, 0); line_mc.lineTo(200, 100); line_mc._x = 100; line_mc._y = 100;

Este cdigo desenha uma linha a partir de 0,0 no Stage at 200,100. Em seguida, as coordenadas _x e _y da linha so 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.

568

Animao, filtros e desenhos

Para desenhar uma forma mais complexa, continue chamando o mtodo MovieClip.lineTo() e desenhe um retngulo, um quadrado ou uma forma oval, conforme os procedimentos a seguir.
Para desenhar uma curva:
1. 2.

Crie um novo documento do Flash e salve-o como curve.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
this.createEmptyMovieClip("circle_mc", 1); with (circle_mc) { lineStyle(4, 0x000000, 100); beginFill(0xFF0000); moveTo(200, 300); curveTo(300, 300, 300, 200); curveTo(300, 100, 200, 100); curveTo(100, 100, 100, 200); curveTo(100, 300, 200, 300); endFill(); }

3.

Salve o documento do Flash e selecione Control > Test Movie para test-lo. Este cdigo usa a API de desenho para criar um crculo no Stage. A forma circular usa somente quatro chamadas para o mtodo MovieClip.curveTo() e, portanto, pode apresentar uma aparncia um pouco distorcida. Para obter outro exemplo que utilize a API de desenho para criar um crculo, consulte o procedimento sobre como criar um crculo em Desenhando formas especficas na pgina 570 no caso de um cdigo que usa oito chamadas para o mtodo MovieClip.curveTo() a fim de criar um crculo mais realista.

Para desenhar um tringulo:


1. 2.

Crie um novo documento do Flash e salve-o como triangle.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
this.createEmptyMovieClip("triangle_mc", 1);

Este cdigo utiliza o mtodo MovieClip.createEmptyMovieClip() para criar um clipe de filme vazio no Stage. O novo clipe de filme filho de um clipe de filme existente (neste caos, a timeline principal).
3.

Adicione o seguinte ActionScript ao Frame 1 da Timeline, aps o cdigo adicionado na etapa anterior:
with (triangle_mc) { lineStyle(5, 0xFF00FF, 100); moveTo(200, 200); lineTo(300, 300); lineTo(100, 300);

Desenhando com o ActionScript

569

lineTo(200, 200); }

Nesse cdigo, o clipe de filme vazio (triangle_mc) chama mtodos de desenho. O cdigo desenha um tringulo com linhas roxas de 5 pixels, sem preenchimento.
4.

Salve o documento do Flash e selecione Control > Test Movie para test-lo.

Para obter informaes detalhadas sobre esses mtodos, 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 rgido, que mostra como usar a API de desenho em um aplicativo Flash.

No Windows, navegue at unidade de inicializao\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.

Desenhando formas especficas


Esta seo mostra como criar alguns mtodos mais flexveis que possam ser usados para desenhar formas mais avanadas, como retngulos arredondados e crculos.
Para criar um retngulo:
1. 2.

Crie um novo documento do Flash e salve-o como rect.fla. Adicione o ActionScript a seguir ao Frame 1 da Timeline:
this.createEmptyMovieClip("rectangle_mc", 10); rectangle_mc._x = 100; rectangle_mc._y = 100; drawRectangle(rectangle_mc, 240, 180, 0x99FF00, 100); function drawRectangle(target_mc:MovieClip, boxWidth:Number, boxHeight:Number, fillColor:Number, fillAlpha:Number):Void { with (target_mc) { beginFill(fillColor, fillAlpha); moveTo(0, 0); lineTo(boxWidth, 0); lineTo(boxWidth, boxHeight); lineTo(0, boxHeight); lineTo(0, 0); endFill(); } }

3.

Salve o documento do Flash e selecione Control > Test Movie para test-lo.

570

Animao, filtros e desenhos

O Flash desenha um retngulo verde simples no Stage e o posiciona em 100,100. Para alterar as dimenses do retngulo, sua cor de preenchimento ou a transparncia, altere esses valores dentro da chamada para o mtodo drawRectangle(), em vez de modificar o contedo do mtodo MovieClip.beginFill(). Voc tambm pode criar um retngulo com cantos arredondados usando a API de desenho, conforme o procedimento a seguir.
Para criar um retngulo arredondado:
1. 2.

Crie um novo documento do Flash e salve-o como roundrect.fla. Adicione o ActionScript a seguir ao Frame 1 da Timeline:
this.createEmptyMovieClip("rectangle_mc", 10); rectangle_mc._x = 100; rectangle_mc._y = 100; drawRoundedRectangle(rectangle_mc, 240, 180, 20, 0x99FF00, 100); function drawRoundedRectangle(target_mc:MovieClip, boxWidth:Number, boxHeight:Number, cornerRadius:Number, fillColor:Number, fillAlpha:Number):Void { with (target_mc) { beginFill(fillColor, fillAlpha); moveTo(cornerRadius, 0); lineTo(boxWidth - cornerRadius, 0); curveTo(boxWidth, 0, boxWidth, cornerRadius); lineTo(boxWidth, cornerRadius); lineTo(boxWidth, boxHeight - cornerRadius); curveTo(boxWidth, boxHeight, boxWidth - cornerRadius, boxHeight); lineTo(boxWidth - cornerRadius, boxHeight); lineTo(cornerRadius, boxHeight); curveTo(0, boxHeight, 0, boxHeight - cornerRadius); lineTo(0, boxHeight - cornerRadius); lineTo(0, cornerRadius); curveTo(0, 0, cornerRadius, 0); lineTo(cornerRadius, 0); endFill(); } }

3.

Salve o documento do Flash e selecione Control > Test Movie para testar o documento. Um retngulo verde exibido no Stage com 240 pixels de largura, 180 pixels de altura e cantos arredondados de 20-pixels. Voc pode criar vrias instncias de retngulos arredondados criando novos clipes de filme com MovieClip.createEmptyMovieClip() e chamando sua funo drawRoundedRectangle() personalizada.

Voc pode criar um crculo perfeito usando a API de desenho, conforme o procedimento a seguir.

Desenhando com o ActionScript

571

Para criar um crculo:


1. 2.

Crie um novo documento do Flash e salve-o como circle2.fla. Adicione o ActionScript a seguir ao Frame 1 da Timeline:
this.createEmptyMovieClip("circle_mc", 10); circle_mc._x = 100; circle_mc._y = 100; drawCircle(circle_mc, 100, 0x99FF00, 100); function drawCircle(target_mc:MovieClip, radius:Number, fillColor:Number, fillAlpha:Number):Void { var x:Number = radius; var y:Number = radius; with (target_mc) { beginFill(fillColor, fillAlpha); moveTo(x + radius, y); curveTo(radius + x, Math.tan(Math.PI / 8) * radius + y, Math.sin(Math.PI / 4) * radius + x, Math.sin(Math.PI / 4) * radius + y); curveTo(Math.tan(Math.PI / 8) * radius + x, radius + y, x, radius + y); curveTo(-Math.tan(Math.PI / 8) * radius + x, radius+ y, Math.sin(Math.PI / 4) * radius + x, Math.sin(Math.PI / 4) * radius + y); curveTo(-radius + x, Math.tan(Math.PI / 8) * radius + y, -radius + x, y); curveTo(-radius + x, -Math.tan(Math.PI / 8) * radius + y, Math.sin(Math.PI / 4) * radius + x, -Math.sin(Math.PI / 4) * radius + y); curveTo(-Math.tan(Math.PI / 8) * radius + x, -radius + y, x, -radius + y); curveTo(Math.tan(Math.PI / 8) * radius + x, -radius + y, Math.sin(Math.PI / 4) * radius + x, -Math.sin(Math.PI / 4) * radius + y); curveTo(radius + x, -Math.tan(Math.PI / 8) * radius + y, radius + x, y); endFill(); } }

3.

Salve o documento do Flash e selecione Control > Test Movie para testar o arquivo SWF.

Este cdigo cria um crculo mais complexo e realista do que o exemplo de crculo anterior. Em vez de usar apenas quatro chamadas para o mtodo curveTo(), este exemplo usa oito chamadas para esse mtodo, o que confere uma aparncia muito mais arredondada forma. Voc pode usar a API de desenho para criar um tringulo, conforme o procedimento a seguir.
Para criar um tringulo elaborado:
1.

Crie um novo documento do Flash e salve-o como fancytriangle.fla.

572

Animao, filtros e desenhos

2.

Adicione o seguinte ActionScript ao Frame 1 da Timeline:


this.createEmptyMovieClip("triangle_mc", 10); triangle_mc._x = 100; triangle_mc._y = 100; drawTriangle(triangle_mc, 100, 0x99FF00, 100); function drawTriangle(target_mc:MovieClip, sideLength:Number, fillColor:Number, fillAlpha:Number):Void { var tHeight:Number = sideLength * Math.sqrt(3) / 2; with (target_mc) { beginFill(fillColor, fillAlpha); moveTo(sideLength / 2, 0); lineTo(sideLength, tHeight); lineTo(0, tHeight); lineTo(sideLength / 2, 0); endFill(); } }

A API de desenho cria um tringulo eqiltero no Stage e o preenche com a cor de preenchimento especificada e a quantidade de alfa (transparncia).
3.

Salve o documento do Flash e selecione Control > Test Movie para test-lo.

Voc pode localizar um arquivo de origem de exemplo, drawingapi.fla, na pasta Samples do seu disco rgido, que mostra como usar a API de desenho em um aplicativo Flash.

No Windows, navegue at unidade de inicializao\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.

Usando preenchimentos de gradiente complexos


A API de desenho do Flash oferece suporte a preenchimentos de gradiente, e tambm a preenchimentos slidos. O procedimento a seguir cria um novo clipe de filme no Stage, usa a API de desenho para criar um quadrado e, em seguida, preenche o quadrado com um gradiente radial vermelho e azul.
Para criar um gradiente complexo:
1. 2.

Crie um novo documento do Flash e salve-o como radialgradient.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
this.createEmptyMovieClip("gradient_mc", 10); var fillType:String = "radial"; var colors:Array = [0xFF0000, 0x0000FF]; var alphas:Array = [100, 100];

Desenhando com o ActionScript

573

var ratios:Array = [0, 0xFF]; var matrix:Object = {a:200, b:0, c:0, d:0, e:200, f:0, g:200, h:200, i:1}; var spreadMethod:String = "reflect"; var interpolationMethod:String = "linearRGB"; var focalPointRatio:Number = 0.9; with (gradient_mc) { beginGradientFill(fillType, colors, alphas, ratios, matrix, spreadMethod, interpolationMethod, focalPointRatio); moveTo(100, 100); lineTo(100, 300); lineTo(300, 300); lineTo(300, 100); lineTo(100, 100); endFill(); }

O cdigo ActionScript anterior usa a API de desenho para criar um quadrado no Stage e chama o mtodo 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.

Usando estilos de linha


A API de desenho do Flash permite especificar um estilo de linha usado pelo Flash para chamadas subseqentes para MovieClip.lineTo() e MovieClip.curveTo() at que voc chame MovieClip.lineStyle() com diferentes parmetros, da seguinte maneira:
lineStyle(thickness:Number, rgb:Number, alpha:Number, pixelHinting:Boolean, noScale:String, capsStyle:String, jointStyle:String, miterLimit:Number)

possvel chamar MovieClip.lineStyle() durante o desenho de um caminho a fim de especificar estilos diferentes para segmentos de linha distintos em um caminho. Para obter mais informaes sobre como usar o ActionScript para definir estilos de linha, consulte as seguintes sees:

Definindo estilos de trao e acabamento na pgina 574 Definindo parmetros de estilos de linha na pgina 576

Definindo estilos de trao e acabamento


O Flash 8 inclui vrias melhorias no desenho de linhas. Novos parmetros de linha foram adicionados ao Flash Player 8, como pixelHinting, noScale, capsStyle, jointStyle e miterLimit.

574

Animao, filtros e desenhos

O procedimento a seguir demonstra a diferena entre os trs novos estilos de acabamento no Flash Player 8: none, round e square.
Para definir estilos de acabamento com o ActionScript:
1. 2.

Crie um novo documento do Flash e salve-o como capstyle.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
// Configurar o clipe de filme de grade. this.createEmptyMovieClip("grid_mc", 50); grid_mc.lineStyle(0, 0x999999, 100); grid_mc.moveTo(50, 0); grid_mc.lineTo(50, Stage.height); grid_mc.moveTo(250, 0); grid_mc.lineTo(250, Stage.height); // linha 1 (capsStyle: round) this.createEmptyMovieClip("line1_mc", 10); with (line1_mc) { createTextField("label_txt", 1, 5, 10, 100, 20); label_txt.text = "round"; lineStyle(20, 0x99FF00, 100, true, "none", "round", "miter", 0.8); moveTo(0, 0); lineTo(200, 0); _x = 50; _y = 50; } // linha 2 (capsStyle: square) this.createEmptyMovieClip("line2_mc", 20); with (line2_mc) { createTextField("label_txt", 1, 5, 10, 100, 20); label_txt.text = "square"; lineStyle(20, 0x99FF00, 100, true, "none", "square", "miter", 0.8); moveTo(0, 0); lineTo(200, 0); _x = 50; _y = 150; } // linha 3 (capsStyle: none) this.createEmptyMovieClip("line3_mc", 30); with (line3_mc) { createTextField("label_txt", 1, 5, 10, 100, 20); label_txt.text = "none"; lineStyle(20, 0x99FF00, 100, true, "none", "none", "miter", 0.8); moveTo(0, 0); lineTo(200, 0); _x = 50; _y = 250; }

Desenhando com o ActionScript

575

O cdigo anterior cria dinamicamente quatro clipes de filme e utiliza a API de desenho para criar uma srie de linhas no Stage. O primeiro clipe de filme contm duas linhas verticais, uma em 50 pixels, e a outra em 250 pixels no eixo x. Os trs prximos clipes de filme desenham cada um uma linha verde no Stage e definem seu capsStyle como round, square ou none.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. Os diferentes estilos de acabamento aparecem no Stage durante a execuo.

Definindo parmetros de estilos de linha


Voc pode definir os parmetros dos estilos de linha para alterar a aparncia de seus traos. Utilize parmetros para alterar a espessura, a cor, o alfa, a escala e outros atributos do estilo de linha. Definindo a espessura da linha O parmetro thickness do mtodo MovieClip.lineStyle() permite especificar a espessura da linha desenhada em pontos como um nmero. Voc pode desenhar uma linha de qualquer espessura entre 0 e 255 pontos de largura, embora ao definir a espessura como 0, seja criada uma espessura fina, na qual o trao tem sempre 1 pixel, independentemente de o arquivo SWF ter sido ampliado ou redimensionado. O procedimento a seguir demonstra a diferena entre uma linha padro com espessura de 1 pixel e uma linha com espessura fina.
Para criar um trao fino:
1. 2.

Crie um novo documento do Flash e salve-o como hairline.fla. Adicione o seguinte ActionScript ao Frame 1 da sua Timeline:
this.createEmptyMovieClip("drawing_mc", 10); // criar uma linha vermelha, de espessura fina drawing_mc.lineStyle(0, 0xFF0000, 100); drawing_mc.moveTo(0, 0); drawing_mc.lineTo(200, 0); drawing_mc.lineTo(200, 100); // criar uma linha azul com espessura de 1 pixel drawing_mc.lineStyle(1, 0x0000FF, 100); drawing_mc.lineTo(0, 100); drawing_mc.lineTo(0, 0); drawing_mc._x = 100; drawing_mc._y = 100;

O cdigo 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.

576

Animao, filtros e desenhos

3.

Salve o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF. Inicialmente, as linhas vermelha e azul tm exatamente a mesma aparncia. Se voc clicar com o boto direito do mouse no arquivo SWF e selecionar Zoom In (Mais zoom) no menu de contexto, a linha vermelha sempre aparecer como uma linha de 1 pixel; entretanto, a linha azul ficar maior toda vez que voc aumentar o zoom no arquivo SWF.

Definido a cor da linha (rgb) O segundo parmetro no mtodo lineStyle(), rgb, permite controlar a cor do segmento de linha atual como um nmero. Por padro, o Flash desenha linhas pretas (#000000), embora voc possa especificar cores diferentes definindo um novo valor de cor hexadecimal com a sintaxe 0xRRGGBB. Nessa sintaxe, RR um valor de vermelho (entre 00 e FF), GG um valor de verde (00 a FF) e BB um valor de azul (00 a FF). Por exemplo, represente uma linha vermelha como 0xFF0000, uma linha verde como
0x00FF00, uma linha azul como 0x0000FF, uma linha roxa como 0xFF00FF (vermelho e azul),

uma linha branca como #FFFFFF, uma linha cinza como #999999 etc. Definindo o alfa da linha O terceiro parmetro no mtodo lineStyle(), alpha, permite controlar o nvel de transparncia (alfa) da linha. A transparncia um valor numrico entre 0 e 100, onde 0 representa uma linha completamente transparente, e 100 uma linha completamente opaca (visvel). Definindo a referncia do pixel de linha (pixelHinting) A referncia de pixel para o parmetro de traos, pixelHinting, significa que as ncoras de linhas e curvas so definidas em pixels completos. Os traos so desenhados em pixels completos para qualquer espessura de trao, o que significa que voc nunca ver uma linha vertical ou horizontal borrada. Defina o parmetro pixelHinting para um valor booleano (true ou false).

Desenhando com o ActionScript

577

Definido a escala de linha (noScale) Defina o parmetro noScale usando um valor de seqncia de caracteres que permite especificar um modo de dimensionamento para a linha. Voc pode usar um trao no dimensionvel no modo horizontal ou vertical, dimensionar a linha (normal) ou no usar dimensionamento.
DICA

Convm ativar o dimensionamento para elementos da interface de usurio quando os usurios aumentarem o zoom, mas no se um clipe de filme for dimensionado apenas verticalmente ou horizontalmente.

Voc pode usar um dos quatro modos diferentes para especificar quando deve ocorrer o dimensionamento e quando ele no deve ocorrer. Estes so os valores possveis para a propriedade noScale:
normal vertical horizontal none

Sempre dimensiona a espessura (padro). No dimensiona a espessura se o objeto for dimensionado verticalmente. No dimensiona a espessura se o objeto for dimensionado horizontalmente.

Nunca dimensiona a espessura.

Definindo acabamentos de linha (capsStyle) e unies (jointStyle) Voc pode definir trs tipos de estilos de acabamento para o parmetro capsStyle:

round

(padro)

square none

O procedimento a seguir demonstra as diferenas entre cada um dos trs estilos de acabamento. Uma representao visual de cada estilo exibido no Stage quando voc testa o arquivo SWF.
Para definir diferentes estilos de acabamento:
1. 2.

Crie um novo documento do Flash e salve-o como capsstyle2.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
var lineLength:Number = 100; // round this.createEmptyMovieClip("round_mc", 10); round_mc.lineStyle(20, 0xFF0000, 100, true, "none", "round"); round_mc.moveTo(0, 0); round_mc.lineTo(lineLength, 0); round_mc.lineStyle(0, 0x000000); round_mc.moveTo(0, 0); round_mc.lineTo(lineLength, 0); round_mc._x = 50;

578

Animao, filtros e desenhos

round_mc._y = 50; var lbl:TextField = round_mc.createTextField("label_txt", 10, 0, 10, lineLength, 20); lbl.text = "round"; var lineLength:Number = 100; // square this.createEmptyMovieClip("square_mc", 20); square_mc.lineStyle(20, 0xFF0000, 100, true, "none", "square"); square_mc.moveTo(0, 0); square_mc.lineTo(lineLength, 0); square_mc.lineStyle(0, 0x000000); square_mc.moveTo(0, 0); square_mc.lineTo(lineLength, 0); square_mc._x = 200; square_mc._y = 50; var lbl:TextField = square_mc.createTextField("label_txt", 10, 0, 10, lineLength, 20); lbl.text = "square"; // none this.createEmptyMovieClip("none_mc", 30); none_mc.lineStyle(20, 0xFF0000, 100, true, "none", "none"); none_mc.moveTo(0, 0); none_mc.lineTo(lineLength, 0); none_mc.lineStyle(0, 0x000000); none_mc.moveTo(0, 0); none_mc.lineTo(lineLength, 0); none_mc._x = 350; none_mc._y = 50; var lbl:TextField = none_mc.createTextField("label_txt", 10, 0, 10, lineLength, 20); lbl.text = "none";

O cdigo anterior usa a API de desenho para criar trs linhas, cada uma com um valor diferente para capsStyle.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash.
round miter bevel

Voc pode definir os trs tipos de estilos de unio a seguir para o parmetro jointStyle:

(padro)

O exemplo a seguir demonstra as diferenas entre cada um desses trs estilos.


Para definir diferentes estilos de unio:
1. 2.

Crie um novo documento do Flash e salve-o como jointstyles.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:

Desenhando com o ActionScript

579

var lineLength:Number = 100; // ponta this.createEmptyMovieClip("miter_mc", 10); miter_mc.lineStyle(25, 0xFF0000, 100, true, "none", "none", "miter", 25); miter_mc.moveTo(0, lineLength); miter_mc.lineTo(lineLength / 2, 0); miter_mc.lineTo(lineLength, lineLength); miter_mc.lineTo(0, lineLength); miter_mc._x = 50; miter_mc._y = 50; var lbl:TextField = miter_mc.createTextField("label_txt", 10, 0, lineLength + 20, lineLength, 20); lbl.autoSize = "center"; lbl.text = "miter"; // redondo this.createEmptyMovieClip("round_mc", 20); round_mc.lineStyle(25, 0xFF0000, 100, true, "none", "none", "round"); round_mc.moveTo(0, lineLength); round_mc.lineTo(lineLength / 2, 0); round_mc.lineTo(lineLength, lineLength); round_mc.lineTo(0, lineLength); round_mc._x = 200; round_mc._y = 50; var lbl:TextField = round_mc.createTextField("label_txt", 10, 0, lineLength + 20, lineLength, 20); lbl.autoSize = "center"; lbl.text = "round"; // chanfro this.createEmptyMovieClip("bevel_mc", 30); bevel_mc.lineStyle(25, 0xFF0000, 100, true, "none", "none", "bevel"); bevel_mc.moveTo(0, lineLength); bevel_mc.lineTo(lineLength / 2, 0); bevel_mc.lineTo(lineLength, lineLength); bevel_mc.lineTo(0, lineLength); bevel_mc._x = 350; bevel_mc._y = 50; var lbl:TextField = bevel_mc.createTextField("label_txt", 10, 0, lineLength + 20, lineLength, 20); lbl.autoSize = "center"; lbl.text = "bevel";

O Flash usa a API de desenho para criar trs tringulos no Stage. Cada tringulo possui um valor diferente para o seu estilo de unio.
3.

Salve o documento do Flash e selecione Control > Test Movie para testar o documento.

580

Animao, filtros e desenhos

Definindo a ponta da linha (miterLimit) A propriedade miterLimit um valor numrico que indica o limite de corte de uma junta em ngulo (consulte Definindo acabamentos de linha (capsStyle) e unies (jointStyle) na pgina 578). O valor de miterLimit um multiplicador geral de um trao. Por exemplo, com base em um valor de 2,5 miterLimit cortado 2,5 vezes em relao ao tamanho do trao. Os valores vlidos variam de 0 a 255 (se um valor para miterLimit for undefined, o valor padro ser 3). A propriedade miterLimit somente ser usada se jointStyle for definido como miter.

Usando mtodos de API de desenho e scripts de animao


Voc pode combinar a API de desenho com as classes Tween e TransitionManager para criar alguns resultados animados excelentes e, para isso, s precisa escrever uma pequena quantidade de ActionScript. O procedimento a seguir carrega uma imagem JPEG e a mascara dinamicamente para revella lentamente aps o seu carregamento, interpolando sua mscara.
Para animar mscaras dinmicas:
1. 2.

Crie um novo documento do Flash e salve-o como dynmask.fla. Adicione o seguinte ActionScript ao Frame 1 da Timeline:
import mx.transitions.Tween; import mx.transitions.easing.*; var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip) { target_mc._visible = false; // Centralizar a imagem no Stage target_mc._x = (Stage.width - target_mc._width) / 2; target_mc._y = (Stage.height - target_mc._height) / 2; var maskClip:MovieClip = target_mc.createEmptyMovieClip("mask_mc", 20); with (maskClip) { // Desenhar uma mscara do mesmo tamanho da imagem carregada. beginFill(0xFF00FF, 100); moveTo(0, 0); lineTo(target_mc._width, 0); lineTo(target_mc._width, target_mc._height); lineTo(0, target_mc._height); lineTo(0, 0); endFill(); } target_mc.setMask(maskClip); target_mc._visible = true;

Desenhando com o ActionScript

581

var mask_tween:Object = new Tween(maskClip, "_yscale", Strong.easeOut, 0, 100, 2, true); }; this.createEmptyMovieClip("img_mc", 10); var img_mcl:MovieClipLoader = new MovieClipLoader(); img_mcl.addListener(mclListener); img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc);

Este exemplo de cdigo importa a classe Tween e cada uma das classes existentes no pacote de atenuao. Em seguida, ele cria um objeto que funciona como ouvinte de uma instncia MovieClipLoader, criada em uma seo posterior do cdigo. O objeto ouvinte define um nico ouvinte de eventos, onLoadInit, que centraliza a imagem JPEG carregada dinamicamente no Stage. Depois que o cdigo reposiciona a imagem, uma nova instncia de clipe de filme criada no clipe de filme target_mc (que contm a imagem JPEG carregada dinamicamente). Nesse novo clipe de filme, o cdigo da API de desenho cria um retngulo com as mesmas dimenses da imagem JPEG. O novo clipe de filme mascara a imagem JPEG chamando o mtodo MovieClip.setMask(). Depois que a mscara 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

Para animar _alpha no exemplo anterior em vez de _yscale, interpole target_mc diretamente, em vez do clipe de filme de mscara.

Voc pode localizar um arquivo de origem de exemplo, drawingapi.fla, na pasta Samples do seu disco rgido, que mostra como usar a API de desenho em um aplicativo Flash.

No Windows, navegue at unidade de inicializao\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.

582

Animao, filtros e desenhos

Noes bsicas sobre dimensionamento e guias de trecho


Voc pode usar o dimensionamento em 9 trechos (Scale-9) para especificar o dimensionamento em estilo de componentes para clipes de filme. Isso permite a criao de smbolos de clipe de filme que so dimensionados adequadamente para serem utilizados como componentes de interface do usurio, ao contrrio do tipo de dimensionamento normalmente aplicado a grficos e elementos de design.

Noes bsicas sobre o funcionamento do dimensionamento em 9 trechos


A maneira mais fcil de explicar o funcionamento do dimensionamento em 9 trechos ver um exemplo disso no Flash.
Para compreender o dimensionamento no Flash:
1. 2.

Crie um novo documento do Flash e salve-o como dynmask.fla. Arraste uma cpia do componente Button, a partir do painel Components (Componentes), (Window (Janela) > Components), para o Stage. Aumente o nvel de zoom do Stage para 400% usando a ferramenta Zoom.

3.

Por padro, a instncia do componente Button possui 100 pixels de largura por 22 pixels de altura.

Noes bsicas sobre dimensionamento e guias de trecho

583

4.

Redimensione a instncia do componente Button para 200 pixels de largura por 44 pixels de altura usando o inspetor Properties.

Voc perceber que, apesar do componente redimensionado, a borda e o rtulo de texto de Button no aparecem distorcidos. O rtulo do boto permaneceu centralizado e manteve o seu tamanho de fonte. Embora os componentes da verso 2 da Arquitetura de Componentes Macromedia no utilizem o dimensionamento em 9 trechos, os componentes usam dimensionamento na arquitetura de componentes da verso 2 para que os contornos no mudem de tamanho (conforme mostrado na figura a seguir). Imagine que a instncia de boto seja dividida em 9 partes separadas, ou em uma grade de 3 X 3, assim como em um teclado numrico no telefone ou em um teclado de computador. Quando voc redimensionar a instncia de boto horizontalmente, somente os trs segmentos verticais no centro (nmeros 2, 5 e 8 em um teclado numrico) sero esticados, de modo que o contedo no parea distorcido. Se voc redimensionasse a instncia de boto verticalmente, somente os trs segmentos horizontais no centro (nmeros 4, 5 e 6 em um teclado numrico) seriam redimensionados. Os quatro cantos da grade de dimensionamento no so dimensionados, o que permite que os componentes aumentem sem parecerem esticados (consulte as imagens a seguir).

DICA 584

Os traos so criados a partir das bordas aps a transformao do dimensionamento em 9 trechos e, portanto, no deformam nem perdem nenhum detalhe.

Animao, filtros e desenhos

No ambiente do Flash, possvel ativar as guias de trecho para o dimensionamento em 9 trechos na caixa de dilogo Convert to Symbol (Converter em smbolo) ou Symbol Properties (Propriedades do smbolo). A caixa de seleo Enable guides for 9-slice scaling (Ativar guias para dimensionamento em 9 trechos) somente estar disponvel se voc estiver publicando para o Flash Player 8 e o comportamento for definido como movie clip. As guias do dimensionamento em 9 trechos no esto disponveis para as verses anteriores do Flash ou se voc estiver criando um boto ou um smbolo grfico. Para ativar o dimensionamento em 9 trechos no ActionScript, defina a propriedade scale9Grid em uma instncia de clipe de filme. Independentemente de ter criado as guias de trecho atravs da interface de usurio ou do ActionScript, voc poder rastrear a coordenada x, a coordenada y, a largura e a altura, rastreando a propriedade scale9Grid do clipe de filme.
trace(my_mc.scale9Grid); // (x=20, y=20, w=120, h=120)

Este trecho de cdigo rastreia o valor do objeto Rectangle usado pela propriedade scale9Grid. O retngulo possui um coordenada x e uma coordenada y de 20 pixels, largura de 120 pixels e altura de 120 pixels.

Trabalhando com dimensionamento de 9 trechos no ActionScript


No exemplo a seguir, voc utilizar as ferramentas de desenho para criar um quadrado de 300 X 300 pixels que redimensionado usando o dimensionamento em 9 trechos. O quadrado dividido em nove quadrados menores, cada um com aproximadamente 100 pixels de largura X 100 pixels de altura. Quando voc redimensionar o quadrado, cada segmento que no for canto expandir para corresponder largura e altura especificada.
Para usar o dimensionamento em 9 trechos no ActionScript:
1. 2. 3.

Crie um novo documento do Flash e salve-o como ninescale.fla. Arraste um componente Button para a biblioteca do documento atual. Selecione a ferramenta Rectangle (Retngulo) e desenhe um quadrado vermelho (300 X 300 pixels) com um trao preto de 15 pixels no Stage. Selecione a ferramenta Oval e desenhe um crculo roxo (50 X 50 pixels) com um trao preto de 2 pixels no Stage.

4.

Noes bsicas sobre dimensionamento e guias de trecho

585

5.

Selecione o crculo roxo e arraste-o para o canto superior direito do quadrado vermelho criado anteriormente. Selecione a ferramenta Oval, desenhe um novo crculo de aproximadamente 200 X 200 pixels e posicione-o fora do Stage. Selecione o novo crculo no Stage e arraste-o, de modo que seu ponto central fique no canto inferior esquerdo do quadrado. Clique fora da instncia de crculo para cancelar a seleo da forma. Clique duas vezes no crculo novamente para selecion-lo e pressione backspace para excluir a forma e remover uma parte circular do quadrado. todo o quadrado vermelho e o crculo roxo interno com o mouse. Pressione F8 para converter a forma em um smbolo de clipe de filme. o nome de instncia my_mc ao clipe de filme no Stage. Adicione o seguinte ActionScript ao Frame 1 da Timeline principal:
import mx.controls.Button; import flash.geom.Rectangle; var grid:Rectangle = new Rectangle(100, 100, 100, 100); var small_button:Button = this.createClassObject(Button, "small_button", 10, {label:"Small"}); small_button.move(10, 10); small_button.addEventListener("click", smallHandler); function smallHandler(eventObj:Object):Void { my_mc._width = 100; my_mc._height = 100; } var large_button:Button = this.createClassObject(Button, "large_button", 20, {label:"Large"}); large_button.move(120, 10); large_button.addEventListener("click", largeHandler); function largeHandler(eventObj:Object):Void { my_mc._width = 450; my_mc._height = 300; } var toggle_button:Button = this.createClassObject(Button, "toggle_button", 30, {label:"scale9Grid=OFF", toggle:true, selected:false}); toggle_button.move(420, 10); toggle_button.setSize(120, 22); toggle_button.addEventListener("click", toggleListener); function toggleListener(eventObj:Object):Void { if (eventObj.target.selected) {

6.

7.

8. 9.

10. Selecione 11.

12. Atribua 13.

586

Animao, filtros e desenhos

eventObj.target.label = "scale9Grid=ON"; my_mc.scale9Grid = grid; } else { eventObj.target.label = "scale9Grid=OFF"; my_mc.scale9Grid = undefined; } }

O cdigo anterior dividido em cinco sees. A primeira seo de cdigo importa duas classes: mx.controls.Button (a classe do componente Button) e flash.geom.Rectangle. A segunda seo de cdigo cria uma nova instncia da classe Rectangle e especifica as coordenadas x e y de 100 pixels, alm de uma largura e altura de 100 pixels. Essa instncia de retngulo usada para configurar a grade de dimensionamento em 9 trechos para uma forma de clipe de filme criada posteriormente. Em seguida, crie uma nova instncia do componente Button e atribua o nome de instncia small_button a ele. Sempre que voc clicar nesse boto, o clipe de filme criado anteriormente ser redimensionado para 100 pixels de largura X 100 pixels de altura. A quarta seo de cdigo cria dinamicamente uma nova instncia 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 seo final do cdigo cria uma nova instncia da classe Button, que pode ser ativada e desativada pelo usurio. Quando o boto est no estado ativado, a grade em 9 trechos aplicada. Se o boto estiver no estado desativado, a grade em 9 trechos ser desabilitada.
14. Salve

o documento do Flash e selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF. Este exemplo de cdigo adiciona e posiciona trs instncias do componente Button no Stage e cria ouvintes de eventos para cada boto. Se clicar no boto Large (Grande) com a grade em 9 trechos desativada, voc perceber que a imagem fica distorcida e parece esticada. Ative a grade clicando no boto de alternncia e clique novamente no boto Large. Com a grade em 9 trechos ativada, o crculo localizado no canto superior esquerdo no dever mais apresentar uma aparncia distorcida.

Noes bsicas sobre dimensionamento e guias de trecho

587

588

Animao, filtros e desenhos

CAPTULO 14

Criando interao com o ActionScript


Em animaes simples, o Macromedia Flash Player reproduz as cenas e os quadros de um arquivo SWF em seqncia. Em um arquivo SWF interativo, os espectadores usam o teclado e o mouse para percorrer um arquivo SWF, mover objetos, inserir informaes em formulrios e executar muitas outras operaes interativas. Use o ActionScript para criar scripts que informem ao Flash Player qual ao executar na ocorrncia de um evento. Os eventos que ativam um script ocorrem quando a reproduo atinge um quadro, quando um clipe de filme carregado ou descarregado, ou quando o usurio clica em um boto ou pressiona uma tecla. Um script pode consistir em um nico comando, como instruir um arquivo SWF a interromper a reproduo, ou uma srie de comandos e instrues, como avaliar em primeiro lugar uma condio e depois executar uma ao. Muitos comandos do ActionScript so simples e permitem criar controles bsicos para um arquivo SWF. Outras aes exigem alguma familiaridade com linguagens de programao e so planejadas para um desenvolvimento avanado. Para obter mais informaes sobre como criar interao com o ActionScript, consulte os seguintes tpicos:
Sobre eventos e interao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 Controlando a reproduo de arquivos SWF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 Criando interatividade e efeitos visuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 Criando vinculaes de dados durante a execuo com o ActionScript . . . . . . . .607 Desconstruindo um script de exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616

14

589

Sobre eventos e interao


Sempre que um usurio clica no mouse ou pressiona uma tecla, essa ao gerado um evento. Esses tipos de eventos normalmente so chamados eventos do usurio, pois so gerados em resposta a alguma ao executada pelo usurio. Voc pode escrever ActionScript para responder a esses eventos ou manipul-los. Por exemplo, quando um usurio clica em um boto, voc pode enviar a reproduo para outro quadro do arquivo SWF ou carregar uma nova pgina da Web no navegador. Em um arquivo SWF, botes, clipes de filme e campos de texto geram eventos aos quais voc pode responder. O ActionScript fornece trs formas de manipular eventos: mtodos manipuladores de eventos, ouvintes de eventos e manipuladores on() e onClipEvent(). Para obter informaes sobre eventos e como manipul-los, consulte Captulo 10, Manipulando eventos..

Controlando a reproduo de arquivos SWF


As funes do ActionScript a seguir permitem controlar a reproduo na timeline (linha de tempo) e carregar uma nova pgina da Web em uma janela de navegador:

As funes gotoAndPlay() e gotoAndStop() enviam a reproduo para um quadro ou cena. Essas so funes globais que podem ser chamadas de qualquer script. Use tambm os mtodos MovieClip.gotoAndPlay() e MovieClip.gotoAndStop() para navegar pela timeline de um objeto de clipe de filme especfico. Consulte Indo para um quadro ou uma cena na pgina 591. As aes play() e stop() reproduzem e interrompem arquivos SWF. Consulte Reproduzindo e interrompendo clipes de filme na pgina 591. A ao getURL() vai para outro URL. Consulte Indo para outro URL na pgina 592. Indo para um quadro ou uma cena na pgina 591 Reproduzindo e interrompendo clipes de filme na pgina 591 Indo para outro URL na pgina 592

Para obter mais informaes, consulte os seguintes tpicos:


590

Criando interao com o ActionScript

Indo para um quadro ou uma cena


Para ir para uma cena ou um quadro especfico no arquivo SWF, use as funes globais gotoAndPlay() e gotoAndStop() ou os mtodos MovieClip.gotoAndPlay() e MovieClip.gotoAndStop() equivalentes da classe MovieClip. Cada funo ou mtodo permite especificar um quadro para o qual ir na cena atual. Se o documento contiver vrias cenas, voc poder especificar uma cena e um quadro para os quais deseja ir. O exemplo a seguir usa a funo global gotoAndPlay() em um manipulador de eventos onRelease de um objeto de boto para enviar a reproduo da timeline que contm o boto para o Frame 10 (Quadro 10):
jump_btn.onRelease = function () { gotoAndPlay(10); };

No prximo exemplo, o mtodo MovieClip.gotoAndStop() envia a timeline de uma instncia de clipe de filme chamada categories_mc para o Frame 10 e pra. Ao usar os mtodos MovieClip gotoAndPlay() e gotoAndStop(), especifique uma instncia para a aplicao do mtodo.
jump_btn.onPress = function () { categories_mc.gotoAndStop(10); };

No exemplo final, a funo global gotoAndStop() usada para mover a reproduo para o Frame 1 (Quadro 1) de Scene 2 (Cena 2). Se nenhuma cena for especificada, a reproduo seguir para o quadro definido na cena atual. Somente possvel usar o parmetro scene na timeline raiz, e no nas timelines de clipes de filme ou de outros objetos no documento.
nextScene_mc.onRelease = function() { gotoAndStop("Scene 2", 1); }

Reproduzindo e interrompendo clipes de filme


A menos que instrudo de outra forma, depois que um arquivo SWF iniciado, ele reproduzido por cada quadro da timeline. Para interromper ou iniciar um arquivo SWF, use as funes globais play() e stop() ou os mtodos MovieClip equivalentes. Por exemplo, voc pode usar stop() para interromper um arquivo SWF no fim de uma cena, antes de passar para a cena seguinte. Depois que um arquivo SWF pra, ele deve ser reiniciado explicitamente atravs da chamada de play() ou de gotoAndPlay(). Voc pode usar as funes play() e stop() ou mtodos MovieClip para controlar a timeline principal ou a timeline de qualquer clipe de filme ou arquivo SWF carregado. O clipe de filme que voc deseja controlar deve ter um nome de instncia e deve estar presente na timeline.

Controlando a reproduo de arquivos SWF

591

O manipulador on(press) a seguir, anexado a um boto, inicia a reproduo movendo o arquivo SWF ou o clipe de filme que contm o objeto de boto:
// Anexado a uma instncia de boto on (press) { // Reproduz a timeline que contm o boto play(); }

Esse mesmo cdigo do manipulador de eventos on() produzir um resultado diferente quando for anexado a um objeto de clipe de filme em vez de um boto. Por padro, as instrues includas em um manipulador on(), quando anexadas a um objeto de boto, sero aplicadas timeline que contm o boto. Entretanto, as instrues includas em um manipulador on(), quando anexadas a um objeto de clipe de filme, sero aplicadas ao clipe de filme ao qual o manipulador on() est anexado. Por exemplo, o cdigo do manipulador on() a seguir interrompe a timeline do clipe de filme qual o manipulador est anexado, e no a timeline que contm o clipe de filme.
// Anexado instncia de clipe de filme myMovie_mc myMovie_mc.onPress() { stop(); };

As mesmas condies so aplicadas aos manipuladores onClipEvent() anexados a objetos de clipes de filme. Por exemplo, o cdigo a seguir interrompe a timeline do clipe de filme que contm o manipulador onClipEvent() quando o clipe carregado pela primeira vez ou aparece no Stage (Palco).
onClipEvent(load) { stop(); }

Indo para outro URL


Para abrir uma pgina da Web em uma janela de navegador ou para passar dados para outro aplicativo em um URL definido, use a funo global getURL() ou o mtodo MovieClip.getURL(). Por exemplo, possvel ter um boto com links para um novo site da Web ou enviar variveis da timeline para um script CGI que seja processado da mesma forma que um formulrio HTML. Voc tambm pode especificar uma janela de destino, como faria ao especificar uma janela com uma marca de ncora HTML (<a></a>). Por exemplo, o cdigo a seguir abre a pgina inicial macromedia.com em uma janela de navegador em branco quando o usurio clica na instncia de boto homepage_btn:
// Anexar ao quadro homepage_btn.onRelease = function () {

592

Criando interao com o ActionScript

getURL("http://www.macromedia.com", "_blank"); };

Voc tambm pode enviar variveis junto com o URL, usando o mtodo GET ou POST. Esse procedimento til quando a pgina carregada de um servidor de aplicativos, como uma pgina do ColdFusion Server (CFM), espera receber variveis de formulrio. Por exemplo, imagine que voc deseje carregar uma pgina CFM chamada addUser.cfm que espera duas variveis de formulrio, primeiro Name e age. Para isso, voc pode criar um clipe de filme chamado variables_mc que defina essas duas variveis, como mostrado no exemplo a seguir.
variables_mc.firstName = "Francois"; variables_mc.age = 32;

O cdigo a seguir carrega addUser.cfm em uma janela de navegador em branco e passa para a pgina CFM variables_mc.name e variables_mc.age no cabealho POST.
variables_mc.getURL("addUser.cfm", "_blank", "POST");

A funcionalidade de getURL() depender do navegador usado. A maneira mais confivel de fazer com que todos os navegadores funcionem da mesma maneira chamando uma funo JavaScript no cdigo HTML que usa o mtodo JavaScript window.open() para abrir uma janela. Adicione o HTML e o JavaScript a seguir no seu modelo HTML:
<script language="JavaScript"> <-function openNewWindow(myURL) { window.open(myURL, "targetWindow"); } // --> </script>

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 informaes, consulte %{funo getURL}% em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0).

Criando interatividade e efeitos visuais


Para criar interatividade e outros efeitos visuais, preciso compreender as seguintes tcnicas:

Criando um ponteiro de mouse personalizado na pgina 594 Obtendo a posio do ponteiro na pgina 595 Capturando pressionamentos de teclas na pgina 596 Definindo valores de cores na pgina 599 Criando controles de som na pgina 601

Criando interatividade e efeitos visuais

593

Detectando colises na pgina 604 Criando uma ferramenta de desenho de linha simples na pgina 605

Criando um ponteiro de mouse personalizado


Um ponteiro de mouse padro a representao na tela do sistema operacional da posio do mouse do usurio. Ao substituir o ponteiro padro por um criado no Flash, voc consegue integrar o movimento do mouse do usurio no arquivo SWF com mais preciso. O exemplo desta seo usa um ponteiro personalizado com o formato de uma seta grande. Porm, a eficincia desse recurso est na sua capacidade de transformar o ponteiro personalizado em qualquer forma, como uma bola de futebol a caminho da linha do gol ou um pedao de tecido colocado por cima de um assento para mudar sua cor. Para criar um ponteiro personalizado, crie o clipe de filme do ponteiro no Stage. Em seguida, no ActionScript, oculte o ponteiro padro e controle seu movimento. Para isso, use o mtodo hide() da classe interna Mouse (consulte %{hide (mtodo Mouse.hide)}% em ActionScript 2.0 Language Reference).
Para criar um ponteiro personalizado:
1.

Crie um clipe de filme para ser usado como um ponteiro personalizado e coloque uma instncia do clipe no Stage. Selecione a instncia de clipe de filme no Stage. No inspetor Properties (Propriedades), digite cursor_mc na caixa de texto Instance Name (Nome da instncia). Selecione o Frame 1 da Timeline e digite o cdigo a seguir no painel Actions (Aes):
Mouse.hide(); cursor_mc.onMouseMove = function() { this._x = _xmouse; this._y = _ymouse; updateAfterEvent(); };

2. 3.

4.

O mtodo Mouse.hide() oculta o ponteiro quando o clipe de filme exibido pela primeira vez no Stage; a funo onMouseMove posiciona o ponteiro personalizado no mesmo local do ponteiro e chama updateAfterEvent() sempre que o usurio move o mouse. A funo updateAfterEvent() atualiza a tela imediatamente aps a ocorrncia do evento especificado, ao contrrio do comportamento padro, que atualiza a tela depois que o prximo quadro desenhado. (Consulte %{funo updateAfterEvent}% em ActionScript 2.0 Language Reference.)

594

Criando interao com o ActionScript

5.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o ponteiro personalizado.

Os botes ainda funcionaro quando voc usar um ponteiro de mouse personalizado. recomendvel colocar o ponteiro personalizado na camada superior da timeline para mov-lo na frente dos botes e dos outros objetos em outras camadas quando voc mover o mouse no arquivo SWF. Alm disso, a dica de um ponteiro personalizado o ponto de registro do clipe de filme que voc usa como o ponteiro personalizado. Assim, se desejar que uma determinada parte do clipe de filme funcione como a dica do ponteiro, defina as coordenadas do ponto de registro do clipe para que seja esse ponto. Para obter mais informaes sobre os mtodos da classe Mouse, consulte %{Mouse}% em ActionScript 2.0 Language Reference.

Obtendo a posio do ponteiro


Voc pode usar as propriedades _xmouse e _ymouse para localizar o ponteiro em um arquivo SWF. Essas propriedades poderiam ser usadas, por exemplo, em um aplicativo de mapa que obtm os valores das propriedades _xmouse e _ymouse e utiliza-os para calcular a longitude e a latitude de uma localizao especfica. Cada timeline possui uma propriedade _xmouse e _ymouse que retorna a localizao do ponteiro no seu sistema de coordenadas. A posio sempre relativa ao ponto de registro. No caso da timeline principal (_level0), o ponto de registro o canto superior esquerdo. No caso de um clipe de filme, o ponto de registro depende do ponto de registro definido na hora de criao do clipe ou de sua posio no Stage.

As propriedades _xmouse e _ymouse na timeline principal e uma timeline de clipe de filme

Criando interatividade e efeitos visuais

595

O procedimento a seguir apresenta vrias maneiras de obter a posio do ponteiro na timeline principal ou em um clipe de filme.
Para obter a posio atual do ponteiro:
1. 2. 3.

Crie dois campos de texto dinmicos e atribua a eles os nomes box1_txt e box2_txt. Adicione rtulos para as caixas de texto: posio x e posio y, respectivamente. Selecione Window (Janela) > Actions (Aes) para abrir o painel Actions (Aes) se ele ainda no estiver aberto. Adicione o seguinte cdigo ao painel Script:
var mouseListener:Object = new Object(); mouseListener.onMouseMove = function() { // retorna as posies X e Y do mouse box1_txt.text = _xmouse; box2_txt.text = _ymouse; }; Mouse.addListener(mouseListener);

4.

5.

Selecione Control > Test movie para testar o filme do Flash. Os campos box1_txt e box2_txt mostram a posio do ponteiro durante a sua movimentao no Stage.

Para obter mais informaes sobre as propriedades _xmouse e _ymouse, consulte %{_xmouse (propriedade MovieClip._xmouse)}% e %{_ymouse (propriedade MovieClip._ymouse)}% em ActionScript 2.0 Language Reference.

Capturando pressionamentos de teclas


Voc pode usar o manipulador global on() para interceptar o comportamento interno dos pressionamentos de teclas no Flash Player, como mostra o exemplo a seguir:
/* Quando voc pressiona a tecla de seta para a esquerda ou para a direita, o clipe de filme ao qual o manipulador est anexado altera a transparncia. */ on (keyPress "<Left>") { this._alpha -= 10; } on (keyPress "<Right>") { this._alpha += 10; }

Verifique se selecionou Control (Controlar) > Disable Keyboard Shortcuts (Desativar atalhos de teclado), caso contrrio, determinadas teclas com comportamento interno no sero substitudas quando voc usar Control > Test Movie para testar o aplicativo. Consulte o parmetro keyPress de %{manipulador on}% em ActionScript 2.0 Language Reference.

596

Criando interao com o ActionScript

Use os mtodos da classe interna Key para detectar a ltima tecla pressionada pelo usurio. A classe Key no exige uma funo construtora; para usar os mtodos dessa classe, basta chamlos na prpria classe, como mostra o exemplo a seguir:
Key.getCode();

Voc pode obter cdigos de teclas virtuais ou valores ASCII (American Standard Code for Information Interchange, Cdigo padro americano para intercmbio de informaes) de pressionamentos de teclas:

Para obter o cdigo de tecla virtual da ltima tecla pressionada, use o mtodo getCode(). Para obter o valor ASCII da ltima tecla pressionada, use o mtodo getAscii().

Um cdigo de tecla virtual atribudo a cada tecla fsica de um teclado. Por exemplo, a tecla de seta para a esquerda tem o cdigo de tecla virtual 37. O uso desse cdigo garante que os controles do arquivo SWF sejam os mesmos em todos os teclados, independentemente de linguagem ou da plataforma. Valores ASCII so atribudos aos primeiros 127 caracteres em cada conjunto de caracteres. Os valores ASCII fornecem informaes 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 cdigos de teclas virtuais executando um destes procedimentos:

Consulte a lista de cdigos de teclas em Apndice C, Teclas do teclado e valores de cdigos 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()); }

O cdigo da tecla desejada exibido no painel Output (Sada). Um lugar comum para se usar os mtodos da classe Key em um manipulador de eventos. No exemplo a seguir, o usurio move o carro usando as teclas de seta. O mtodo Key.isDown() indica se a tecla pressionada a seta para a direita, para a esquerda, para cima ou para baixo. O ouvinte de eventos, Key.onKeyDown, determina o valor Key.isDown(keyCode) a partir de instrues if. Dependendo do valor, o manipulador instruir o Flash Player a atualizar a posio do carro e exibir a direo.

Criando interatividade e efeitos visuais

597

O exemplo a seguir mostra como capturar pressionamentos de teclas para mover um clipe de filme para cima, para baixo, para a esquerda ou para a direita no Stage, dependendo da tecla de seta correspondente (para cima, para baixo, para a esquerda ou para a direita) pressionada. Alm disso, um campo de texto exibe o nome da tecla pressionada.
Para criar um clipe de filme ativado por teclado:
1.

No Stage, crie um clipe de filme que poder se mover em resposta s atividades de teclas do teclado. Neste exemplo, o nome da instncia do clipe de filme car_mc. Selecione Frame 1 na Timeline; em seguida, escolha Window (Janela) > Actions (Aes) para abrir o painel Actions caso ele ainda no esteja visvel. Para definir a distncia percorrida pelo carro na tela com cada pressionamento de tecla, defina uma varivel distance e defina seu valor como 10:
var distance:Number = 10;

2.

3.

4.

Adicione o cdigo ActionScript a seguir ao painel Actions, embaixo do cdigo existente:


this.createTextField("display_txt", 999, 0, 0, 100, 20);

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 cdigo 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 cdigo ao corpo do manipulador de eventos onEnterFrame. O seu cdigo deve ser semelhante ao exemplo a seguir (o novo cdigo 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);

598

Criando interao com o ActionScript

Se a tecla de seta para a esquerda estiver pressionada, a propriedade _x do carro ser definida para o valor _x atual menos a distncia ou para o valor 0, o que for maior. Portanto, o valor da propriedade _x no poder nunca ser menor que 0. Alm disso, a palavra Left dever aparecer no arquivo SWF.
7.

Use um cdigo semelhante para verificar se a tecla para a direita, para cima ou para baixo est sendo pressionada. O seu cdigo completo deve ser semelhante ao exemplo a seguir (o novo cdigo est em negrito):
var distance:Number = 10; this.createTextField("display_txt", 999, 0, 0, var keyListener:Object = new Object(); keyListener.onKeyDown = function() { if (Key.isDown(Key.LEFT)) { car_mc._x = Math.max(car_mc._x - distance, display_txt.text = "Left"; } else if (Key.isDown(Key.RIGHT)) { car_mc._x = Math.min(car_mc._x + distance, car_mc._width); display_txt.text = "Right"; } else if (Key.isDown(Key.UP)) { car_mc._y = Math.max(car_mc._y - distance, display_txt.text = "Up"; } else if (Key.isDown(Key.DOWN)) { car_mc._y = Math.min(car_mc._y + distance, car_mc._height); display_txt.text = "Down"; } }; Key.addListener(keyListener); 100, 20);

0);

Stage.width -

0);

Stage.height -

8.

Selecione Control > Test Movie para testar o arquivo.

Para obter mais informaes sobre os mtodos da classe Key, consulte %{Key}% em ActionScript 2.0 Language Reference.

Definindo valores de cores


Voc pode usar os mtodos da classe interna ColorTransform (flash.geom.ColorTransform) para ajustar a cor de um clipe de filme. A propriedade rgb da classe ColorTransform atribui valores RGB (vermelho, verde, azul) hexadecimais ao clipe de filme. O exemplo a seguir usa rgb para alterar a cor de um objeto com base no boto clicado pelo usurio.
Para definir o valor de cor de um clipe de filme:
1.

Crie um novo documento do Flash e salve-o como setrgb.fla.

Criando interatividade e efeitos visuais

599

2. 3.

Selecione a ferramenta Rectangle (Retngulo) e desenhe um quadrado grande no Stage. Converta a forma em um smbolo de clipe de filme e atribua o nome de instncia car_mc a ele no inspetor Properties. Crie um smbolo de boto chamado colorChip, coloque quatro instncias do boto no Stage e atribua a elas os nomes red_btn, green_btn, blue_btn e black_btn. Selecione Frame 1 na Timeline principal e escolha Window > Actions. Adicione o seguinte cdigo ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
import flash.geom.ColorTransform; import flash.geom.Transform; var colorTrans:ColorTransform = new ColorTransform(); var trans:Transform = new Transform(car_mc); trans.colorTransform = colorTrans;

4.

5. 6.

7.

Para que o boto azul altere a cor do clipe de filme car_mc para azul, adicione o cdigo a seguir ao painel Actions:
blue_btn.onRelease = function() { colorTrans.rgb = 0x333399; // azul trans.colorTransform = colorTrans; };

O trecho de cdigo anterior altera a propriedade rgb do objeto de transformao de cor e reaplica o efeito de transformao de cor ao clipe de filme car_mc sempre que o boto pressionado.
8.

Repita a etapa 7 para os outros botes (red_btn, green_btn e black_btn) a fim de alterar a cor do clipe de filme para a cor correspondente. O seu cdigo agora deve ser semelhante ao exemplo a seguir (o novo cdigo est em negrito):
import flash.geom.ColorTransform; import flash.geom.Transform; var colorTrans:ColorTransform = new ColorTransform(); var trans:Transform = new Transform(car_mc); 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; };

600

Criando interao com o ActionScript

green_btn.onRelease = function() { colorTrans.rgb = 0x006600; // verde trans.colorTransform = colorTrans; }; black_btn.onRelease = function() { colorTrans.rgb = 0x000000; // preto trans.colorTransform = colorTrans; }; 9.

Selecione Control > Test Movie para alterar a cor do clipe de filme.

Para obter mais informaes sobre os mtodos da classe ColorTransform, consulte %{ColorTransform (flash.geom.ColorTransform)}% em ActionScript 2.0 Language Reference.

Criando controles de som


Use a classe interna Sound para controlar sons em um arquivo SWF. Para usar os mtodos da classe Sound, primeiro crie um objeto Sound. Depois, use o mtodo attachSound() para inserir um som da biblioteca em um arquivo SWF enquanto o SWF estiver em execuo. O mtodo setVolume() da classe Sound controla o volume, e o mtodo setPan() ajusta o balano da esquerda e da direita de um som. O procedimento a seguir mostra como criar controles de som.
Para anexar som a uma timeline:
1. 2.

Selecione File > Import para importar um som. Selecione o som na biblioteca, clique com o boto direito do mouse (Windows), ou mantenha pressionada a tecla Control e clique (Macintosh), e selecione Linkage (Vinculao). Selecione Export for ActionScript (Exportar para ActionScript) e Export in First Frame (Exportar no primeiro quadro); em seguida, atribua o identificador a_thousand_ways ao som. Adicione um boto ao Stage e atribua a ele o nome play_btn. Adicione um boto ao Stage e atribua a ele o nome stop_btn. Selecione Frame 1 na Timeline principal e escolha Window > Actions. Adicione o seguinte cdigo ao painel Actions:
var song_sound:Sound = new Sound(); song_sound.attachSound("a_thousand_ways"); play_btn.onRelease = function() { song_sound.start(); }; stop_btn.onRelease = function() {

3.

4. 5. 6.

Criando interatividade e efeitos visuais

601

song_sound.stop(); };

Esse cdigo primeiro interrompe o clipe de filme speaker. Em seguida, ele cria um novo objeto Sound (song_sound) e anexa o som cujo identificador de vinculao a_thousand_ways. Os manipuladores de eventos onRelease associados aos objetos playButton e stopButton iniciam e interrompem o som usando os mtodos Sound.start() e Sound.stop(), e tambm iniciam e interrompem o som anexado.
7.

Selecione Control > Test Movie para ouvir o som.

Para criar um controle de volume deslizante:


1.

Com a ferramenta Rectangle, desenhe um pequeno retngulo no Stage de aproximadamente 30 pixels de altura X 10 pixels de largura. Selecione a ferramenta Selection (Seleo) e clique duas vezes na forma no Stage. Pressione F8 para abrir a caixa de dilogo Convert to Symbol (Converter em smbolo). Selecione o tipo Button (Boto), digite o nome de smbolo volume e clique em OK. Com o smbolo de boto selecionado no Stage, digite o nome de instncia handle_btn no inspetor Properties. Selecione o boto e escolha Modify (Modificar) > Convert to Symbol (Converter em smbolo). Tenha cuidado ao selecionar o comportamento do clipe de filme. Isso criar um clipe de filme com o boto em Frame 1.

2. 3. 4. 5.

6.

7.

Selecione o clipe de filme e digite volume_mc como o nome de instncia no inspetor Properties. Selecione Frame 1 na Timeline principal e escolha Window > Actions. Insira o cdigo a seguir no painel Actions:
this.createTextField("volume_txt", 10, 30, 30, 200, 20); volume_mc.top = volume_mc._y; volume_mc.bottom = volume_mc._y; volume_mc.left = volume_mc._x; volume_mc.right = volume_mc._x + 100; volume_mc._x += 100; 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);

8. 9.

602

Criando interao com o ActionScript

this._parent._parent.volume_txt.text = level; }; volume_mc.handle_btn.onReleaseOutside = slider_mc.handle_btn.onRelease;

Os parmetros left, top, right e bottom de startDrag() so variveis definidas em uma ao de clipe de filme.
10. Selecione

Control > Test Movie para usar o controle deslizante de volume.

Para criar um controle de balano deslizante:


1.

Use a ferramenta Rectangle para desenhar um pequeno retngulo no Stage de aproximadamente 30 pixels de altura X 10 pixels de largura. Selecione a ferramenta Selection e clique duas vezes na forma no Stage. Pressione F8 para abrir a caixa de dilogo Convert to Symbol. Selecione o tipo Button, digite o nome de smbolo balance e clique em OK. Com o smbolo de boto selecionado no Stage, digite o nome de instncia handle_btn no inspetor Properties. Selecione o boto e escolha Modify > Convert to Symbol. Tenha cuidado ao selecionar o comportamento do clipe de filme. Isso criar um clipe de filme com o boto em Frame 1.

2. 3. 4. 5.

6.

7.

Selecione o clipe de filme e digite balance_mc como o nome de instncia no inspetor Properties. Insira o cdigo a seguir no painel Actions:
balance_mc.top = balance_mc._y; balance_mc.bottom = balance_mc._y; balance_mc.left = balance_mc._x; balance_mc.right = balance_mc._x + 100; balance_mc._x += 50; balance_mc.handle_btn.onPress = function() { startDrag(this._parent, false, this._parent.left, this._parent.top, this._parent.right, this._parent.bottom); }; balance_mc.handle_btn.onRelease = function() { stopDrag(); var level:Number = Math.ceil((this._parent._x - this._parent.left 50) * 2); this._parent._parent.song_sound.setPan(level); }; balance_mc.handle_btn.onReleaseOutside = balance_mc.handle_btn.onRelease;

8.

Os parmetros left, top, right e bottom de startDrag() so variveis definidas em uma ao de clipe de filme.

Criando interatividade e efeitos visuais

603

9.

Selecione Control > Test Movie para usar o controle deslizante de balano.

Para obter mais informaes sobre os mtodos da classe Sound, consulte %{Sound}% em ActionScript 2.0 Language Reference.

Detectando colises
O mtodo hitTest() da classe MovieClip detecta colises 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 coliso para testar se o usurio chegou a uma certa rea esttica no Stage ou para determinar quando um clipe de filme alcanou outro. Com hitTest(), voc pode determinar esses resultados. Voc pode usar os parmetros de hitTest() para especificar as coordenadas x e y de uma rea sensvel a cliques no Stage ou usar o caminho de destino de outro clipe de filme como uma rea sensvel a cliques. Quando voc especificar x e y, hitTest() retornar true se o ponto identificado por (x, y) no for transparente. Quando um destino passado para hitTest(), as caixas delimitadoras dos dois clipes de filme so comparadas. Se houver uma interseo entre elas, hitTest() retornar true. Se no houver uma interseo entre as duas caixas, hitTest() retornar false. Voc tambm pode usar hitTest() para testar uma coliso entre dois clipes de filme. O exemplo a seguir mostra como detectar uma coliso entre um mouse e os clipes de filme no Stage.
Para detectar uma coliso entre um clipe de filme e o ponteiro do mouse:
1. 2. 3.

Selecione o primeiro quadro na Layer 1 (Camada 1) da Timeline. Selecione Window > Actions para abrir o painel Actions se ele ainda no estiver aberto. Adicione este cdigo ao painel Actions:
this.createEmptyMovieClip("box_mc", 10); with (box_mc) { beginFill(0xFF0000, 100); moveTo(100, 100); lineTo(200, 100); lineTo(200, 200); lineTo(100, 200); lineTo(100, 100); endFill(); } this.createTextField("status_txt", 999, 0, 0, 100, 22); var mouseListener:Object = new Object();

604

Criando interao com o ActionScript

mouseListener.onMouseMove = function():Void { status_txt.text = _level0.hitTest(_xmouse, _ymouse, true); } Mouse.addListener(mouseListener); 4.

Selecione Control > Test Movie e mova o ponteiro sobre o clipe de filme para testar a coliso. O valor true exibido sempre que o ponteiro est sobre um pixel no transparente.

Para executar a deteco de coliso em dois clipes de filme:


1.

Arraste dois clipes de filme para o Stage e atribua a eles os nomes de instncia car_mc e area_mc. Selecione Frame 1 na Timeline.evelyn Selecione Window > Actions para abrir o painel Actions se ele ainda no estiver visvel. Insira o cdigo a seguir no painel Actions (Aes):
this.createTextField("status_txt", 999, 10, 10, 100, 22); area_mc.onEnterFrame = function() { status_txt.text = this.hitTest(car_mc); }; car_mc.onPress = function() { this.startDrag(false); updateAfterEvent(); }; car_mc.onRelease = function() { this.stopDrag(); };

2. 3. 4.

5.

Selecione Control > Test Movie e arraste o clipe de filme para testar a deteco da coliso. Sempre que a caixa delimitadora do carro formar uma interseo com a caixa delimitadora da rea, o status ser true.

Para obter mais informaes, consulte %{hitTest (mtodo MovieClip.hitTest)}% em ActionScript 2.0 Language Reference.

Criando uma ferramenta de desenho de linha simples


Voc pode usar mtodos da classe MovieClip para desenhar linhas e preenchimentos no Stage (Palco) durante a reproduo do arquivo SWF. Isso permite criar ferramentas de desenho para usurios e desenhar formas no arquivo SWF em resposta a eventos. Os mtodos de desenho so beginFill(), beginGradientFill(), clear(), curveTo(), endFill(), lineTo(), lineStyle() e moveTo().

Criando interatividade e efeitos visuais

605

possvel aplicar esses mtodos a qualquer instncia de clipe de filme (por exemplo, myClip.lineTo()) ou a um nvel (_level0.curveTo()). Os mtodos lineTo() e curveTo() permitem desenhar linhas e curvas, respectivamente. Especifique uma cor de linha, espessura e configurao alfa para uma linha ou curva com o mtodo lineStyle(). O mtodo de desenho moveTo() define a posio de desenho atual para as coordenadas x e y do Stage especificadas. Os mtodos beginFill() e beginGradientFill() preenchem um caminho fechado com um preenchimento slido ou gradiente, respectivamente, e endFill() aplica o preenchimento especificado na ltima chamada a beginFill() ou beginGradientFill(). O mtodo clear() apaga o que foi desenhado no objeto de clipe de filme especificado.
Para criar uma ferramenta de desenho de linha simples:
1.

Em um novo documento, crie um boto no Stage e, no inspetor Properties (Propriedades), digite clear_btn como o nome da instncia. Selecione Frame 1 (Quadro 1) na Timeline (Linha de tempo). Selecione Window > Actions para abrir o painel Actions se ele ainda no estiver visvel. No painel Actions, insira o seguinte cdigo:
this.createEmptyMovieClip("canvas_mc", 999); var isDrawing:Boolean = false; // clear_btn.onRelease = function() { canvas_mc.clear(); }; // var mouseListener:Object = new Object(); mouseListener.onMouseDown = function() { canvas_mc.lineStyle(5, 0xFF0000, 100); canvas_mc.moveTo(_xmouse, _ymouse); isDrawing = true; }; mouseListener.onMouseMove = function() { if (isDrawing) { canvas_mc.lineTo(_xmouse, _ymouse); updateAfterEvent(); } }; mouseListener.onMouseUp = function() { isDrawing = false; }; Mouse.addListener(mouseListener);

2. 3. 4.

5. 6.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. Arraste o ponteiro para desenhar uma linha no Stage.

606

Criando interao com o ActionScript

7.

Clique no boto para apagar o que voc desenhou.

Criando vinculaes de dados durante a execuo com o ActionScript


Se voc usar componentes para criar aplicativos, normalmente ser necessrio adicionar vinculaes entre eles para poder interagir com os dados ou para que os componentes interajam entre si. A interao entre componentes necessria para criar interfaces ou formulrios utilizveis com os quais os usurios possam interagir. Utilize a guia Bindings (Vinculaes) no Component inspector (Inspetor de componentes) para adicionar vinculaes entre os componentes no Stage. Voc pode utilizar a guia Bindings no Component inspector para vincular dados entre os componentes no Stage. Para obter mais informaes sobre como usar a guia Bindings, consulte Trabalhando com vinculaes na guia Bindings (somente Flash Professional) na pgina 450 em Usando o Flash. Voc tambm poder obter informaes adicionais nos seguintes artigos on-line: Building a Tip of the day Application (Part 2) (Criando um aplicativo de dica do dia - parte 2), Data Binding in Macromedia Flash MX Professional 2004 (Vinculao de dados no Macromedia Flash MX Professional 2004) e Building a Google Search Application with Macromedia Flash MX Professional (Criando um aplicativo de pesquisa no Google com o Macromedia Flash MX Professional). Voc pode usar o ActionScript em vez da guia Bindings para criar vinculaes entre componentes. A adio de cdigo geralmente mais rpida e eficiente do que a utilizao do ambiente de criao. O uso do ActionScript para criar vinculaes necessrio quando voc utiliza um cdigo para adicionar componentes a um aplicativo. Voc pode optar por usar o mtodo createClassObject() a fim de adicionar componentes dinamicamente no Stage; entretanto, no poderia usar a guia Bindings para criar uma vinculao, pois os componentes somente existiro quando ocorrer a execuo. O uso do ActionScript para adicionar vinculao de dados normalmente conhecido como vinculao de dados durante a execuo. Para obter mais informaes, consulte os seguintes tpicos:

Criando vinculaes entre componentes de UI com o ActionScript Usando componentes, vinculaes e formatadores personalizados na pgina 612 Adicionando e vinculando componentes no Stage na pgina 615

Criando vinculaes de dados durante a execuo com o ActionScript

607

Criando vinculaes entre componentes de UI com o ActionScript


No difcil vincular dados entre dois componentes durante a execuo. Isso possvel no Flash Basic 8 ou no Flash Professional 8. Lembre-se de incluir o componente DataBindingClasses em seu documento para faz-lo funcionar, pois esse componente contm as classes com as quais voc precisa trabalhar.
Para criar uma vinculao entre dois componentes TextInput com o ActionScript:
1. 2. 3. 4.

Crie um novo documento do Flash chamado panel_as.fla. Arraste duas cpias do componente TextInput para o Stage. Atribua os seguintes nomes de instncia aos componentes: in_ti e out_ti. Selecione Window (Janela) > Common Libraries (Bibliotecas comuns) > Classes e abra a nova biblioteca comum denominada Classes.fla. Arraste uma cpia do componente DataBindingClasses para o painel Library (Biblioteca) ou arraste o componente para o Stage e, em seguida, exclua-o. Ao terminar, voc poder fechar a biblioteca comum. Aps a excluso do componente DataBindingClasses do Stage, o Flash deixar uma cpia na biblioteca.
DICA NO T A

5.

Se voc se esquecer de excluir o componente DataBindingClasses do Stage, o cone do componente estar visvel durante a execuo. Durante a criao de uma vinculao com o Component inspector no exemplo anterior, o Flash adicionou o componente DataBindingClasses automaticamente ao arquivo FLA. Ao usar o ActionScript para criar vinculaes de dados, copie essa classe para a sua biblioteca, como mostra a etapa a seguir.

6. 7.

Insira uma nova camada e atribua o nome actions a ela. Adicione o seguinte ActionScript ao Frame 1 da camada Actions:
var src:mx.data.binding.EndPoint = new mx.data.binding.EndPoint(); src.component = in_ti; src.property = "text"; src.event = "focusOut"; var dest:mx.data.binding.EndPoint = new mx.data.binding.EndPoint(); dest.component = out_ti; dest.property = "text"; new mx.data.binding.Binding(src, dest);

Se preferir utilizar a verso resumida, importe as classes de vinculao e utilize o cdigo a seguir:

608

Criando interao com o ActionScript

import mx.data.binding.*; var src:EndPoint = new EndPoint(); src.component = in_ti; src.property = "text"; src.event = "focusOut"; var dest:EndPoint = new EndPoint(); dest.component = out_ti; dest.property = "text"; new Binding(src, dest);

Este ActionScript cria dois pontos finais de vinculao de dados, um para cada componente vinculado. O primeiro ponto final criado define a partir de qual componente est ocorrendo a vinculao (in_ti), qual propriedade deve ser observada (text) e qual evento ativar a vinculao (focusOut). O segundo ponto final criado lista apenas o componente e a propriedade (out_ti e text, respectivamente). Finalmente, voc cria a vinculao entre os dois pontos finais ao chamar o construtor da classe Binding (new Binding(src, dest)). Voc no precisa usar nomes de classe totalmente qualificados (por exemplo, mx.data.binding.EndPoint) em seu ActionScript, conforme j viu no primeiro trecho de cdigo. Se usar a instruo import no incio do cdigo, voc poder evitar a utilizao 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 cdigo e fazer referncia direta s classes EndPoint e Binding. Para obter mais informaes sobre as instrues import, consulte a entrada import em ActionScript 2.0 Language Reference.
8.

Selecione Control > Test Movie para testar o cdigo no ambiente de teste. Digite um texto no campo de entrada de texto in_ti . Depois que a instncia 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 alteraes.

Se desejar modificar o texto do campo de entrada de texto out_ti do exerccio anterior, o seu cdigo poder ficar bem mais complexo. Por padro, se usar o Component inspector para configurar vinculaes, voc criar uma conexo bidirecional. Isso significa que, se voc alterar o campo de texto no Stage, o outro campo de texto tambm ser alterado. Quando voc usa o ActionScript para criar vinculaes, o seu aplicativo funciona da maneira oposta. Por padro, as vinculaes de dados durante a execuo so unidirecionais, a menos que voc especifique o contrrio, conforme demonstrado no exemplo a seguir.

Criando vinculaes de dados durante a execuo com o ActionScript

609

Para usar o ActionScript a fim de criar uma vinculao bidirecional, necessrio que voc faa algumas pequenas modificaes nos trechos de cdigo do procedimento anterior. Este exemplo usa o segundo trecho de ActionScript reduzido da etapa 7.
Para criar uma vinculao bidirecional:
1. 2.

Abra o documento panel_as.fla do exemplo anterior. Modifique ligeiramente o seu ActionScript (consulte o cdigo em negrito) para que corresponda ao ActionScript a seguir:
import mx.data.binding.*; var src:EndPoint = new EndPoint(); src.component = in_ti; src.property = "text"; src.event = "focusOut"; var dest:EndPoint = new EndPoint(); dest.component = out_ti; dest.property = "text"; dest.event = "focusOut"; new Binding(src, dest, null, true);

As duas alteraes feitas no ActionScript fazem o seguinte:


Definem uma propriedade event para a instncia EndPoint de destino. Definem dois parmetros adicionais para o construtor de Binding.

Use o primeiro parmetro para opes de formatao avanadas; voc pode definir esse valor como null ou undefined. O segundo parmetro define se a vinculao ser bidirecional (true) ou unidirecional (false). Voc talvez deseje saber a origem do evento focusOut. nessa parte que o ActionScript torna-se complicado. Voc pode investigar a classe TextInput e usar alguns dos mtodos listados (como change() ou enter()), mas no encontrar o evento focusOut nela. A classe TextInput herdada das classes UIObject e UIComponent. Se exibir a classe UIComponent, que inclui suporte a foco para componentes, voc ver quatro eventos adicionais: focusIn, focusOut, keyDown e keyUp. possvel usar esses eventos com o componente TextInput.
3.

(Opcional) Se desejar que o exemplo anterior atualize o valor do campo de entrada de texto out_ti, voc poder alterar o evento de focusOut para change. 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 conexo bidirecional foi criada com xito.

4.

610

Criando interao com o ActionScript

Voc pode usar as classes Binding com a maioria dos componentes de interface de usurio da verso 2 da Arquitetura de Componentes Macromedia, e no apenas com o componente TextInput. O exemplo a seguir demonstra como usar o ActionScript para vincular instncias CheckBox e componentes Label durante a execuo.
Para usar classes de vinculao com o componente CheckBox:
1. 2.

Crie um novo documento do Flash. Selecione File (Arquivo) > Save As (Salvar como) e atribua o nome checkbox_as.fla ao novo arquivo. Selecione Window > Common Libraries > Classes. Arraste uma cpia da classe DataBindingClasses para a biblioteca do documento. Arraste uma cpia do componente CheckBox para o Stage e atribua o nome de instncia my_ch a ela. Arraste uma cpia do componente Label para o Stage e atribua o nome de instncia my_lbl a ela. Crie uma nova camada e atribua o nome actions a ela. Adicione o seguinte ActionScript ao Frame 1 da camada Actions:
var srcEndPoint:Object = {component:my_ch, property:"selected", event:"click"}; var destEndPoint:Object = {component:my_lbl, property:"text"}; new mx.data.binding.Binding(srcEndPoint, destEndPoint);

3. 4. 5.

6.

7. 8.

Use objetos para definir os pontos finais em vez de criar novas instncias da classe EndPoint, conforme demonstrado nos exerccios anteriores desta seo. O trecho de cdigo desta etapa cria dois objetos, que funcionam como pontos finais da vinculao. Crie a vinculao ao chamar o construtor da classe Binding. Para reduzir ainda mais a quantidade de cdigo (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 cdigo, mas tambm a digitao a ser feita. Se compartilhar seus arquivos FLA (ou ActionScript), possvel que voc deseje usar o primeiro trecho do ActionScript, por ser mais fcil de ser compreendido.

Criando vinculaes de dados durante a execuo com o ActionScript

611

Usando componentes, vinculaes e formatadores personalizados


Os formatadores personalizados o ajudam a formatar dados complexos de uma maneira especfica. Voc tambm pode usar a formatao personalizada para auxiliar na exibio de imagens, textos em formato HTML ou outros componentes dentro de um componente como DataGrid. O exemplo a seguir ilustra a utilidade dos formatadores personalizados.
Para usar formatadores personalizados em um documento:
1.

Crie um novo arquivo FLA e adicione a classe DataBindingClasses biblioteca (Window > Common Libraries > Classes). Arraste uma cpia do componente DateChooser para o Stage e atribua o nome de instncia my_dc a ela. Arraste uma cpia do componente Label para o Stage e atribua o nome de instncia my_lbl a ela. Insira uma nova camada e atribua o nome actions a ela. Adicione o seguinte cdigo ActionScript ao Frame 1 da camada Actions:
import mx.data.binding.*; var src:EndPoint = new EndPoint(); src.component = my_dc; src.property = "selectedDate"; src.event = "change"; var dest:EndPoint = new EndPoint(); dest.component = my_lbl; dest.property = "text"; new Binding(src, dest);

2.

3.

4. 5.

Este cdigo cria uma vinculao entre a propriedade selectedDate de DateChooser e a propriedade text do componente Label no Stage. Toda vez que voc clica em uma nova data no calendrio, a data selecionada aparece no componente Label.
6.

Salve o documento do Flash como customformat.fla em um local conveniente em seu disco rgido. (Voc o reciclar no prximo exerccio.) Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento. Tente alterar as datas no componente Calendar para exibir a data selecionada no momento no componente Label. O componente Label no tem largura suficiente para exibir a data inteira, portanto o Flash corta o texto.

7.

8.

Feche o arquivo SWF de teste e retorne ao ambiente de criao.

612

Criando interao com o ActionScript

Redimensione o componente Label no Stage ou selecione o componente e defina a propriedade autoSize como left na guia Parameters (Parmetros) do inspetor Properties.
9.

Selecione Control > Test Movie para testar o documento novamente. Agora, o campo de texto exibe a data inteira, embora ela esteja confusa e precise de formatao. Dependendo do seu fuso horrio e da data selecionada, a data poder ter uma aparncia como esta: Thu Nov 4 00:00:00 GMT-0800 2004 Apesar de a vinculao funcionar corretamente e exibir a propriedade selectedDate, essas datas no so facilmente compreendidas pelo usurio. Nenhuma pessoa deseja ver diferenas de fuso horrio nem voc talvez deseje exibir as horas, os minutos e os segundos. Voc precisa encontrar uma maneira de formatar a data para torn-la mais legvel e um pouco menos mecnica. Os formatadores personalizados so particularmente teis para a formatao de texto.

Formatando dados com a classe CustomFormatter


A classe CustomFormatter define dois mtodos, format() e unformat(), que permitem transformar os valores de dados de um tipo de dados especfico em um tipo String e vice-versa. Por padro, esses mtodos no fazem nada; voc deve implement-los em uma subclasse de mx.data.binding.CustomFormatter. A classe CustomFormatter permite converter os tipos de dados em seqncias de caracteres e revert-los. Neste caso, voc deseja converter a propriedade selectedDate do componente DateChooser em uma seqncia de caracteres bem formatada quando o valor for copiado para o componente Label. O exemplo a seguir mostra como criar o seu prprio formatador personalizado, que exibe a data como NOV 4, 2004, em vez de exibir uma seqncia de caracteres de data padro.
N OT A

Faa o exerccio de Usando componentes, vinculaes e formatadores personalizados na pgina 612 antes de comear este.

Para formatar dados com a classe CustomFormatter:


1.

Selecione File (Arquivo) > New (Novo) e escolha ActionScript File (Arquivo do ActionScript) para criar um novo arquivo AS. Selecione File > Save As (Salvar como) e salve o novo arquivo como DateFormat.as. Digite o seguinte cdigo na janela Script:
class DateFormat extends mx.data.binding.CustomFormatter { function format(rawValue:Date):String { var returnValue:String; var monthName_array:Array = ["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","D EC"];

2. 3.

Criando vinculaes de dados durante a execuo com o ActionScript

613

returnValue = monthName_array[rawValue.getMonth()]+" "+rawValue.getDate()+", "+rawValue.getFullYear(); return returnValue; } }

A primeira seo de cdigo 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 vinculao no arquivo de componente DataBindingClasses, para que voc pode v-las diretamente ou localiz-las na pasta Classes, no diretrio de instalao do Flash. O nico mtodo usado o format(), que converte a instncia de data em um formato de seqncia de caracteres personalizado. A prxima etapa consiste em criar um array de nomes de meses para que o resultado final tenha uma aparncia prxima de NOV 4, 2004, em vez do formato de data padro. Lembre-se de que os arrays tm zero como base no Flash, portanto, se o valor de rawValue.getMonth() retornar 1, ele representar fevereiro, e no janeiro (pois janeiro corresponde ao ms 0). O cdigo restante cria a seqncia de caracteres formatada personalizada concatenando valores e retornando a seqncia 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 no est prontamente disponvel 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 { Total ActionScript Errors: 1 Reported Errors: 1

O seu cdigo provavelmente est correto. Esse problema ocorre quando o Flash no consegue localizar a classe e, portanto, ocorre falha na verificao da sintaxe.
4. 5.

Salve o arquivo DateFormat.as. Abra customformat.fla do exerccio em Usando componentes, vinculaes e formatadores personalizados. Verifique se salvou ou copiou DateFormat.as para o mesmo diretrio desse arquivo. Em customformat.fla, modifique o cdigo ActionScript no Frame 1 da camada Actions de acordo com o cdigo 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();

6.

614

Criando interao com o ActionScript

dest.component = my_lbl; dest.property = "text"; new Binding(src, dest, {cls:mx.data.formatters.Custom, settings:{classname:"DateFormat", classname_class:DateFormat}});

Agora, defina um objeto customFormatter, que informe ao Flash que voc est utilizando a classe DateFormat criada recentemente para formatar o ponto final na vinculao.
7.

Salve as alteraes no documento e selecione Control > Test Movie para testar o cdigo.

Adicionando e vinculando componentes no Stage


Uma das maiores vantagens de usar as classes de vinculao com o ActionScript poder criar vinculaes entre componentes adicionados ao Stage pelo Flash durante a execuo. Imagine criar sua prpria classe personalizada que adicione os campos de texto apropriados ao Stage durante a execuo e, em seguida, validar os dados necessrios e adicionar as devidas vinculaes. Se tiver os componentes em sua biblioteca, voc poder adicion-los dinamicamente e usar algumas linhas extras de cdigo para criar vinculaes.
Para adicionar e vincular componentes no Stage com o ActionScript:
1. 2. 3. 4.

Crie um novo documento do Flash. Arraste um componente ComboBox e Label para a biblioteca do documento. Insira uma nova camada e atribua o nome actions a ela. Adicione o seguinte cdigo ao Frame 1 da camada Actions:
import mx.data.binding.*; this.createClassObject(mx.controls.ComboBox, "my_cb", 1, {_x:10, _y:10}); this.createClassObject(mx.controls.Label, "my_lbl", 2, {_x:10, _y:40}); my_cb.addItem("JAN", 0); my_cb.addItem("FEB", 1); my_cb.addItem("MAR", 2); my_cb.addItem("APR", 3); my_cb.addItem("MAY", 4); my_cb.addItem("JUN", 5); var src:EndPoint = new EndPoint(); src.component = my_cb; src.property = "value"; src.event = "change"; var dest:EndPoint = new EndPoint(); dest.component = my_lbl; dest.property = "text"; new Binding(src, dest);

Criando vinculaes de dados durante a execuo com o ActionScript

615

A primeira linha do ActionScript importa as classes do pacote mx.data.binding, de modo que voc no precise usar caminhos totalmente qualificados em seu cdigo. As duas linhas seguintes do ActionScript anexam os componentes da biblioteca do documento ao Stage. Em seguida, posicione os componentes no Stage. Finalmente, adicione dados instncia ComboBox e crie a vinculao entre o componente ComboBox my_cb e Label my_lbl no Stage.

Desconstruindo um script de exemplo


No arquivo SWF de exemplo file zapper.swf (que pode ser exibido no Using Flash Help (Ajuda de Usando o Flash)), quando um usurio arrasta a joaninha para a tomada eltrica, a joaninha cai e a tomada treme. A timeline principal possui apenas um quadro e contm trs objetos: a joaninha, a tomada e um boto de redefinio. Cada objeto uma instncia de clipe de filme.

O script a seguir anexado ao Frame 1 da Timeline principal:


var initx:Number = bug_mc._x; var inity:Number = bug_mc._y; var zapped:Boolean = false; 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() {

616

Criando interao com o ActionScript

if (this.hitTest(this._parent.zapper_mc)) { this.stopDrag(); zapped = true; bug_mc._alpha = 75; bug_mc._rotation = 20; this._parent.zapper_mc.play(); } if (zapped) { bug_mc._y += 25; } };

O nome de instncia da joaninha bug_mc, e o nome de instncia da tomada zapper_mc. No script, a referncia joaninha feita com this, pois o script est anexado joaninha, e a palavra reservada this refere-se ao objeto que o contm. H manipuladores de eventos com vrios eventos diferentes: onRelease(), onPress() e onEnterFrame(). Os manipuladores de eventos so definidos no Frame 1 aps o carregamento do arquivo SWF. As aes no manipulador de eventos onEnterFrame() so executadas sempre que a reproduo entra em um quadro. Mesmo em um arquivo SWF com apenas um quadro, a reproduo ainda entra nesse quadro repetidamente e o script executado tambm repetidamente. Duas variveis, initx e inity, so definidas para armazenar as posies iniciais x e y da instncia de clipe de filme bug_mc. A funo definida e atribuda ao manipulador de eventos onRelease da instncia reset_btn. Essa funo chamada todas as vezes que o boto do mouse pressionado e liberado sobre o boto reset_btn. A funo recoloca a joaninha na posio inicial no Stage, redefine seus valores de rotao e alfa e redefine a varivel zapped como false. Uma instruo if condicional usa o mtodo hitTest() para verificar se a instncia da joaninha entra em contato com a instncia da tomada (this._parent.zapper_mc). H dois resultados possveis para a avaliao: true ou false:

Se o mtodo hitTest() retornar true, o Flash chamar o mtodo stopDrag(), definir a varivel zapper_mc como true, modificar as propriedades alpha e rotation e instruir a instncia zapped para ser reproduzida. Se o mtodo hitTest() retornar false, no ser executado nenhum cdigo entre chaves {} logo aps a instruo if.

Desconstruindo um script de exemplo

617

As aes na instruo onPress() so executadas quando o boto do mouse pressionado sobre a instncia bug_mc. As aes na instruo onRelease() so executadas quando o boto do mouse pressionado sobre a instncia bug_mc. A ao startDrag() permite arrastar a joaninha. Como o script est anexado instncia bug_mc, a palavra-chave this indica que a instncia bug a que pode ser arrastada:
bug_mc.onPress = function() { this.startDrag(); };

A ao stopDrag() interrompe a ao arrastar:


bug_mc.onRelease = function() { this.stopDrag(); };

618

Criando interao com o ActionScript

CAPTULO 15

Trabalhando com imagens, som e vdeo


Se voc importar uma imagem ou um som ao criar um documento no Macromedia Flash Basic 8 ou no Macromedia Flash Professional 8, a imagem e o som sero empacotados e armazenados em um arquivo SWF quando ele for publicado. Alm de importar mdia durante a criao, possvel carregar mdia externa, incluindo outros arquivos SWF, durante a execuo. Talvez seja conveniente manter a mdia fora do documento do Flash por vrios motivos.
Reduzir o tamanho do arquivo Mantendo arquivos grandes de mdia fora do documento do Flash e carregando-os durante a execuo, voc pode reduzir o tempo de download inicial dos aplicativos e das apresentaes, principalmente em conexes lentas com a Internet. Criar mdulos de apresentaes grandes Voc pode dividir uma apresentao ou um aplicativo grande em vrios arquivos SWF e depois carregar esses arquivos separados conforme necessrio durante a execuo. Esse processo reduz o tempo de download inicial e tambm facilita a manuteno e a atualizao da apresentao. Separar o contedo da apresentao

15

Este um tema comum no desenvolvimento de aplicativos, principalmente aplicativos orientados a dados. Por exemplo, um aplicativo de carrinho de compras pode exibir uma imagem de cada produto. Ao carregar cada imagem durante a execuo, voc pode atualizar facilmente a imagem de um produto sem modificar o arquivo FLA original.

Aproveitar os recursos especficos de tempo de execuo

Alguns recursos, como reproduo de MP3 e FLV (Flash Video) carregado dinamicamente, s esto disponveis durante a execuo por meio do ActionScript.

619

Esta seo descreve como trabalhar com arquivos de imagem, de som e vdeo FLV em aplicativos Flash. Para obter mais informaes, consulte os seguintes tpicos:
Sobre o carregamento e o trabalho com mdia externa . . . . . . . . . . . . . . . . . . . . . . 620 Carregando arquivos SWF e de imagem externos . . . . . . . . . . . . . . . . . . . . . . . . . . . 621 Sobre o carregamento e o uso de arquivos MP3 externos. . . . . . . . . . . . . . . . . . . .626 Atribuindo vinculao a recursos da biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 Sobre o uso de vdeo FLV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .632 Sobre a criao de animaes do progresso para arquivos de mdia . . . . . . . . . .654

Sobre o carregamento e o trabalho com mdia externa


Vrios tipos de arquivos de mdia podem ser carregados em um aplicativo Flash durante a execuo: arquivos SWF, MP3, JPEG, GIF, PNG e FLV. Entretanto, nem todas as verses do Flash Player oferecem suporte a cada tipo de mdia. Para obter mais informaes sobre os tipos de arquivos de imagens com suporte no Macromedia Flash Player 8, consulte Carregando arquivos SWF e de imagem externos na pgina 621. Para obter informaes sobre o suporte a vdeo FLV no Flash Player, consulte Sobre o uso de vdeo FLV na pgina 632 O Macromedia Flash Player pode carregar mdia externa de qualquer endereo HTTP ou FTP, de um disco local usando um caminho relativo ou por meio do protocolo file://. Para carregar arquivos SWF e de imagem externos, voc pode usar a funo loadMovie() ou loadMovieNum() , o mtodo MovieClip.loadMovie() ou o mtodo MovieClipLoader.loadClip(). Os mtodos de classes geralmente fornecem mais funcionalidade e flexibilidade do que as funes globais e so adequados para a maioria dos aplicativos complexos. Ao carregar um arquivo SWF ou de imagem, especifique um clipe de filme ou um nvel de arquivo SWF como o destino dessa mdia. Para obter mais informaes sobre como carregar arquivos SWF e de imagem, consulte Carregando arquivos SWF e de imagem externos na pgina 621. Para reproduzir um arquivo MP3 externo, use o mtodo loadSound() da classe Sound. Esse mtodo permite especificar se o download do arquivo MP3 deve ser progressivo ou se deve ser totalmente concludo antes de ser iniciada a reproduo. Tambm possvel ler as informaes de ID3 incorporadas nos arquivos MP3, se estiverem disponveis. Para obter mais informaes, consulte Lendo marcas de ID3 em arquivos MP3 na pgina 630.

620

Trabalhando com imagens, som e vdeo

O Flash Video o formato de vdeo nativo usado pelo Flash Player. Os arquivos FLV podem ser reproduzidos por meio de HTTP ou do sistema de arquivos local. A reproduo de arquivos FLV externos oferece diversas vantagens em relao incorporao de vdeo em um documento do Flash, como melhor gerenciamento de desempenho e de memria, alm de taxas de quadros de vdeo e do Flash independentes. Para obter mais informaes, consulte Reproduzindo arquivos FLV externos dinamicamente na pgina 635. Voc tambm pode pr-carregar ou controlar o progresso do download da mdia externa. O Flash Player 7 apresenta a classe MovieClipLoader, que pode ser usada para controlar o progresso do download de arquivos SWF ou de imagem. Para pr-carregar arquivos MP3 e FLV, possvel usar o mtodo getBytesLoaded() da classe Sound e a propriedade bytesLoaded da classe NetStream. Para obter mais informaes, consulte Pr-carregando arquivos FLV na pgina 639. H exemplos de aplicativos de galeria de fotos em seu disco rgido. Esses arquivos mostram como usar o ActionScript para controlar clipes de filme dinamicamente ao carregar arquivos de imagem em um arquivo SWF. Os arquivos de origem de exemplo, gallery_tree.fla e gallery_tween.fla, esto localizados na pasta Samples do disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Carregando arquivos SWF e de imagem externos


Para carregar um arquivo SWF ou de imagem, use a funo global loadMovie() ou loadMovieNum(), o mtodo loadMovie() da classe MovieClip ou o mtodo loadClip() da classe MovieClipLoader. Para obter mais informaes sobre o mtodo loadClip(), consulte MovieClipLoader.loadClip() em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0). O Flash Player 8 oferece suporte aos seguintes tipos de arquivo de imagem: JPEG (progressivo e no progressivo), GIF (transparente e no transparente, embora apenas o primeiro quadro de um GIF animado seja carregado) e PNG (transparente e no transparente). Para carregar um arquivo SWF ou de imagem em um nvel no Flash Player, use a funo loadMovieNum(). Para carregar um arquivo SWF ou de imagem em um destino de clipe de filme, use a funo ou o mtodo loadMovie(). Em qualquer um dos casos, o contedo carregado substitui o contedo do nvel especificado ou do destino de clipe de filme.

Carregando arquivos SWF e de imagem externos

621

Quando voc carrega um arquivo SWF ou de imagem em um destino de clipe de filme, o canto superior esquerdo do arquivo SWF ou da imagem posicionado no ponto de registro do clipe. Como geralmente esse ponto o centro do clipe de filme, o contedo carregado pode no aparecer centralizado. Alm disso, quando um arquivo SWF ou de imagem carregado em uma Timeline (Linha de tempo) raiz, o canto superior esquerdo da imagem posicionado no canto superior esquerdo do Stage (Palco). O contedo carregado herda a rotao e o dimensionamento do clipe de filme, mas o contedo original do clipe do filme removido. Como opo, voc pode enviar variveis do ActionScript com uma chamada loadMovie() ou loadMovieNum(). Isso ser til, por exemplo, se o URL especificado na chamada do mtodo for um script de servidor que retorna um arquivo SWF ou de imagem, de acordo com os dados passados pelo aplicativo Flash. Ao usar a funo global loadMovie() ou loadMovieNum(), especifique o nvel ou clipe de destino como parmetro. Por exemplo, o cdigo a seguir carrega o aplicativo contents.swf do Flash na instncia de clipe de filme chamada image_mc:
loadMovie("contents.swf", image_mc);

Voc pode usar MovieClip.loadMovie() para obter o mesmo resultado:


image_mc.loadMovie("contents.swf");

O exemplo a seguir carrega a imagem JPEG image1.jpg na instncia de clipe de filme image_mc:
image_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");

Para obter mais informaes sobre como carregar arquivos SWF e de imagem externos, consulte Sobre o carregamento de arquivos SWF e a Timeline raiz na pgina 625. Para pr-carregar arquivos SWF e JPEG em instncias 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 vrios arquivos ou criar um objeto separado para controlar o progresso de cada arquivo. Crie um novo clipe de filme, carregue o seu contedo nele e crie o objeto MovieClipLoader, como mostra o seguinte cdigo: this.createEmptyMovieClip("img_mc", 999); var my_mcl:MovieClipLoader = new MovieClipLoader();

622

Trabalhando com imagens, som e vdeo

Criar um objeto ouvinte e manipuladores de eventos

O objeto ouvinte pode ser qualquer objeto do ActionScript, como um objeto Object genrico, um clipe de filme ou um componente personalizado. O exemplo a seguir cria um objeto ouvinte genrico chamado loadListener e define para ele mesmo as funes onLoadError, onLoadStart, onLoadProgress e onLoadComplete:

// Criar objeto ouvinte: var mclListener:Object = new Object(); mclListener.onLoadError = function(target_mc:MovieClip, errorCode:String, status:Number) { trace("Error loading image: " + errorCode + " [" + status + "]"); }; mclListener.onLoadStart = function(target_mc:MovieClip):Void { trace("onLoadStart: " + target_mc); }; mclListener.onLoadProgress = function(target_mc:MovieClip, numBytesLoaded:Number, numBytesTotal:Number):Void { var numPercentLoaded:Number = numBytesLoaded / numBytesTotal * 100; trace("onLoadProgress: " + target_mc + " is " + numPercentLoaded + "% loaded"); }; mclListener.onLoadComplete = function(target_mc:MovieClip, status:Number):Void { trace("onLoadComplete: " + target_mc); };
N OT A N O TA

O Flash Player 8 permite verificar o status HTTP do download de MovieClipLoader nos ouvintes de eventos onLoadComplete e onLoadError. Dessa maneira, voc pode verificar por que o download do arquivo no ocorreu, ou seja, se a causa foi um erro do servidor, se no foi possvel localizar o arquivo e assim por diante.

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 cdigo:

my_mcl.addListener(mclListener);

Para iniciar o download do arquivo de imagem ou SWF, use o mtodo MovieClipLoader.loadClip(), como mostra o seguinte cdigo:
Comear a carregar o arquivo (de imagem ou SWF) em um clipe de destino my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc); Somente os mtodos MovieClipLoader podem ser usados para controlar o progresso do download de arquivos carregados com o mtodo MovieClipLoader.loadClip(). No possvel usar a funo loadMovie() nem o mtodo MovieClip.loadMovie().

Carregando arquivos SWF e de imagem externos

623

O exemplo a seguir usa o mtodo setProgress() do componente ProgressBar para exibir o progresso do download de um arquivo SWF. (Consulte ProgressBar.setProgress() em ActionScript 2.0 Language Reference.)
Para exibir o progresso do download com o componente ProgressBar:
1. 2. 3. 4.

Crie um novo documento do Flash e salve-o como progress.fla. Abra o painel Components (Componentes), em Window (Janela) > Components. Arraste um componente ProgressBar do painel Components at o Stage (Palco). No inspetor Properties (Propriedades), em Window > Properties > Properties, atribua o nome my_pb ao componente ProgressBar. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e abra o painel Actions (Aes), em Window > Actions. Adicione o seguinte cdigo ao painel Actions:
var my_pb:mx.controls.ProgressBar; my_pb.mode = "manual"; this.createEmptyMovieClip("img_mc", 999); var my_mcl:MovieClipLoader = new MovieClipLoader(); var mclListener:Object = new Object(); mclListener.onLoadStart = function(target_mc:MovieClip):Void { my_pb.label = "loading: " + target_mc._name; }; mclListener.onLoadProgress = function(target_mc:MovieClip, numBytesLoaded:Number, numBytesTotal:Number):Void { var pctLoaded:Number = Math.ceil(100 * (numBytesLoaded / numBytesTotal)); my_pb.setProgress(numBytesLoaded, numBytesTotal); }; my_mcl.addListener(mclListener); my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc);

5.

6.

7.

Teste o documento selecionando Control (Controlar) > Test Movie (Testar filme). A imagem carregada no clipe de filme img_mc. Selecione File (Arquivo) > Publish (Publicar) > Formats (Formatos) e verifique se as opes SWF e HTML esto selecionadas. Clique em Publish (Publicar) e localize os arquivos HTML e SWF no disco rgido. Eles esto na mesma pasta do arquivo progress.fla salvo na etapa 1.

8.

9.

624

Trabalhando com imagens, som e vdeo

10. Clique duas vezes no documento HTML para abri-lo em um navegador e veja a animao

da barra de progresso.
NO T A

Ao carregar arquivos no ambiente de teste, para ver o funcionamento da barra de progresso, certifique-se de carregar da Internet um arquivo no armazenado em cache, em vez de um arquivo local. Como os arquivos locais so carregados muito rpido, no possvel ver o progresso desse processo. Opcionalmente, faa upload do arquivo SWF e teste o seu documento em um servidor.

Para obter informaes relacionadas, consulte Sobre o carregamento de arquivos SWF e a Timeline raiz na pgina 625. Para obter mais informaes sobre a classe MovieClipLoader, consulte %{MovieClipLoader}% em ActionScript 2.0 Language Reference. Para obter informaes sobre a criao de animao para uma barra de progresso, consulte Criando uma animao do progresso para carregar arquivos SWF e de imagem na pgina 655. H exemplos de aplicativos de galeria de fotos em seu disco rgido. Esses arquivos mostram como usar o ActionScript para controlar clipes de filme dinamicamente ao carregar arquivos de imagem em um arquivo SWF. Os arquivos de origem de exemplo, gallery_tree.fla e gallery_tween.fla, esto localizados na pasta Samples do disco rgido. No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Sobre o carregamento de arquivos SWF e a Timeline raiz


A propriedade _root, do ActionScript especifica ou retorna uma referncia para a Timeline (Linha de tempo) raiz de um arquivo SWF. Se voc carregar um arquivo SWF em um clipe de filme contido em outro arquivo SWF, todas as referncias a _root no arquivo SWF carregado sero resolvidas para a Timeline raiz do arquivo SWF do host, e no para a do arquivo SWF carregado. s vezes, isso poder ocasionar um comportamento inesperado durante a execuo (por exemplo, se tanto o arquivo SWF do host como o carregado usarem _root para especificar uma varivel).

Carregando arquivos SWF e de imagem externos

625

No Flash Player 7 e verses posteriores, possvel usar a propriedade %{_lockroot para forar que as referncias a _root feitas por um clipe de filme sejam resolvidas para sua prpria Timeline, em vez de para a Timeline do arquivo SWF que contm esse clipe. Para obter mais informaes, consulte Especificando uma Timeline raiz para arquivos SWF carregados na pgina 374. Para obter mais informaes sobre o uso de _root e _lockroot, consulte Captulo 19, Melhores prticas e convenes de codificao para ActionScript 2.0, na pgina 767.
(MovieClip._lockroot property)}%

Um arquivo SWF pode carregar outro arquivo SWF de qualquer local da Internet. Entretanto, para que um arquivo SWF acesse dados (variveis, mtodos etc.) definidos em outro arquivo SWF, ambos devem ter o mesmo domnio de origem. No Flash Player 7 e verses posteriores, os scripts entre domnios so proibidos, a menos que o arquivo SWF carregado indique o contrrio chamando System.security.allowDomain(). Para obter mais informaes sobre System.security.allowDomain, consulte %{allowDomain (security.allowDomain method)}% em ActionScript 2.0 Language Reference e Sobre domnios, segurana entre domnios e arquivos SWF na pgina 727.

Sobre o carregamento e o uso de arquivos MP3 externos


Para carregar arquivos MP3 durante a execuo, use o mtodo loadSound() da classe Sound. Primeiro, crie um objeto Sound, como mostra o seguinte exemplo:
var song1_sound:Sound = new Sound();

Use o novo objeto para chamar loadSound() e carregar um som de evento ou um fluxo de som. Os sons de evento so totalmente carregados antes da reproduo; os fluxos de som so reproduzidos durante o download. Defina o parmetro 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 mtodo start() da classe Sound para reproduzir o som. Os fluxos de som comeam a ser reproduzidos quando h dados suficientes carregados no arquivo SWF; no necessrio usar start(). Por exemplo, o cdigo 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);

626

Trabalhando com imagens, som e vdeo

Na maioria dos casos, defina o parmetro isStreaming como true, principalmente se estiver carregando arquivos grandes de som cuja reproduo deve iniciar o mais rpido possvel, por exemplo, ao criar um aplicativo jukebox MP3. Contudo, se estiver fazendo download de clipes de som menores e precisar reproduzi-los em um determinado momento (por exemplo, quando o usurio clica em um boto), defina isStreaming como false.
Sound.onLoad.

Para determinar se o download de um som foi concludo, use o manipulador de eventos Esse manipulador de eventos recebe automaticamente um valor booleano (true ou false) que indica se o download do arquivo foi concludo com xito. Para obter mais informaes, consulte os seguintes tpicos: Carregando um arquivo MP3 na pgina 627 Pr-carregando arquivos MP3 na pgina 628 Lendo marcas de ID3 em arquivos MP3 na pgina 630

A pasta Samples do seu disco rgido contm um arquivo de origem de exemplo, jukebox.fla, que carrega arquivos MP3. Esse exemplo demonstra como criar um jukebox usando tipos de dados, princpios gerais de codificao e vrios componentes:

No Windows, navegue at unidade de inicializao\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.

Carregando um arquivo MP3


Suponha que voc esteja criando um jogo on-line que utilize diferentes sons dependendo do nvel alcanado pelo usurio no jogo. O cdigo a seguir carrega um arquivo MP3 (song2.mp3) no objeto Sound game_sound e reproduz o som quando o download do arquivo concludo.
Para carregar um arquivo MP3:
1. 2.

Crie um novo arquivo FLA chamado loadMP3.fla. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
var game_sound:Sound = new Sound(); game_sound.onLoad = function(success:Boolean):Void { if (success) { trace("Sound Loaded"); game_sound.start(); }

Sobre o carregamento e o uso de arquivos MP3 externos

627

}; game_sound.loadSound("http://www.helpexamples.com/flash/sound/song2.mp3" false); 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 execuo. Para obter mais informaes, consulte Sound.loadSound(), Sound.start() e Sound.onLoad em ActionScript 2.0 Language Reference. Para obter informaes sobre como pr-carregar arquivos MP3, consulte Pr-carregando arquivos MP3 na pgina 628. Para obter informaes sobre a criao de animao 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 pgina 657. A pasta Samples do seu disco rgido contm um arquivo de origem de exemplo, jukebox.fla, que carrega arquivos MP3. Esse exemplo demonstra como criar um jukebox usando tipos de dados, princpios gerais de codificao e vrios componentes.

No Windows, navegue at unidade de inicializao\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.

Pr-carregando arquivos MP3


Ao pr-carregar arquivos MP3, use a funo setInterval() a fim de criar um mecanismo de pesquisa que verifique os bytes carregados para um objeto Sound ou NetStream em intervalos predeterminados. Para controlar o progresso do download de arquivos MP3, use os mtodos Sound.getBytesLoaded() e Sound.getBytesTotal(). O exemplo a seguir usa a funo setInterval() para verificar os bytes carregados para um objeto Sound em intervalos predeterminados.
Para pr-carregar um arquivo MP3:
1. 2.

Crie um novo arquivo FLA chamado preloadMP3.fla. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
// Criar um novo objeto Sound para reproduzir o som. var songTrack:Sound = new Sound(); // Criar a funo de pesquisa que controla o progresso do download. // Esta a funo que "pesquisada". Ela verifica // o progresso do download do objeto Sound passado como referncia. function checkProgress (soundObj:Object):Void {

628

Trabalhando com imagens, som e vdeo

var numBytesLoaded:Number = soundObj.getBytesLoaded(); var numBytesTotal:Number = soundObj.getBytesTotal(); var numPercentLoaded:Number = Math.floor(numBytesLoaded / numBytesTotal * 100); if (!isNaN(numPercentLoaded)) { trace(numPercentLoaded + "% loaded."); } }; // Quando o arquivo tiver sido carregado, limpar o intervalo de pesquisa. songTrack.onLoad = function ():Void { trace("load complete"); clearInterval(poll); }; // Carregar o arquivo MP3 de fluxo e comear a chamar checkProgress(), songTrack.loadSound("http://www.helpexamples.com/flash/sound/song1.mp3", true); var poll:Number = setInterval(checkProgress, 100, songTrack); 3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o som. O painel Output (Sada) mostra o progresso do carregamento.

A tcnica de pesquisa pode ser usada para pr-carregar arquivos FLV externos. Para obter o nmero total de bytes e o nmero atual de bytes carregados para um arquivo FLV, use as propriedades NetStream.bytesLoaded e NetStream.bytesTotal (para obter mais informaes, consulte %{bytesLoaded (NetStream.bytesLoaded property)}% e %{bytesTotal (NetStream.bytesTotal property)}% ). Para obter mais informaes, consulte MovieClip.getBytesLoaded(), MovieClip.getBytesTotal(), setInterval(), Sound.getBytesLoaded() e Sound.getBytesTotal() em ActionScript 2.0 Language Reference. Para obter informaes sobre a criao de animao para uma barra de progresso, consulte Criando uma barra de progresso para carregar arquivos MP3 com o ActionScript na pgina 657. A pasta Samples do seu disco rgido contm um arquivo de origem de exemplo, jukebox.fla, que carrega arquivos MP3. Esse exemplo demonstra como criar um jukebox usando tipos de dados, princpios gerais de codificao e vrios componentes.

No Windows, navegue at unidade de inicializao\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.

Sobre o carregamento e o uso de arquivos MP3 externos

629

Lendo marcas de ID3 em arquivos MP3


As marcas de ID3 so campos de dados adicionados a um arquivo MP3. Elas contm informaes sobre o arquivo, como o nome de uma msica, de um lbum e de um artista. Para ler as marcas de ID3 de um arquivo MP3, use a propriedade Sound.id3, cujas propriedades correspondem aos nomes das marcas de ID3 includas no arquivo MP3 que est sendo carregado. Para determinar quando as marcas de ID3 de um arquivo MP3 que est sendo carregado estaro disponveis, use o manipulador de eventos Sound.onID3. O Flash Player 7 oferece suporte a marcas das verses 1.0, 1.1, 2.3 e 2.4. No h suporte para marcas da verso 2.2. O exemplo a seguir carrega um arquivo MP3 chamado song1.mp3 no objeto Sound song_sound . Quando as marcas de ID3 do arquivo estiverem disponveis, o campo de texto display_txt exibir o nome do artista e da msica.
Para ler marcas de ID3 em um arquivo MP3:
1. 2.

Crie um novo arquivo FLA chamado id3.fla. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
this.createTextField("display_txt", this.getNextHighestDepth(), 0, 0, 100, 100); display_txt.autoSize = "left"; display_txt.multiline = true; var song_sound:Sound = new Sound(); song_sound.onLoad = function() { song_sound.start(); }; song_sound.onID3 = function():Void { display_txt.text += "Artist:\t" + song_sound.id3.artist + "\n"; display_txt.text += "Song:\t" + song_sound.id3.songname + "\n"; }; song_sound.loadSound("http://www.helpexamples.com/flash/sound/ song1.mp3");

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 esto localizadas no incio do arquivo MP3 (antes dos dados de som), elas ficam disponveis assim que o download do arquivo iniciado. Contudo, as marcas do ID3 1.0 esto localizadas no final do arquivo (depois dos dados de som) e, portanto, s ficaro disponveis quando o download de todo o arquivo MP3 for concludo.

630

Trabalhando com imagens, som e vdeo

O manipulador de eventos onID3 chamado sempre que estiverem disponveis novos dados ID3. Portanto, se um arquivo MP3 contiver marcas do ID3 2.0 e do ID3 1.0, o manipulador onID3 ser chamado duas vezes, pois as marcas estaro localizadas em partes diferentes do arquivo.
property)}%

Para obter uma lista de marcas de ID3 suportadas, consulte %{id3 (Sound.id3 em ActionScript 2.0 Language Reference.

A pasta Samples do seu disco rgido contm um arquivo de origem de exemplo, jukebox.fla, que carrega arquivos MP3. Esse exemplo demonstra como criar um jukebox usando tipos de dados, princpios gerais de codificao e vrios componentes:

No Windows, navegue at unidade de inicializao\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.

Atribuindo vinculao a recursos da biblioteca


Voc pode atribuir identificadores de vinculao aos recursos da biblioteca, como clipes de filme e smbolos de fonte. No Flash Basic 8 e no Flash Professional 8, possvel definir identificadores de vinculao para recursos de imagem e de som da biblioteca. Isso possibilita o uso de arquivos de imagem e de som com bibliotecas compartilhadas e com a nova classe BitmapData. O exemplo a seguir adiciona uma imagem de bitmap da biblioteca com a vinculao definida como myImage. Em seguida, a imagem adicionada ao Stage (Palco) e torna-se arrastvel.
Para usar vinculao com arquivos de bitmap:
1. 2. 3.

Crie um novo arquivo FLA chamado linkBitmap.fla. Importe uma imagem de bitmap para a biblioteca. Clique com o boto direito do mouse (Windows) ou mantenha pressionada a tecla Control ao clicar (Macintosh) na imagem na biblioteca e selecione Linkage (Vinculao) no menu de contexto. Selecione Export for ActionScript (Exportar para ActionScript) e Export in first Frame (Exportar no primeiro quadro) e digite myImage na caixa de texto Identifier (Identificador). Clique em OK para definir o identificador de vinculao.

4.

5.

Atribuindo vinculao a recursos da biblioteca

631

6.

Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
import flash.display.BitmapData; // Criar imageBmp e anexar o bitmap da biblioteca. var imageBmp:BitmapData = BitmapData.loadBitmap("myImage"); // criar o clipe de filme e anexar imageBmp this.createEmptyMovieClip("imageClip", 10); imageClip.attachBitmap(imageBmp, 2); // tornar o clipe arrastvel imageClip.onPress = function() { this.startDrag(); }; imageClip.onRelease = function() { this.stopDrag(); }

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 arrastvel.

Sobre o uso de vdeo FLV


O formato de arquivo FLV contm dados de vdeo e udio codificados para transmisso por meio do Flash Player. Por exemplo, com um arquivo de vdeo QuickTime ou Windows Media, voc usar um codificador (como o Flash 8 Video Encoder ou o Sorensen Squeeze) para converter esse arquivo em um arquivo FLV. O Flash Player 7 oferece suporte a arquivos FLV codificados com o codec de vdeo Sorenson Spark, e o Flash Player 8 a arquivos FLV codificados com o codificador Sorenson Spark ou On2 VP6 no Flash Professional 8. O codec de vdeo On2 VP6 oferece suporte a um canal alfa. O suporte a FLV est disponvel de diferentes maneiras nas diversas verses do Flash Player. Para obter mais informaes, consulte a tabela a seguir:
Codec verso do arquivo SWF (verso de publicao)
6 7 On2 VP6 6 7 8

Verso do Flash Player necessria para reproduo


6, 7 ou 8 7, 8 8* 8 8

Sorenson Spark

632

Trabalhando com imagens, som e vdeo

Se o arquivo SWF carregar um arquivo FLV, voc poder usar o vdeo On2 VP6 sem precisar republicar o arquivo SWF para o Flash Player 8, desde que os usurios utilizem o Flash Player 8 para exibir esse arquivo. Somente o Flash Player 8 oferece suporte publicao e reproduo de vdeo On2 VP6.

Para obter informaes sobre os conceitos bsicos de vdeo, como fluxo, download progressivo, dimenses, codificao, importao e questes de largura de banda, consulte Captulo 11, Trabalhando com vdeo em Usando o Flash. Esta seo aborda o uso de vdeo FLV sem componentes. Voc tambm pode usar o componente FLVPlayback para reproduzir arquivos FLV ou usar a classe VideoPlayback para criar um exibidor de vdeo personalizado que carregue arquivos FLV dinamicamente (consulte www.macromedia.com/devnet ou www.macromedia.com/support/documentation/). Para obter informaes sobre o uso de vdeo FLV com os componentes FLVPlayback e Media, consulte as seguintes sees:

FLVPlayback Component (Flash Professional Only) na pgina 505 Media components (Flash Professional only) na pgina 831

Como uma alternativa importao de vdeos diretamente para o ambiente de criao 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 endereo HTTP ou do sistema de arquivos local. Para reproduzir arquivos FLV, use as classes NetConnection e NetStream, bem como o mtodo attachVideo() da classe Video. Para obter mais informaes, consulte %{NetConnection}%, %{NetStream}% e %{attachVideo (Video.attachVideo method)}% em ActionScript 2.0 Language Reference. possvel criar arquivos FLV importando o vdeo para a ferramenta de criao do Flash e exportando-o como um arquivo FLV. Se tiver o Flash Professional 8, voc poder usar o plugin FLV Export para exportar arquivos FLV de aplicativos de edio de vdeo suportados. O uso de arquivos FLV externos oferece certos recursos que no esto disponveis quando voc usa vdeo importado:

possvel usar videoclipes mais longos nos documentos do Flash sem tornar a reproduo mais lenta. Os arquivos FLV externos so reproduzidos usando a memria cache; isso significa que arquivos grandes so armazenados em pequenas partes e acessados dinamicamente, exigindo menos memria do que os arquivos de vdeo 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 vdeo como 21 qps. Essa configurao permite melhor controle do vdeo do que o vdeo incorporado, garantindo sua reproduo contnua. Ela tambm permite reproduzir arquivos FLV com taxas de quadros diferentes, sem a necessidade de alterar o contedo existente do Flash.

Sobre o uso de vdeo FLV

633

Com arquivos FLV externos, a reproduo do documento do Flash no precisa ser interrompida enquanto o arquivo de vdeo est sendo carregado. s vezes, os arquivos de vdeo importados podem interromper a reproduo do documento para executar determinadas funes, como, por exemplo, acessar uma unidade de CD-ROM. Os arquivos FLV podem executar funes independentemente do documento do Flash e, portanto, no interrompem a reproduo. Com arquivos FLV externos, mais fcil criar legendas do contedo do vdeo, pois voc pode usar manipuladores de eventos para acessar os metadados do vdeo.
D IC A

Para carregar arquivos FLV de um servidor Web, talvez seja necessrio registrar o tipo MIME (Multipurpose Internet Mail Extensions, Extenses multipropsito do Internet Mail) e a extenso do arquivo nesse servidor; consulte a documentao do servidor. O tipo MIME dos arquivos FLV video/x-flv. Para obter mais informaes, consulte Sobre a configurao de arquivos FLV para hospedagem em um servidor na pgina 652.

Para obter mais informaes sobre vdeo FLV, consulte os seguintes tpicos:

Criando um objeto de vdeo na pgina 634 Reproduzindo arquivos FLV externos dinamicamente na pgina 635 Criando uma faixa de vdeo na pgina 636 Pr-carregando arquivos FLV na pgina 639 Trabalhando com pontos de incio na pgina 640 Trabalhando com metadados na pgina 650 Sobre a configurao de arquivos FLV para hospedagem em um servidor na pgina 652 Sobre a definio de arquivos FLV locais como destino no Macintosh na pgina 653

Criando um objeto de vdeo


Antes de carregar e manipular vdeo com o ActionScript, necessrio criar um objeto de vdeo, arrast-lo para o Stage (Palco) e atribuir um nome de instncia a ele. O exemplo a seguir descreve como adicionar uma instncia de vdeo a um aplicativo.
Para criar um objeto de vdeo:
1.

Com um documento aberto na ferramenta de criao do Flash, selecione New Video (Novo vdeo) no menu pop-up do painel Library (Biblioteca), em Window (Janela) > Library. Na caixa de dilogo Video Properties (Propriedades de vdeo), atribua um nome ao smbolo de vdeo e selecione Video (ActionScript controlled) (Vdeo controlado pelo ActionScript).

2.

634

Trabalhando com imagens, som e vdeo

3. 4.

Clique em OK para criar um objeto de vdeo. Arraste o objeto de vdeo do painel Library para o Stage (Palco) a fim de criar uma instncia desse objeto. Com o objeto de vdeo selecionado no Stage, digite my_video na caixa de texto Instance Name (Nome da instncia) do inspetor Properties (Propriedades), em Window > Properties > Properties. Agora h uma instncia do vdeo no Stage, e voc pode adicionar um cdigo ActionScript para carregar o vdeo ou manipular a instncia de vrias maneiras.

5.

Para obter informaes sobre como carregar arquivos FLV dinamicamente, consulte Reproduzindo arquivos FLV externos dinamicamente. Para obter informaes sobre a criao de uma faixa de vdeo, consulte Criando uma faixa de vdeo na pgina 636.

Reproduzindo arquivos FLV externos dinamicamente


Voc pode carregar arquivos FLV durante a execuo para reproduzi-los em um arquivo SWF. Esses arquivos podem ser carregados em um objeto de vdeo ou em um componente, como FLVPlayback. O exemplo a seguir mostra como reproduzir um arquivo chamado clouds.flv em um objeto de vdeo.
Para reproduzir um arquivo FLV externo em um documento do Flash:
1. 2.

Crie um novo documento do Flash chamado playFLV.fla. No painel Library (Biblioteca), em Window (Janela) > Library, selecione New Video (Novo vdeo) no menu pop-up Library. Na caixa de dilogo Video Properties (Propriedades de vdeo), atribua um nome ao smbolo de vdeo e selecione Video (ActionScript controlled) (Vdeo controlado pelo ActionScript). Clique em OK para criar um objeto de vdeo. Arraste o objeto de vdeo do painel Library para o Stage (Palco) a fim de criar uma instncia desse objeto. Com o objeto de vdeo selecionado no Stage, digite my_video na caixa de texto Instance Name (Nome da instncia) do inspetor Properties (Propriedades), em Window > Properties > Properties. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e abra o painel Actions (Aes), em Window > Actions. Digite o seguinte cdigo no painel Actions:
this.createTextField("status_txt", 999, 0, 0, 100, 100); status_txt.autoSize = "left";

3.

4. 5.

6.

7.

8.

Sobre o uso de vdeo FLV

635

headline_txt.html = true; // Criar um objeto NetConnection var my_nc:NetConnection = new NetConnection(); // Criar uma conexo de fluxo local my_nc.connect(null); // Criar um objeto NetStream e definir uma funo onStatus() var my_ns:NetStream = new NetStream(my_nc); my_ns.onStatus = function(infoObject:Object):Void { status_txt.text += "status (" + this.time + " seconds)\n"; status_txt.text += "\t Level: " + infoObject.level + "\n"; status_txt.text += "\t Code: " + infoObject.code + "\n\n"; }; // Anexar o fluxo de vdeo NetStream ao objeto Video my_video.attachVideo(my_ns); // Definir o tempo do buffer my_ns.setBufferTime(5); // Iniciar a reproduo do arquivo FLV my_ns.play("http://www.helpexamples.com/flash/video/clouds.flv"); 9.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento.

Para obter informaes sobre como pr-carregar arquivos FLV, consulte Pr-carregando arquivos FLV na pgina 639. Para obter informaes sobre como carregar dinamicamente vdeo FLV em componentes, consulte Creating an application with the FLVPlayback component na pgina 507. Para obter informaes sobre arquivos FLV e o servidor, bem como arquivos FLV e a reproduo desses arquivos localmente no Macintosh, consulte Sobre a configurao de arquivos FLV para hospedagem em um servidor na pgina 652.

Criando uma faixa de vdeo


O contedo de vdeo em faixas e outros anncios do Flash so geralmente usados para fins de propaganda, como para a exibio de anncios de televiso ou a visualizao de filmes do Flash. O exemplo a seguir mostra como criar uma instncia de vdeo e adicionar um cdigo ActionScript a um arquivo FLA para criar uma faixa de anncio que contm vdeo.
Para criar uma faixa de vdeo:
1. 2. 3.

Crie um novo documento do Flash chamado vidBanner.fla. Selecione Modify (Modificar) > Document (Documento). Altere as dimenses do arquivo FLA; em seguida, digite 468 e 60 nas caixas de texto de largura e altura, respectivamente. No painel Library (Biblioteca), em Window (Janela) > Library, selecione New Video (Novo vdeo) nas opes de Library.

4.

636

Trabalhando com imagens, som e vdeo

5.

Na caixa de dilogo Video Properties (Propriedades de vdeo), atribua um nome ao smbolo de vdeo e selecione Video (ActionScript controlled) (Vdeo controlado pelo ActionScript). Clique em OK para criar um objeto de vdeo. Arraste o objeto de vdeo do painel Library para o Stage (Palco) a fim de criar uma instncia do vdeo. Com o objeto de vdeo selecionado no Stage, digite my_video na caixa de texto Instance Name (Nome da instncia) do inspetor Properties (Propriedades), em Window > Properties > Properties. Com a instncia do vdeo ainda selecionada, no inspetor Properties, digite 105 e 60 nas caixas de texto de largura e altura, respectivamente. a instncia do vdeo para uma posio no Stage ou use o inspetor Properties para definir suas coordenadas x e y. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e abra o painel Actions (Aes), em Window (Janela) > Actions. o seguinte cdigo ao painel Actions:
var my_nc:NetConnection = new NetConnection(); my_nc.connect(null); var my_ns:NetStream = new NetStream(my_nc); my_video.attachVideo(my_ns); my_ns.setBufferTime(5); my_ns.play("http://www.helpexamples.com/flash/video/vbanner.flv");

6. 7.

8.

9.

10. Arraste

11.

12. Adicione

13.

Selecione Insert (Inserir) > Timeline > Layer (Camada) para criar uma nova camada e atribua o nome button a ela. a ferramenta Rectangle (Retngulo) no painel Tools (Ferramentas). Na seo Colors (Cores) do painel Tools, clique no cone de lpis para selecionar o controle de cor do trao. Selecione No Color (Nenhuma cor), que desativa o contorno do retngulo. Arraste o ponteiro diagonalmente no Stage para criar um retngulo. O tamanho do retngulo no importante porque voc o redimensionar usando o inspetor Properties.

14. Selecione 15.

16. 17.

18.

Clique na ferramenta Selection (Seleo) no painel Tools e, em seguida, clique no retngulo no Stage para selecion-lo. o retngulo 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.

19. Com

Sobre o uso de vdeo FLV

637

20.Com 21. Na

o retngulo selecionado no Stage, pressione F8 a fim de alterar o retngulo para um smbolo. caixa de dilogo Convert to Symbol (Converter em smbolo), digite invisible btn na caixa de texto Name (Nome), selecione Button (Boto) e clique em OK. duas vezes no novo boto no Stage para entrar no modo de edio de smbolo.

22.Clique

O retngulo est no primeiro quadro Up (Para cima) do boto criado. Este o estado Up do boto, ou seja, o que os usurios vem quando o boto est no Stage. Entretanto, como o boto no deve ficar visvel no Stage, necessrio mover o retngulo para o quadro Hit (rea), que a rea sensvel do boto (a regio ativa em que o usurio pode clicar para ativar as aes do boto).
23.Clique

no quadro-chave no quadro Up e mantenha pressionado o boto do mouse enquanto arrasta o quadro-chave para o quadro Hit. Agora voc pode clicar em toda a rea da faixa, mas a aparncia do boto no exibida na faixa.

24.Clique

em Scene 1 (Cena 1) para retornar Timeline principal.

Um retngulo azulado aparece sobre a rea da faixa, representando a rea sensvel do boto invisvel.
25.Selecione 26.Selecione

o boto criado, abra o inspetor Properties e digite inv_btn na caixa de texto Instance Name (Nome da instncia). o Frame 1 da Timeline e digite o seguinte cdigo no painel Actions:

inv_btn.onRelease = function(){ getURL("http://www.macromedia.com"); }; 27. Faa

outras modificaes na faixa; por exemplo, adicione grfico ou texto. Control (Controlar) > Test Movie (Testar filme) para testar a faixa no Flash

28.Selecione

Player. Nesse exemplo, voc criou uma faixa e a redimensionou para as dimenses padronizadas estabelecidas, definidas pelo IAB (Interactive Advertising Bureau, Agncia de propaganda interativa). Para obter informaes sobre as dimenses padro de propaganda (e vrias outras diretrizes teis), consulte a pgina de padres e diretrizes do Interactive Advertising Bureau em www.iab.net/standards/adunits.asp.

638

Trabalhando com imagens, som e vdeo

Apesar das diretrizes padronizadas, confirme primeiro as diretrizes aplicveis ao servio de propaganda, ao cliente ou ao site no qual voc est anunciando. Caso submeta sua faixa a uma empresa de publicidade, verifique se o arquivo atende s diretrizes especificadas de taxas de quadros, verso do Flash Player de destino, dimenses e tamanho. Alm disso, considere as regras aplicveis aos tipos de mdia que podem ser usados, ao cdigo de boto usado no arquivo FLA e assim por diante.

Pr-carregando arquivos FLV


Para controlar o progresso do download de arquivos FLV, use as propriedades NetStream.bytesLoaded e NetStream.bytesTotal. Para obter o nmero total de bytes e o nmero atual de bytes carregados para um arquivo FLV, use as propriedades NetStream.bytesLoaded e NetStream.bytesTotal. O exemplo a seguir usa as propriedades bytesLoaded e bytesTotal que mostram o progresso do carregamento do arquivo video1.flv na instncia do objeto de vdeo chamada my_video. Um campo de texto chamado loaded_txt criado dinamicamente para mostrar informaes sobre esse processo.
Para pr-carregar um arquivo FLV:
1. 2.

Crie um novo arquivo FLA chamado preloadFLV.fla. No painel Library (Biblioteca), em Window (Janela) > Library, selecione New Video (Novo vdeo) no menu pop-up Library. Na caixa de dilogo Video Properties (Propriedades de vdeo), atribua um nome ao smbolo de vdeo e selecione Video (ActionScript controlled) (Vdeo controlado pelo ActionScript). Clique em OK para criar um objeto de vdeo. Arraste o objeto de vdeo do painel Library para o Stage (Palco) a fim de criar uma instncia desse objeto. Com o objeto de vdeo selecionado no Stage, digite my_video na caixa de texto Instance Name (Nome da instncia) do inspetor Properties (Propriedades), em Window > Properties > Properties. Com a instncia do vdeo ainda selecionada, no inspetor Properties, digite 320 e 213 nas caixas de texto de largura e altura, respectivamente. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e abra o painel Actions (Aes), em Window (Janela) > Actions.

3.

4. 5.

6.

7.

8.

Sobre o uso de vdeo FLV

639

9.

Digite o seguinte cdigo no painel Actions:


var connection_nc:NetConnection = new NetConnection(); connection_nc.connect(null); var stream_ns:NetStream = new NetStream(connection_nc); my_video.attachVideo(stream_ns); stream_ns.play("http://www.helpexamples.com/flash/video/ lights_short.flv"); this.createTextField("loaded_txt", this.getNextHighestDepth(), 10, 10, 160, 22); var loaded_interval:Number = setInterval(checkBytesLoaded, 500, stream_ns); function checkBytesLoaded(my_ns:NetStream) { var pctLoaded:Number = Math.round(my_ns.bytesLoaded / my_ns.bytesTotal * 100); loaded_txt.text = Math.round(my_ns.bytesLoaded / 1000) + " of " + Math.round(my_ns.bytesTotal / 1000) + " KB loaded (" + pctLoaded + "%)"; progressBar_mc.bar_mc._xscale = pctLoaded; if (pctLoaded >= 100) { clearInterval(loaded_interval); } }

10. Selecione
N OT A 640

Control (Controlar) > Test Movie (Testar filme) para testar o cdigo.

Se a barra de progresso for carregada instantaneamente, o vdeo ter sido armazenado em cache no disco rgido (a partir do teste deste exemplo ou do seu carregamento em outro procedimento). Se isso ocorrer, faa upload de um arquivo FLV no servidor e carregue esse arquivo.

Outra maneira de pr-carregar arquivos FLV usar o mtodo NetStream.setBufferTime(). Esse mtodo utiliza um nico parmetro que indica o nmero de segundos do fluxo de FLV a ser armazenado no buffer antes do incio da reproduo. Para obter mais informaes, consulte %{setBufferTime (NetStream.setBufferTime method)}%, %{getBytesLoaded (MovieClip.getBytesLoaded method)}%, %{getBytesTotal (MovieClip.getBytesTotal method)}%, %{bytesLoaded (NetStream.bytesLoaded property)}%, %{bytesTotal (NetStream.bytesTotal property)}% e %{setInterval function}% em ActionScript 2.0 Language Reference

Trabalhando com pontos de incio


Diversos tipos de pontos de incio podem ser usados com o Flash Video. Voc pode usar o ActionScript para interagir com pontos de incio incorporados em um arquivo FLV (ao criar esse arquivo) ou criados com o ActionScript.

Trabalhando com imagens, som e vdeo

Pontos de incio de navegao

Estes pontos so incorporados no pacote de metadados FLV e no fluxo de FLV durante a codificao do arquivo FLV. Utilize-os a fim de permitir que os usurios busquem determinada parte de um arquivo.

Pontos de incio de evento Estes pontos so incorporados no pacote de metadados FLV e no fluxo de FLV durante a codificao do arquivo FLV. Voc pode criar um cdigo para manipular os eventos que so ativados em determinados pontos durante a reproduo do FLV. Pontos de incio do ActionScript Pontos de incio externos criados com o cdigo ActionScript. Voc pode criar um cdigo para ativar esses pontos em relao reproduo do vdeo. Esses pontos so menos precisos do que os pontos de incio incorporados (at um dcimo de segundo) porque so controlados separadamente pelo exibidor de vdeo.

Os pontos de incio de navegao criam um quadro-chave no local do ponto de incio especificado; dessa maneira, possvel usar um cdigo a fim de mover a reproduo do exibidor de vdeo para esse local. Voc pode definir pontos especficos de um arquivo FLV para os quais os usurios podero navegar. Por exemplo, o seu vdeo poder conter vrios captulos ou segmentos, e voc poder control-lo incorporando pontos de incio de navegao no arquivo de vdeo. Se planejar criar um aplicativo no qual os usurios devero navegar para um ponto de incio, crie e incorpore pontos de incio ao codificar o arquivo em vez de usar os pontos de incio do ActionScript. Os pontos de incio devem ser incorporados no arquivo FLV, pois so mais precisos. Para obter mais informaes sobre a codificao de arquivos FLV com pontos de incio, consulte Incorporando pontos de incio (somente Flash Professional) na pgina 333 em Usando o Flash. Para acessar parmetros de ponto de incio, crie um cdigo ActionScript. Esses parmetros fazem parte do objeto de evento recebido com o evento cuePoint (event.info.parameters). Para obter informaes sobre o acesso ou o rastreamento de pontos de incio, consulte Trabalhando com pontos de incio na pgina 640 em Usando o Flash.

Rastreando pontos de incio em um arquivo FLV


Para rastrear os pontos de incio incorporados em um documento FLV, use NetStream.onMetaData. Opere recursivamente a estrutura dos metadados retornada, para ver as informaes de pontos de incio. O cdigo a seguir rastreia os pontos de incio em um arquivo FLV:
var connection_nc:NetConnection = new NetConnection(); connection_nc.connect(null); var stream_ns:NetStream = new NetStream(connection_nc); stream_ns.onMetaData = function(metaProp:Object) { trace("The metadata:");

Sobre o uso de vdeo FLV

641

traceMeta(metaProp); // traceObject(metaProp, 0); }; my_video.attachVideo(stream_ns); stream_ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv"); function traceMeta(metaProp:Object):Void { var p:String; for (p in metaProp) { switch (p) { case "cuePoints" : trace("cuePoints: "); //percorre os pontos de incio var cuePointArr:Array = metaProp[p]; for (var j:Number = 0; j < cuePointArr.length; j++) { //percorre os parmetros atuais de ponto de incio 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]); } } }

A seguinte sada exibida:

642

Trabalhando com imagens, som e vdeo

The metadata: canSeekToEnd: true cuePoints: cuePoints[0]: name: point1 time: 0.418 type: navigation parameters: lights: beginning cuePoints[1]: name: point2 time: 7.748 type: navigation parameters: lights: middle cuePoints[2]: name: point3 time: 16.02 type: navigation parameters: lights: end audiocodecid: 2 audiodelay: 0.038 audiodatarate: 96 videocodecid: 4 framerate: 15 videodatarate: 400 height: 213 width: 320 duration: 16.334

Para obter informaes sobre o uso de pontos de incio com o componente FLVPlayback, consulte Usando pontos de incio incorporados com o componente FLVPlayback (somente Flash Professional).

Usando pontos de incio incorporados com o componente FLVPlayback (somente Flash Professional)
Voc pode exibir os pontos de incio de um arquivo FLV no inspetor Properties (Propriedades) ao usar o componente FLVPlayback. Aps definir a propriedade contentPath da instncia de FLVPlayback, voc pode exibir todos os pontos de incio incorporados no arquivo de vdeo. Usando a guia Parameters (Parmetros), localize a propriedade cuePoints e clique no cone de lupa para ver uma lista dos pontos de incio do arquivo.
N OT A

Para ver os pontos de incio na guia Parameters, digite o nome do arquivo FLV na caixa de texto contentPath, em vez de usar um cdigo para atribuir o contentPath.

Sobre o uso de vdeo FLV

643

O exemplo a seguir mostra como usar informaes de pontos de incio com o componente FLVPlayback.
Para usar pontos de incio com o componente FLVPlayback:
1. 2.

Crie um novo documento do Flash chamado cueFlv.fla. Abra o painel Components (Componentes), em Window (Janela) > Components, e arraste uma instncia dos componentes FLVPlayback e TextArea para o Stage (Palco). Selecione o componente TextArea e digite my_ta na caixa de texto Instance Name (Nome da instncia) do inspetor Properties (Propriedades), em Window > Properties > Properties. Com o componente TextArea ainda selecionado, digite 200 e 100 nas caixas de texto de largura e altura, respectivamente. Selecione a instncia de FLVPlayback no Stage e digite my_flvPb na caixa de texto Instance Name. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes).
var my_flvPb:mx.video.FLVPlayback; var my_ta:mx.controls.TextArea; my_flvPb.contentPath = "http://www.helpexamples.com/flash/video/ cuepoints.flv"; var listenerObject:Object = new Object(); listenerObject.cuePoint = function(eventObject:Object) { my_ta.text += "Elapsed time in seconds: " + my_flvPb.playheadTime + "\n"; }; my_flvPb.addEventListener("cuePoint",listenerObject);

3.

4.

5.

6.

7.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF. O tempo decorrido exibido na instncia de TextArea quando a reproduo passa por cada ponto de incio incorporado no documento.

Para obter mais informaes sobre como trabalhar com o componente FLVPlayback, consulte FLVPlayback Component (Flash Professional Only) na pgina 505.

644

Trabalhando com imagens, som e vdeo

Criando pontos de incio com o ActionScript para uso com componentes (somente Flash Professional)
Voc pode criar pontos de incio com o ActionScript e us-los com uma instncia de objeto de vdeo ou com um dos componentes de exibio de vdeo (FLVPlayback para Flash Player 8 ou MediaPlayback para Flash Player 7). Os exemplos a seguir mostram como fcil usar cdigo ActionScript para criar pontos de incio e, em seguida, usar um script para acess-los.
NO TA

Incorpore pontos de incio em um documento se pretender adicionar a funcionalidade de navegao a um aplicativo. Para obter mais informaes, consulte Trabalhando com pontos de incio na pgina 640. Para ver um exemplo de como trabalhar com pontos de incio incorporados, consulte Usando pontos de incio incorporados com o componente FLVPlayback (somente Flash Professional) na pgina 643.

Para criar e usar pontos de incio com o componente FLVPlayback:


1. 2.

Crie um novo documento do Flash chamado cueFlvPb.fla. Arraste uma instncia do componente FLVPlayback do painel Components (Componentes), em Window (Janela) > Components, para o Stage (Palco). O componente est na pasta FLVPlayback - Player 8. Selecione o componente e abra o inspetor Properties (Propriedades), em Window > Properties > Properties. Digite my_flvPb na caixa de texto Instance Name (Nome da instncia). Arraste uma instncia do componente TextArea do painel Components para o Stage. Selecione o componente TextArea e digite my_ta na caixa de texto Instance Name. Com o componente TextArea ainda selecionado, digite 200 e 100 nas caixas de texto de largura e altura, respectivamente. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
var my_flvPb:mx.video.FLVPlayback; my_flvPb.contentPath = "http://www.helpexamples.com/flash/video/ clouds.flv"; // Criar um objeto cuePoint. var cuePt:Object = new Object(); cuePt.time = 1; cuePt.name = "elapsed_time"; cuePt.type = "actionscript"; // Adicionar o ponto de incio AS. my_flvPb.addASCuePoint(cuePt); // Adicionar outro ponto de incio AS. my_flvPb.addASCuePoint(2, "elapsed_time2");

3.

4. 5. 6. 7.

8.

Sobre o uso de vdeo FLV

645

// Exibir informaes de pontos de incio no campo de texto. var listenerObject:Object = new Object(); listenerObject.cuePoint = function(eventObject) { my_ta.text += "Elapsed time in seconds: " + my_flvPb.playheadTime + "\n"; }; my_flvPb.addEventListener("cuePoint",listenerObject); 9.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. Os seguintes pontos de incio aparecem no painel Output (Sada):
Elapsed time in seconds: 1.034 Elapsed time in seconds: 2.102

Para obter informaes sobre addASCuePoint(), consulte FLVPlayback.addASCuePoint() na pgina 552. Para obter informaes sobre como trabalhar com pontos de incio e o componente FLVPlayback, consulte Using cue points na pgina 513 e FLVPlayback Component (Flash Professional Only) na pgina 505. O exemplo a seguir mostra como adicionar pontos de incio durante a execuo e rastre-los quando um arquivo FLV reproduzido no componente MediaPlayback.
Para criar e usar pontos de incio com o componente MediaPlayback:
1. 2.

Crie um novo documento do Flash chamado cuePointMP.fla Arraste uma instncia do componente MediaPlayback do painel Components (Componentes), em Window (Janela) > Components, para o Stage (Palco). O componente est na pasta Media - Player 6 - 7. Selecione o componente e abra o inspetor Properties (Propriedades), em Window > Properties > Properties. Digite my_mb na caixa de texto Instance Name (Nome da instncia). Selecione a guia Parameters (Parmetros) e clique em Launch Component Inspector (Iniciar Inspetor de componentes). No Component Inspector, digite http://www.helpexamples.com/flash/video/clouds.flv na caixa de texto URL. Abra o painel Actions (Aes), em Window > Actions, e digite o seguinte cdigo no painel Script:
import mx.controls.MediaPlayback; var my_mp:MediaPlayback; my_mp.autoPlay = false; my_mp.addEventListener("cuePoint", doCuePoint); my_mp.addCuePoint("one", 1); my_mp.addCuePoint("two", 2); my_mp.addCuePoint("three", 3);

3.

4. 5.

6.

7.

646

Trabalhando com imagens, som e vdeo

my_mp.addCuePoint("four", 4); function doCuePoint(eventObj:Object):Void { trace(eventObj.type + " = {cuePointName:" + eventObj.cuePointName + " cuePointTime:" + eventObj.cuePointTime + "}"); } 8.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. Os seguintes pontos de incio aparecem no painel Output (Sada):
cuePoint cuePoint cuePoint cuePoint = = = = {cuePointName:one cuePointTime:1} {cuePointName:two cuePointTime:2} {cuePointName:three cuePointTime:3} {cuePointName:four cuePointTime:4}

Para obter mais informaes sobre como trabalhar com o componente MediaPlayback, consulte Media components (Flash Professional only) na pgina 831. Para obter mais informaes sobre como trabalhar com o componente FLVPlayback, consulte FLVPlayback Component (Flash Professional Only) na pgina 505.

Adicionando a funcionalidade de busca com pontos de incio (somente Flash Professional)


Voc pode incorporar pontos de incio de navegao em um arquivo FLV para adicionar a funcionalidade de busca aos seus aplicativos. O mtodo seekToNavCuePoint() do componente FLVPlayback localiza no arquivo FLV o ponto de incio com o nome definido, na hora ou aps a hora especificada. Voc pode especificar um nome como uma seqncia de caracteres (como "part1" ou "theParty"). Voc tambm pode usar o mtodo seekToNextNavCuePoint(), que busca o prximo ponto de incio de navegao, com base no playheadTime atual. Voc pode passar para esse mtodo um parmetro, time, que indica a hora a partir da qual o prximo ponto de incio de navegao deve ser procurado. O valor padro o playheadTime atual. Opcionalmente, tambm possvel buscar uma durao especificada do arquivo FLV, usando o mtodo seek(). Nos exemplos a seguir, voc adicionar um boto que ser usado para percorrer vrios pontos de incio ou para ir at uma durao especificada em um arquivo FLV que reproduzido no componente FLVPlayback, e outro boto para ir at um ponto de incio especificado.
Para buscar uma durao especificada:
1. 2.

Crie um novo documento do Flash chamado seekduration.fla. Arraste uma instncia do componente FLVPlayback do painel Components (Componentes), em Window (Janela) > Components. O componente est na pasta FLVPlayback - Player 8.

Sobre o uso de vdeo FLV

647

3.

Selecione o componente e abra o inspetor Properties (Propriedades), em Window > Properties > Properties. Digite my_flvPb na caixa de texto Instance Name (Nome da instncia). Arraste uma instncia do componente Button do painel Components para o Stage (Palco). Selecione o componente Button e digite my_button na caixa de texto Instance Name. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
import mx.controls.Button; import mx.video.FLVPlayback; var seek_button:Button; var my_flvPb:FLVPlayback; my_flvPb.autoPlay = false; my_flvPb.contentPath = "http://www.helpexamples.com/flash/video/ sheep.flv"; seek_button.label = "Seek"; seek_button.addEventListener("click", seekFlv); function seekFlv(eventObj:Object):Void { // buscar 2 segundos my_flvPb.seek(2); }

4. 5. 6. 7.

8.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. Quando voc clica no boto, a reproduo do vdeo movida para a durao especificada: 2 segundos no vdeo.

Para adicionar a funcionalidade de busca com o componente FLVPlayback:


1. 2.

Crie um novo documento do Flash chamado seek1.fla. Arraste uma instncia do componente FLVPlayback do painel Components (Componentes), em Window (Janela) > Components. O componente est na pasta FLVPlayback - Player 8. Selecione o componente e abra o inspetor Properties (Propriedades), em Window > Properties > Properties. Digite my_flvPb na caixa de texto Instance Name (Nome da instncia). Arraste uma instncia do componente Button do painel Components para o Stage (Palco). Selecione o componente Button e digite my_button na caixa de texto Instance Name. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
import mx.video.FLVPlayback; var my_flvPb:FLVPlayback; my_flvPb.autoPlay = false;

3.

4. 5. 6. 7.

648

Trabalhando com imagens, som e vdeo

my_flvPb.contentPath = "http://www.helpexamples.com/flash/video/ cuepoints.flv"; my_button.label = "Next cue point"; function clickMe(){ my_flvPb.seekToNextNavCuePoint(); } my_button.addEventListener("click", clickMe); 8.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. O arquivo cuepoints.flv contm trs pontos de incio de navegao: um no incio, outro no meio e outro no fim do arquivo de vdeo. Quando voc clica no boto, a instncia de FLVPlayback busca o prximo ponto de incio at chegar no ltimo ponto de incio do arquivo de vdeo.

Tambm possvel buscar um ponto de incio especificado em um arquivo FLV usando o mtodo seekToCuePoint(), como mostra o exemplo a seguir.
Para buscar um ponto de incio especificado:
1. 2.

Crie um novo documento do Flash chamado seek2.fla. Arraste uma instncia do componente FLVPlayback do painel Components (Componentes), em Window (Janela) > Components. O componente est na pasta FLVPlayback - Player 8. Selecione o componente e abra o inspetor Properties (Propriedades), em Window > Properties > Properties. Digite my_flvPb na caixa de texto Instance Name (Nome da instncia). Com a instncia de FLVPlayback ainda selecionada, clique na guia Parameters (Parmetros). Digite http://www.helpexamples.com/flash/video/cuepoints.flv na caixa de texto contentPath. Quando o URL digitado na caixa de texto contentPath, os pontos de incio aparecem na guia Parameters (prximo ao parmetro cuePoint). Portanto, possvel determinar o nome do ponto de incio a ser localizado no cdigo. Clique no cone de lupa para exibir todos os pontos de incio do arquivo de vdeo e informaes sobre cada ponto em uma tabela.

3.

4. 5.

6.

7. 8. 9.

Arraste uma instncia do componente Button do painel Components para o Stage (Palco). Selecione o componente Button e digite my_button na caixa de texto Instance Name. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
import mx.video.FLVPlayback; var my_flvPb:FLVPlayback;

Sobre o uso de vdeo FLV

649

my_flvPb.autoPlay = false; my_button.label = "Seek to point2"; function clickMe(){ my_flvPb.seekToNavCuePoint("point2"); } my_button.addEventListener("click", clickMe); 10. Selecione

Control (Controlar) > Test Movie (Testar filme) para testar o cdigo.

O arquivo cuepoints.flv contm trs pontos de incio de navegao: um no incio, outro no meio e outro no fim do arquivo de vdeo. Quando voc clica no boto, a instncia de FLVPlayback busca o ponto de incio especificado (point2). Para obter mais informaes sobre pontos de incio, consulte Using cue points na pgina 513. Para obter mais informaes sobre o componente FLVPlayback, consulte FLVPlayback Component (Flash Professional Only) na pgina 505.

Trabalhando com metadados


Voc pode usar o mtodo onMetaData para exibir informaes de metadados no arquivo FLV. Os metadados incluem informaes sobre o arquivo FLV, como durao, largura, altura e taxa de quadros. As informaes de metadados adicionadas ao arquivo FLV dependem do software usado para codificar esse arquivo ou do software usado para adicionar essas informaes.
N OT A

Se o arquivo de vdeo no contiver informaes de metadados, voc poder usar ferramentas para adicionar essas informaes ao arquivo.

Para trabalhar com NetStream.onMetaData, necessrio ter um Flash Video que contenha metadados. Se voc codificar os arquivos FLV com o Flash 8 Video Encoder, o arquivo FLV conter informaes 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 verses posteriores (incluindo o Flash 8 Video Exporter) adicionam os metadados aos arquivos FLV. O Sorenson Squeeze 4.1 e verses posteriores tambm adicionam metadados aos arquivos de vdeo.

O exemplo a seguir usa NetStream.onMetaData para rastrear as informaes de metadados de um arquivo FLV codificado com o Flash 8 Video Encoder.
Para usar NetStream.onMetaData para exibir informaes de metadados:
1. 2.

Crie um novo arquivo FLA chamado flvMetadata.fla. No painel Library (Biblioteca), em Window (Janela) > Library, selecione New Video (Novo vdeo) no menu pop-up Library.

650

Trabalhando com imagens, som e vdeo

3.

Na caixa de dilogo Video Properties (Propriedades de vdeo), atribua um nome ao smbolo de vdeo e selecione Video (ActionScript controlled) (Vdeo controlado pelo ActionScript). Clique em OK para criar um objeto de vdeo. Arraste o objeto de vdeo do painel Library para o Stage (Palco) a fim de criar uma instncia desse objeto. Com o objeto de vdeo selecionado no Stage, digite my_video na caixa de texto Instance Name (Nome da instncia) do inspetor Properties (Propriedades), em Window > Properties > Properties. Com a instncia do vdeo ainda selecionada, digite 320 e 213 nas caixas de texto de largura e altura, respectivamente. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e abra o painel Actions (Aes), em Window > Actions. Digite o seguinte cdigo no painel Actions:
// Criar um objeto NetConnection. var netConn:NetConnection = new NetConnection(); // Criar uma conexo de fluxo local. netConn.connect(null); // Criar um objeto NetStream e definir uma funo onStatus(). var nStream:NetStream = new NetStream(netConn); // Anexar o fluxo de vdeo NetStream ao objeto Video. my_video.attachVideo(nStream); // Definir o tempo do buffer. nStream.setBufferTime(30); // Reproduzir o arquivo FLV. nStream.play("http://www.helpexamples.com/flash/video/ lights_short.flv"); // Rastrear os metadados. nStream.onMetaData = function(myMeta) { for (var i in myMeta) { trace(i + ":\t" + myMeta[i]) } };

4. 5.

6.

7.

8.

9.

10. Selecione

Control (Controlar) > Test Movie (Testar filme) para testar o cdigo.

As seguintes informaes sero exibidas no painel Output (Sada):


canSeekToEnd:true audiocodecid:2 audiodelay:0.038 audiodatarate:96 videocodecid:4 framerate:15 videodatarate:400

Sobre o uso de vdeo FLV

651

height:213 width:320 duration:8.04


NO T A 652

Se o vdeo no incluir udio, as informaes de metadados relacionadas a udio (como audiodatarate) retornaro undefined porque nenhuma informao de udio adicionada aos metadados durante a codificao.

O formato a seguir tambm pode ser usado para exibir a maioria das informaes de metadados. Por exemplo, este cdigo mostra a durao de um arquivo FLV:
nStream.onMetaData = function(myMeta) { trace("FLV duration: " + myMeta.duration + " sec."); };

Esse formato no rastreia as informaes de metadados cuePoint. Para obter informaes sobre o rastreamento de pontos de incio, consulte Rastreando pontos de incio em um arquivo FLV na pgina 641.

Sobre a configurao de arquivos FLV para hospedagem em um servidor


Ao trabalhar com arquivos FLV, talvez voc precise configurar o servidor para usar o formato de arquivo FLV. O MIME uma especificao de dados padronizada que permite enviar arquivos no-ASCII por meio de conexes com a Internet. Os navegadores da Web e os clientes de e-mail so configurados para interpretar vrios tipos MIME de modo que possam enviar e receber vdeo, udio, grficos e texto formatado. Para carregar arquivos FLV de um servidor Web, talvez seja necessrio registrar o tipo MIME e a extenso do arquivo nesse servidor; portanto, consulte a documentao do servidor. O tipo MIME dos arquivos FLV video/x-flv. As informaes completas do tipo de arquivo FLV so as seguintes: Tipo Mime: video/x-flv Extenso do arquivo: .flv Parmetros necessrios: nenhum Parmetros opcionais: nenhum Consideraes sobre codificao: os arquivos FLV so arquivos binrios; alguns aplicativos podem exigir a definio do subtipo aplicativo/fluxo de octeto. Questes de segurana: nenhuma Especificao publicada: www.macromedia.com/go/flashfileformat.

Trabalhando com imagens, som e vdeo

A Microsoft modificou a forma como a mdia de fluxo tratada no servidor Web Microsoft Internet Information Services (IIS) 6.0 em relao s verses anteriores. As verses anteriores do IIS no exigem modificao para transmitir em fluxo o Flash Video. No IIS 6.0, o servidor Web padro fornecido com o Windows 2003, um tipo MIME necessrio para que o servidor reconhea os arquivos FLV como mdia de fluxo. Quando os arquivos SWF que transmitem em fluxo arquivos FLV externos so colocados em um servidor Microsoft Windows 2003 e exibidos em um navegador, o arquivo SWF reproduzido corretamente, mas o vdeo FLV no transmitido em fluxo. Esse problema afeta todos os arquivos FLV colocados no servidor Windows 2003, incluindo os criados com verses anteriores da ferramenta de criao do Flash, o Macromedia Flash Video Kit for Dreamweaver MX 2004. Esses arquivos funcionaro corretamente se forem testados em outros sistemas operacionais. Para obter informaes sobre a configurao do Microsoft Windows 2003 e do Microsoft IIS Server 6.0 para transmitir em fluxo vdeo FLV, consulte www.macromedia.com/go/tn_19439.

Sobre a definio de arquivos FLV locais como destino no Macintosh


Se voc tentar reproduzir um FLV local de uma unidade no pertencente ao sistema em um computador Macintosh usando um caminho com uma barra (/), o vdeo no ser reproduzido. As unidades no pertencentes ao sistema incluem, mas no se limitam a, CDROMs, discos rgidos particionados, mdia de armazenamento removvel e dispositivos de armazenamento conectados.
N OT A

Esse problema ocorre devido a uma limitao do sistema operacional, e no a uma limitao do Flash ou do Flash Player.

Para que um arquivo FLV de uma unidade no pertencente ao sistema seja reproduzido em um Macintosh, faa referncia a ele com um caminho absoluto usando a notao de doispontos (:) em vez de usar a notao de barra (/). A lista a seguir mostra a diferena entre os dois tipos de notao:
Notao de barra

myDrive/myFolder/myFLV.flv (Macintosh) myDrive:myFolder:myFLV.flv

Notao de dois-pontos

Voc tambm pode criar um arquivo projetor para um CD-ROM que ser usado para reproduo no Macintosh. Para obter as informaes mais recentes sobre arquivos FLV e CDROMs Macintosh, consulte www.macromedia.com/go/3121b301.

Sobre o uso de vdeo FLV

653

Sobre a criao de animaes do progresso para arquivos de mdia


O ActionScript oferece diversas formas de pr-carregar ou controlar o progresso do download de mdia externa. Voc pode criar animaes ou barras de progresso para mostrar visualmente o progresso do carregamento ou o volume de contedo carregado. Para pr-carregar arquivos SWF e JPEG, use a classe MovieClipLoader, que fornece um mecanismo de ouvinte de eventos para verificar o progresso do download. Para obter mais informaes, consulte Pr-carregando arquivos SWF e JPEG na pgina 427. Para controlar o progresso do download de arquivos MP3, use os mtodos e Sound.getBytesTotal(); para controlar o progresso do download de arquivos FLV, use as propriedades NetStream.bytesLoaded e NetStream.bytesTotal. Para obter mais informaes, consulte Pr-carregando arquivos MP3 na pgina 420.
Sound.getBytesLoaded()

Para obter informaes sobre a criao de barras de progresso para carregar arquivos de mdia, consulte os seguintes tpicos:

Criando uma animao do progresso para carregar arquivos SWF e de imagem na pgina 655 Criando uma barra de progresso para carregar arquivos MP3 com o ActionScript na pgina 657 Criando uma barra de progresso para carregar arquivos FLV com o ActionScript na pgina 659

H um arquivo de origem de exemplo chamado tweenProgress.fla que usa animao com script para criar uma animao da barra de progresso. Esse arquivo est localizado na pasta Samples do seu disco rgido:

No Windows, navegue at unidade de inicializao\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.

654

Trabalhando com imagens, som e vdeo

Criando uma animao do progresso para carregar arquivos SWF e de imagem


Ao carregar arquivos SWF ou de imagem grandes em um aplicativo, voc poder criar uma animao que mostre o progresso do carregamento. Voc pode criar uma barra de progresso que aumente de tamanho medida que a animao carregada. Tambm pode criar uma animao que seja alterada medida que o arquivo carregado. Para obter informaes sobre como carregar arquivos SWF e de imagem, consulte Carregando arquivos SWF e de imagem externos na pgina 621. O exemplo a seguir mostra como usar a classe MovieClipLoader e a API (Application Programming Interface, Interface de programao de aplicativos) Drawing para exibir o progresso do carregamento de um arquivo de imagem.
Para criar uma barra de progresso para carregar arquivos de imagem ou SWF:
1. 2.

Crie um novo documento do Flash chamado loadImage.fla. Selecione Modify (Modificar) > Document (Documento) e digite 700 e 500 nas caixas de texto de largura e altura, respectivamente, para alterar as dimenses do documento. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
//criar clipes para armazenar o contedo this.createEmptyMovieClip("progressBar_mc", 0); progressBar_mc.createEmptyMovieClip("bar_mc", 1); progressBar_mc.createEmptyMovieClip("stroke_mc", 2); //usar mtodos 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;

3.

Sobre a criao de animaes do progresso para arquivos de mdia

655

// progresso do carregamento var loadListener:Object = new Object(); mclListener.onLoadStart = function(target_mc:MovieClip) { progressBar_mc.bar_mc._xscale = 0; }; mclListener.onLoadProgress = function(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number) { progressBar_mc.bar_mc._xscale = Math.round(bytesLoaded/ bytesTotal*100); }; mclListener.onLoadComplete = function(target_mc:MovieClip) { progressBar_mc.removeMovieClip(); }; mclListener.onLoadInit = function(target_mc:MovieClip) { target_mc._height = 500; target_mc._width = 700; }; //Criar um clipe para armazenar a imagem. this.createEmptyMovieClip("loadTarget_mc", this.getNextHighestDepth()); var image_mcl:MovieClipLoader = new MovieClipLoader(); image_mcl.addListener(mclListener); /* Carregar a imagem no clipe. Voc pode alterar o URL a seguir para um arquivo SWF ou outro arquivo de imagem. */ image_mcl.loadClip("http://www.helpexamples.com/flash/images/gallery1/ images/pic3.jpg", image_mc); 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 cdigo uma segunda vez, a imagem ser armazenada em cache, e a barra de progresso ser encerrada imediatamente. Para testar vrias 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 contedo carregado muito rpido.

H um arquivo de origem de exemplo chamado tweenProgress.fla que usa animao com script para criar uma animao da barra de progresso. Esse arquivo est localizado na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\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.

656

Trabalhando com imagens, som e vdeo

Voc tambm pode encontrar exemplos de aplicativos de galeria de fotos. Esses arquivos mostram como usar o ActionScript para controlar clipes de filme dinamicamente ao carregar arquivos de imagem em um arquivo SWF. Os arquivos de origem de exemplo, gallery_tree.fla e gallery_tween.fla, podem ser encontrados na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\Galleries. No Macintosh, navegue at HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/Galleries.

Criando uma barra de progresso para carregar arquivos MP3 com o ActionScript
O exemplo a seguir carrega vrias msicas em um arquivo SWF. Uma barra de progresso, criada com a API Drawing, mostra o progresso do carregamento. Quando o carregamento da msica inicia e concludo, o painel Output (Sada) exibe informaes. Para obter informaes sobre como carregar arquivos MP3, consulte Carregando um arquivo MP3 na pgina 627.
Para criar uma barra de progresso para carregar arquivos MP3:
1. 2.

Crie um novo documento do Flash chamado loadSound.fla. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes).
var pb_height:Number = 10; var pb_width:Number = 100; var pb:MovieClip = this.createEmptyMovieClip("progressBar_mc", this.getNextHighestDepth()); pb.createEmptyMovieClip("bar_mc", pb.getNextHighestDepth()); pb.createEmptyMovieClip("vBar_mc", pb.getNextHighestDepth()); pb.createEmptyMovieClip("stroke_mc", pb.getNextHighestDepth()); pb.createTextField("pos_txt", pb.getNextHighestDepth(), 0, pb_height, pb_width, 22); 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();

Sobre a criao de animaes do progresso para arquivos de mdia

657

_xscale = 0; } with (pb.vBar_mc) { lineStyle(1, 0x000000); moveTo(0, 0); lineTo(0, pb_height); } with (pb.stroke_mc) { lineStyle(3, 0x000000); moveTo(0, 0); lineTo(pb_width, 0); lineTo(pb_width, pb_height); lineTo(0, pb_height); lineTo(0, 0); } 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 cdigo uma segunda vez, a imagem ser armazenada em cache, e a barra de progresso ser encerrada imediatamente. Para testar vrias 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 contedo carregado muito rpido.

658

Trabalhando com imagens, som e vdeo

Para obter mais informaes sobre o uso de som, consulte a entrada da classe Sound, %{Sound}%, em ActionScript 2.0 Language Reference. H um arquivo de origem de exemplo chamado tweenProgress.fla que usa animao com script para criar uma animao da barra de progresso. Esse arquivo est localizado na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\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.

A pasta Samples do disco rgido tambm contm um arquivo de origem de exemplo, jukebox.fla, que carrega arquivos MP3. Esse exemplo demonstra como criar um jukebox usando tipos de dados, princpios gerais de codificao e vrios componentes.

No Windows, navegue at unidade de inicializao\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.

Criando uma barra de progresso para carregar arquivos FLV com o ActionScript
Voc pode criar uma barra de progresso para exibir o progresso do carregamento de um arquivo FLV. Para obter informaes sobre como carregar arquivos FLV em um arquivo SWF, consulte Pr-carregando arquivos FLV na pgina 639. Para obter outras informaes sobre arquivos FLV e o Flash, consulte Sobre o uso de vdeo FLV na pgina 632. O exemplo a seguir usa a API Drawing para criar uma barra de progresso. O exemplo tambm usa as propriedades bytesLoaded e bytesTotal para mostrar o progresso do carregamento do arquivo video1.flv na instncia do objeto de vdeo chamada my_video. O campo de texto loaded_txt criado dinamicamente para mostrar informaes sobre o progresso do carregamento.
Para criar uma barra de progresso que mostra o progresso do carregamento:
1. 2.

Crie um novo arquivo FLA chamado flvProgress.fla. No painel Library (Biblioteca), em Window (Janela) > Library, selecione New Video (Novo vdeo) no menu pop-up Library. Na caixa de dilogo Video Properties (Propriedades de vdeo), atribua um nome ao smbolo de vdeo e selecione Video (ActionScript controlled) (Vdeo controlado pelo ActionScript).

3.

Sobre a criao de animaes do progresso para arquivos de mdia

659

4. 5.

Clique em OK para criar um objeto de vdeo. Arraste o objeto de vdeo do painel Library para o Stage (Palco) a fim de criar uma instncia desse objeto. Com o objeto de vdeo selecionado no Stage, digite my_video na caixa de texto Instance Name (Nome da instncia) do inspetor Properties (Propriedades), em Window > Properties > Properties. Com a instncia do vdeo selecionada, digite 320 e 213 nas caixas de texto de largura e altura, respectivamente. Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e digite o seguinte cdigo no painel Actions (Aes):
var connection_nc:NetConnection = new NetConnection(); connection_nc.connect(null); var stream_ns:NetStream = new NetStream(connection_nc); my_video.attachVideo(stream_ns); stream_ns.play("http://www.helpexamples.com/flash/video/ typing_short.flv"); this.createTextField("loaded_txt", this.getNextHighestDepth(), 10, 10, 160, 22); this.createEmptyMovieClip("progressBar_mc", this.getNextHighestDepth()); progressBar_mc.createEmptyMovieClip("bar_mc", progressBar_mc.getNextHighestDepth()); with (progressBar_mc.bar_mc) { beginFill( 0xFF0000 ); moveTo(0, 0); lineTo(100, 0); lineTo(100, 10); lineTo(0, 10); lineTo(0, 0); endFill(); _xscale = 0; } progressBar_mc.createEmptyMovieClip("stroke_mc", progressBar_mc.getNextHighestDepth()); with (progressBar_mc.stroke_mc) { lineStyle(0, 0x000000); moveTo(0, 0); lineTo(100, 0); lineTo(100, 10); lineTo(0, 10); lineTo(0, 0); } var loaded_interval:Number = setInterval(checkBytesLoaded, 500, stream_ns); function checkBytesLoaded(my_ns:NetStream) {

6.

7.

8.

660

Trabalhando com imagens, som e vdeo

var pctLoaded:Number = Math.round(my_ns.bytesLoaded / my_ns.bytesTotal * 100); loaded_txt.text = Math.round(my_ns.bytesLoaded / 1000) + " of " + Math.round(my_ns.bytesTotal / 1000) + " KB loaded (" + pctLoaded + "%)"; progressBar_mc.bar_mc._xscale = pctLoaded; if (pctLoaded>=100) { clearInterval(loaded_interval); } } 9.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o cdigo. O vdeo carregado, e uma barra com animao e a alterao dos valores de texto informam o progresso do carregamento. Se esses elementos se sobrepuserem ao vdeo, mova o objeto de vdeo no Stage. Voc pode personalizar a cor da barra de progresso modificando beginFill e lineStyle no trecho de cdigo anterior.
N OT A

Se a barra de progresso for carregada instantaneamente, o vdeo ser armazenado em cache no disco rgido (tanto a partir do teste deste exemplo ou do seu carregamento em outro procedimento). Se isso ocorrer, faa upload de um arquivo FLV no servidor e carregue esse arquivo.

H um arquivo de origem de exemplo chamado tweenProgress.fla que usa animao com script para criar uma animao da barra de progresso. Esse arquivo est localizado na pasta Samples do seu disco rgido.

No Windows, navegue at unidade de inicializao\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.

Sobre a criao de animaes do progresso para arquivos de mdia

661

662

Trabalhando com imagens, som e vdeo

CAPTULO 16

Trabalhando com dados externos


No Macromedia Flash Basic 8 e no Macromedia Flash Professional 8, possvel usar o ActionScript para carregar dados de origens externas em um arquivo SWF.Tambm possvel enviar dados, que poderiam ser fornecidos pelo surio ou servidor, de um arquivo SWF para um servidor de aplicativos (como o Macromedia ColdFusion ou o Macromedia JRun) ou outro tipo de script de servidor, como PHP ou Perl. O Flash Player pode enviar e carregar dados atravs do HTTP, HTTPS ou carregar de um arquivo de texto local. Voc tambm pode criar conexes persistentes de soquete TCP/IP para aplicativos que exijam baixa latncia, por exemplo, aplicativos de bate-papo ou servios de cotao de aes. O recurso de carregar arquivos do computador do usurio em um servidor e fazer download dos arquivos de um servidor para o computador do usurio novo no Flash Player 8. possvel formatar os dados carregados ou enviados de um arquivo SWF como XML (Extensible Markup Language, Linguagem de marcao extensvel) ou como pares nome/ valor. O Flash Player tambm pode enviar e receber dados do ambiente de host, um navegador da Web, por exemplo, ou de outra instncia do Flash Player no mesmo computador ou pgina da Web. Por padro, um arquivo SWF pode acesasr somente os dados residentes exatamente no mesmo domnio (por exemplo, www.macromedia.com). Para obter mais informaes, consulte Sobre domnios, segurana entre domnios e arquivos SWF na pgina 727.) Para obter mais informaes sobre como trabalhar com dados externos, consulte os seguintes tpicos:
Enviando e carregando variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .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

16

663

Enviando e carregando variveis


Um arquivo SWF uma janela para a captura e exibio de informaes, semelhante a uma pgina HTML. Contudo, os arquivos SWF podem permanecer carregados no navegador e ser constantemente atualizados com novas informaes sem a necessidade do recarregamento da pgina inteira. Com as funes e os mtodos do ActionScript, voc pode enviar e receber informaes de arquivos de texto, arquivos XML e scripts de servidor. Alm disso, os scripts de servidor podem solicitar informaes especficas 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 so CFML, Perl, ASP (Microsoft Active Server Pages, Pginas de servidor ativo da Microsoft) e PHP. Com o armazenamento e recuperao de informaes em um banco de dados, voc pode criar um contedo dinmico e personalizado para o arquivo SWF. Por exemplo, voc pode criar um quadro de mensagens, perfis pessoais para usurios ou um carrinho de compras para controlar as compras de um usurio. Vrias funes e mtodos do ActionScript permitem passar informaes para/de um arquivo SWF. Cada funo ou mtodo usa um protocolo para transferir as informaes e requer que elas sejam formatadas de uma determinada maneira.

As funes e os mtodos de MovieClip que usam o protocolo HTTP ou HTTPS para enviar informaes em um formato de cdigo URL so getURL(), loadVariables(), loadVariablesNum(), loadMovie() e loadMovieNum(). Os mtodos LoadVars que usam o protocolo HTTP ou HTTPS para enviar e carregar informaes em formato de cdigo URL so load(), send() e sendAndLoad(). Os mtodos que usam o protocolo HTTP ou HTTPS para enviar e carregar informaes como XML so XML.send(), XML.load() e XML.sendAndLoad(). Os mtodos que criam e usam uma conexo de soquete TCP/IP para enviar e carregar informaes como XML so XMLSocket.connect() e XMLSocket.send(). Verificando os dados carregados na pgina 664 Criando uma barra de progresso para exibir o progresso do carregamento dos dados na pgina 666

Para obter mais informaes, consulte os seguintes tpicos:


Verificando os dados carregados


Todas as funes ou mtodos que carregam dados em um arquivo SWF (exceto XMLSocket.send()) so assncronas: os resultados da ao so retornados em um momento indeterminado.

664

Trabalhando com dados externos

Antes de usar dados carregados em um arquivo SWF, verifique se eles foram realmente carregados. Por exemplo, voc pode carregar variveis e manipular seus valores no mesmo script, pois os dados a serem manipulados no existiro no arquivo at que ele seja carregado. No script a seguir, voc s poder usar a varivel lastSiteVisited quando tiver certeza de que ela foi carregada do arquivo myData.txt. No arquivo myData.txt, haver texto semelhante ao seguinte exemplo:
lastSiteVisited=www.macromedia.com

Se voc tiver usado o seguinte cdigo, no poder rastreiar os dados que esto sendo carregados:
loadVariables("myData.txt", 0); trace(lastSiteVisited); // undefined

Cada funo ou mtodo possui uma tcnica especfica que pode ser usada para verificar os dados que foram carregados. Se usar %{loadVariables function}% ou %{loadMovie function}%, voc poder carregar informaes 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 varivel 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 variveis do arquivo myData.txt no clipe de filme loadTarget_mc. Um manipulador onData() para a instncia loadTarget_mc usa a varivel lastSiteVisited, carregada do arquivo myData.txt. As seguintes aes de rastreamentos so exibidas depois que todas as variveis, incluindo lastSiteVisited, so 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 voc usar os mtodos XML.load(), XML.sendAndLoad() e XMLSocket.connect(), dever definir um manipulador para processar os dados quando eles chegarem. Esse manipulador uma propriedade do objeto XML ou XMLSocket qual voc atribui uma funo definida. Os manipuladores so chamados automaticamente quando as informaes so recebidas. Para o objeto XML, use XML.onLoad() ou XML.onData(). Para o objeto XMLSocket, use XMLSocket.onConnect().

Enviando e carregando variveis

665

Para obter mais informaes, consulte Usando a classe XML na pgina 684 e Usando a classe XMLSocket na pgina 690. Para obter mais informaes sober como usar o LoadVars para enviar e carregar os dados que podem ser processados aps seu recebimento, consulte Usando a classe LoadVars na pgina 670.

Criando uma barra de progresso para exibir o progresso do carregamento dos dados
O exerccio a seguir cria dinamicamente um pr-carregador simples utilizando a API (application programming interface, interface de programao de aplicativos) do aplicativo de desenho e exibe o progresso de carregamento para um documento XML.
DICA

Se o carregamento do arquivo XML remoto for executado rpido demais para permitir a visualizao do efeito de pr-carregamento, tente carregar um arquivo XML maior na Internet.

Criando uma barra de progresso com a API do aplicativo de desenho:


1. 2.

Crie um novo documento do Flash e salve-o como drawapi.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var barWidth:Number = 200; var barHeight:Number = 6; 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; var stroke:MovieClip = pBar_mc.createEmptyMovieClip("stroke_mc", 20); stroke.lineStyle(0, 0x000000); stroke.moveTo(0, 0); stroke.lineTo(barWidth, 0); stroke.lineTo(barWidth, barHeight); stroke.lineTo(0, barHeight); stroke.lineTo(0, 0); pBar_mc.createTextField("label_txt", 30, 0, barHeight, 100, 21); pBar_mc.label_txt.autoSize = "left"; pBar_mc.label_txt.selectable = false;

666

Trabalhando com dados externos

pBar_mc._x = (Stage.width - pBar_mc._width) / 2; pBar_mc._y = (Stage.height - pBar_mc._height) / 2; var my_xml:XML = new XML(); my_xml.ignoreWhite = true; my_xml.onLoad = function(success:Boolean) { pBar_mc.onEnterFrame = undefined; if (success) { trace("XML loaded successfully"); } else { trace("Unable to load XML"); } }; my_xml.load("http://www.helpexamples.com/flash/xml/ds.xml"); 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 cdigo anterior divide-se em sete sees. 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 prxima seo. A prxima seo de cdigo cria dois clipes de filme, pBar_mc e bar_mc. O clipe de filme bar_mc aninhado dentro de pBar_mc e desenha um retngulo vermelho no Stage. A instncia 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 dimenses especificadas pelas variveis barHeight e barWidth definidas na primeira seo. A quarta seo do cdigo cria, dentro do clipe de filme pBar_mc, um campo de texto usado para exibir a porcentagem do arquivo XML j carregada, semelhante ao rtulo no componente ProgressBar. Em seguida, o clipe de filme pBar_mc (que inclui as instncias aninhadas de bar_mc, stroke_mc e label_txt) centralizado no Stage.

Enviando e carregando variveis

667

A sexta seo do cdigo define uma nova instncia do objeto XML, usada para carregar um arquivo XML externo. Um manipulador de eventos onLoad definido e rastreia uma mensagem para o painel Output (Sada). O manipulador de eventos onLoad tambm exclui o manipulador de eventos onEnterFrame (definido na prxima seo) do clipe de filme pBar_mc. A ltima seo do cdigo define um manipulador de eventos onEnterFrame para o clipe de filme pBar_mc. Esse manipulador de eventos monitora o quanto do arquivo XML externo foi carregado e modifica a propriedade _xscale do clipe de filme bar_mc. Priemiro, o manipulador de eventos onEnterFrame calcula a porcentagem do arquivo cujo download j terminou. Contanto que a porcentagem do arquivo carregada seja um nmero vlido, a propriedade _xscale de bar_mc ser definida e o campo de texto em pBar_mc exibir essa porcentagem. Se o carregamento do arquivo tiver sido concludo (alcanando 100%), o manipulador de eventos onEnterFrame ser excludo para que o progresso do download no seja mais monitorado.
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. A medida que o arquivo XML externo carregado, o clipe de filme bar_mc aninhado redimensionado para exibir o progresso de download do XML. Aps a concluso do carregamento do arquivo XML, o manipulador de eventos onEnterFrame er excludo para que n o continue calculando o progresso do download. Dependendo da rapidez da concluso do download, voc poder visualizar a barra crescendo lentamente at que bar_mc fique da mesma largura que o clipe de filme stroke_mc. Se o download for muito rpido, a barra de progresso poder ir de 0% a 100% velozmente, tornando difcil a visualizao do efeito; nesse caso, talvez seja necessrio tentar o download de um arquivo XML maior.

Usando HTTP para conectar a scripts do servidor


As funes %{loadVariables function}%, %{loadVariablesNum function}%, %{getURL function}%, %{loadMovie function}%, %{loadMovieNum function}% e os mtodos %{loadVariables (mtodo MovieClip.loadVariables)}%, %{loadMovie (mtodo MovieClip.loadMovie)}%, e %{getURL (mtodo MovieClip.getURL)}% podem se comunicar com scripts de servidor usando protocolos HTTP ou HTTPS.Esses mtodos e funes enviam todas as variveis da Timeline Linha de tempo) qual a funo est anexada. Quando usadas como mtodos do objeto MovieClip, as funes loadVariables(), getURL() e loadMovie() enviam todas as variveis do clipe de filme especificado. Cada funo (ou mtodo) manipula sua resposta da seguinte maneira:

668

Trabalhando com dados externos

A funo getURL() retorna todas as informaes para uma janela do navegador e no para o Flash Player. O mtodoloadVariables() carrega as variveis em uma Timeline ou nvel especificado do Flash Player. O mtodo loadMovie() carrega um arquivo SWF em um nvel especificado ou um clipe de filme no Flash Player.

Ao usar a funo loadVariables(), getURL() ou loadMovie(), voc pode especificar vrios parmetros:

URL

o arquivo onde residem as variveis remotas.

Local o nvel ou o destino no arquivo SWF que recebe as variveis. (A funo getURL()

no requer esse parmetro.) (Para obter mais informaes sobre nveis e destinos, consulte Captulo 1, Sobre vrias timelines (linhas de tempo) e nveis em Usando o Flash.)

Variables

define o mtodo HTTP, GET (anexa as variveis ao final do URL) ou POST (envia as variveis em um cabealho HTTP separado), pelo qual as variveis so enviadas. Quando esse parmetro omitido, o Flash Player adota como padro GET, mas nenhuma varivel enviada.

Por exemplo, para controlar as pontuaes mais altas de um jogo, voc pode armazen-las em um servidor e usar uma funo loadVariables() para carreg-las no arquivo SWF sempre que algum jogar o jogo. A chamada de funo seria semelhante ao seguinte exemplo:
this.createEmptyMovieClip("highscore_mc", 10); loadVariables("http://www.helpexamples.com/flash/highscore.php", highscore_mc, "GET");

Esse exemplo carrega as variveis do script ColdFusion chamado high_score.cfm na instncia de clipe de filme scoreClip usando o mtodo HTTP GET. Todas as variveis carregadas com a funo loadVariables() devem estar no formato padro de aplicativo MIME/x-www-form-urlencoded (um formato padro usado pelos scripts CFM e CGI). O arquivo especificado no parmetro URL de loadVariables() deve gravar a varivel e os pares de valroes nesse formato para que o Flash possa l-los. Esse arquivo pode especificar qualquer nmero de avriveis; a varivel e os pares de valroes devem ser separados com um E comercial (&), e as palavras contidas em um valor devem ser separadas por um sinal de adio (+). Por exemplo, a frase abaixo define diversas variveis:
highScore1=54000&playerName1=RGoulet&highScore2=53455&playerName2= WNewton&highScore3=42885&playerName3=TJones
NO T A

Voc pode precisar codificar por URL determinados caracteres, como o sinal de adio (+) ou E comercial (&). Para obter mais informaes, consulte www.macromedia.com/ go/tn_14143.

Usando HTTP para conectar a scripts do servidor

669

Para obter mais informaes, consulte o seguinte tpico: Usando a classe LoadVars na pgina 670. Alm disso, consulte as entradas %{loadVariables function}%, %{getURL function}%, %{loadMovie function}% e %{LoadVars}% em ActionScript 2.0 Language Reference.

Usando a classe LoadVars


Se voc estiver publicando no Flash Player 6 ou posterior e quiser mais flexibilidade do que a oferecida por loadVariables(), poder usar a classe LoadVars em vez de transferir variveis entre um arquivo SWF e um servidor. A classe LoadVars foi includa no Flash Player 6 para oferecer uma interface mais limpa e mais orientada a objeto para a tarefa comum de trocar dados CGI com um servidor Web. As vantagens da classe LoadVars so as seguintes:

No necessrio criar clipes de filme de recipiente para armazenar dados ou agrupar clipes de filme existentes com variveis especficas da comunicao cliente/servidor. A interface da classe semelhante ao objeto XML, o que proporciona alguma consistncia no ActionScript. Ela usa os mtodosd load(), send() e sendAndLoad() para iniciar a comunicao com um servidor. A principal diferena entre as classes LoadVars e XML que os dados de LoadVars so uma propriedade do objeto LoadVars, em vez de uma rvore DOM (Document Object Model, Modelo de objetos de documentos) XML armazenada no objeto XML. A interface da classe mais direta, com os mtodos chamados load, send, sendAndLoad, do que a interface loadVariables mais antiga. Voc pode obter informaes adicionais sobre a comunicao, usando os mtodos getBytesLoaded e getBytesTotal Voc pode obter informaes de progresso sobre o download dos dados (embora no possa acesasr os dados at que sejam totalmente descarregados). A interface de retorno de chamada utiliza os mtodos do ActionScript (onLoad) em vez do mtodo obsoleto onClipEvent (dados) necessrio para loadVariables. H notificaes de erro. possvel adcionar cabealhos de solicitao HTTP personalizados.

Voc precisa criar um objeto LoadVars para chamar seus mtodos. Esse objeto um recipiente que mantm os dados carregados.

670

Trabalhando com dados externos

O procedimento a seguir mostra como usar ColdFusion e a classe LoadVars para enviar um email de um arquivo SWF.
NO T A

Voc deve ter instalado o ColdFusion no navegador da Web para este exemplo.

Para carregar dados com o objeto LoadVars:


1.

Crie um arquivo CFM no Macromedia Dreamweaver ou no seu editor de texto favorito. Adicione o cdigo a seguir ao arquivo:
<cfif StructKeyExists(Form, "emailTo")> <cfmail to="#Form.emailTo#" from="#Form.emailFrom#" subject="#Form.emailSubject#">#Form.emailBody#</cfmail> &result=true <cfelse> &result=false </cfif>

2. 3. 4.

Salve o arquivo como email.cfm e carregue-o no seu site da Web. No Flash, crie um novo documento. Crie quatro campos de texto de entrada no Stage (Palco) e atribua-lhes os seguintes nomes de instncia: emailFrom_txt, emailTo_txt, emailSubject_txt e emailBody_txt. Crie um campo de texto dinmico no Stage e atribua a ele o nome de instncia debug_txt. Crie um smbolo de boto, arraste uma istncia para o Stage (Palco) e denomine-a como submit_btn. Selecione Frame 1 (Quadro 1) na Timeline e abra o painel Actions (Aes), em Window (Janela) > Actions, caso ainda no esteja aberto. Insira o cdigo a seguir no painel Actions (Aes):
this.submit_btn.onRelease = function() { var emailResponse:LoadVars = new LoadVars(); emailResponse.onLoad = function(success:Boolean) { if (sucesso) { debug_txt.text = this.result; } else { debug_txt.text = "error downloading content"; } }; var email:LoadVars = new LoadVars(); email.emailFrom = emailFrom_txt.text; email.emailTo = emailTo_txt.text; email.emailSubject = emailSubject_txt.text; email.emailBody = emailBody_txt.text;

5. 6.

7.

8.

Usando HTTP para conectar a scripts do servidor

671

email.sendAndLoad("http://www.yoursite.com/email.cfm", emailResponse, "POST"); };

Este cdigo ActionScript cria uma nova instncia 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 varivel (true ou false) ao arquivo SWF chamada result, que exibida no campo de texto debug_txt.
NO T A

Lembre-se de atlerar o URL www.yoursite.com para seu prprio domnio.

9.

Salve o documento como sendEmail.fla e publique-o selecionando File (Arquivo) > Publish (Publicar). salvo e carregado na etapa 2).

10. Carregue sendEmail.swf no mesmo diretri que contm email.cfm (o arquivo ColdFusion

11.

Exiba e teste o arquivo SWF em um navegador.

Para obter mais informaes, consulte a entrada %{LoadVars}% em ActionScript 2.0 Language Reference. O Flash Player 8 introduziu o manipulador de eventos onHTTPStatus para as classes LoadVars, XML e MovieClipLoader, com o objetivo de permitir que os usurios acessem o cdigo de status de uma solicitao HTTP. Isso permite que os desenvolvedores determinem por que uma determinada operao de carregamento falhou, em vez de apenas detectarem que uma operao desse tipo j falhou. O exemplo a seguir mostra como voc pode usar o manipulador de eventos onHTTPStatus da classe LoadVars para verificar se o download de um arquivo de texto foi realizado com xito do servidor e qual o cdigo de status retornado da solicitao HTTP.
Para verificar o status HTTP com o objeto LoadVars:
1. 2.

Crie um novo documento do Flash e salve-o como loadvars.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
this.createTextField("params_txt", 10, 10, 10, 100, 21); params_txt.autoSize = "left"; var my_lv:LoadVars = new LoadVars(); my_lv.onHTTPStatus = function(httpStatus:Number) { trace("HTTP status is: " + httpStatus); }; my_lv.onLoad = function(success:Boolean) { if (success) { trace("text file successfully loaded");

672

Trabalhando com dados externos

params_txt.text = my_lv.dayNames; } else { params_txt.text = "unable to load text file"; } }; my_lv.load("http://www.helpexamples.com/flash/404.txt"); /* output: Error opening URL "http://www.helpexamples.com/flash/404.txt" HTTP status is: 404 */

O cdigo anterior cria um novo campo de texto no Stage e permite o dimensionamento automtico desse campo. Em seguida, so criados um objeto LoadVars e dois manipuladores de eventos: onHTTPStatus e onLoad. O manipulador de eventos onHTTPStatus novo no Flash Player 8 e chamado quando a operao LoadVars.load() ou LoadVars.sendAndLoad() concluda. O valor passado para a funo do manipulador de eventos onHTTPStatus (httpStatus no cdigo anterios) contm a definio do cdigo de status HTTP para a operao de carregamento atual. Se o arquivo SWF foi carregado com xito no arquivo de texto, o valor de httpStatus ser definido como 200 (cdigo de status HTTP para OK). Se o arquivo no existisse no servidor, o valor de httpStatus seria definido para 404 (cdigo de status HTTP para No encontrado). O segundo manipulador de eventos, LoadVars.onLoad(), chamado aps a concluso do carregamento do arquivo. Se o arquivo for carregado com xito, o valor do parmetro success (sucesso) ser definido como true (verdadeiro), caso contrrio, o parmetro success ser definido como false (falso). Finalmente, o arquivo externo ser carregado usando-se o mtodo LoadVars.load().
3.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o documento do Flash. O Flash exibe uma mensagem de erro no painel Output (Sada) afirmando que no pode carregar a imagem porque ela no existe no servidor. O manipulador de eventos onHTTPStatus rastreia o cdigo de status 404 porque no foi possvel encontrar o arquivo no servidor, e o manipulador de eventos onLoad define a propriedade do campo de texto params_txt como unable to load text file (incapaz de carregar o arquivo de texto).
A T E N O

Se um servidor da Web no retornar um cdigo de status para o Flash Player, o nmero 0 ser retornado para o manipulador de eventos onHTTPStatus.

Usando HTTP para conectar a scripts do servidor

673

Sobre upload e download de arquivos


A classe FileReference permite adicionar a capacidade de carregar e fazer download de arquivos entre um cliente e um servidor. Os usurios podem carregar ou fazer download de arquivos entre seus computadores e um servidor. Os usurios devem selecionar um arquivo a ser carregado ou um local para download em uma caixa de dilogo (como a caixa de dilogo Abrir do sistema operacional Windows). Cada objeto FileReference que voc cria com o ActionScript refere-se a um nico arquivo no disco rgido do usurio. O objeto tem propriedades que contm informaes sobre o tamanho do arquivo, seu tipo, nome, data de criao e data de modificao. No Macintosh, tambm h uma propriedade para o tipo de autor do arquivo. Voc pode criar uma instncia da classe FileReference de duas maneiras. Voc pode usar o seguinte operador new (novo):
import flash.net.FileReference; var myFileReference:FileReference = new FileReference();

Ou, voc pode chamar o mtodo FileReferenceList.browse(), que abre uma caixa de dilogo no sistema do usurio para solicitar que ele selecione um arquivo para carregar e criar um array de objetos FileReference se o usurio selecionar um ou mais arquivos com xito. Cada objeto FileReference representa um arquivo selecionado pelo usurio na caixa de dilogo. Um objeto FileReference no conter nenhum dado nas propriedades FileReference (como name, size ou modificationDate) at que o mtodo FileReference.browse() ou FileReferenceList.browse() seja chamado e o usurio selecione um arquivo no seletor de arquivos ou at que o mtodo FileReference.download() seja usado para selecionar um item no seletor de arquivos.
N OT A 674 FileReference.browse() permite que o usurio selecione um nico arquivo. FileReferenceList.browse() permite que o usurio selecione vrios arquivos.

FileReference.upload()

Aps a realizao de uma chamada bem-sucedida para o mtodo browse(), chame para carregar um arquivo de cada vez.

Trabalhando com dados externos

Tambm possvel adicionar a funcionalidade de download ao seu aplicativo Flash. O mtodo FileReference.download() solicita aos usurios finais um local em seus discos rgidos para salvar o arquivo de um servidor. Esse mtodo tambm inicia o download de um URL remoto. Durante o uso do mtodo download(), somente a propriedade FileReference.name pode ser acessada quando o evento onSelect disparado. As outras propriedades s podero ser acessadas quando o evento onComplete for disparado.
NO TA

quando uma caixa de dilogo exibida no computador do usurio final, o local padro mostrado nessa caixa a pasta utilizada mais recentemente (se por possvel determinar esse local) ou a rea de trabalho (se no for possvel determinar a pasta mais recente). As APIs de FileReference e FileReferenceList no permitem que voc defina o local padro do arquivo

Para obter informaes sobre a funcionalidade e a segurana da API de FileReference, consulte Sobre a funcionalidade e a segurana da API de FileReference API na pgina 675. Para obter um exemplo de um aplicativo que usa a API de FileReference, consulte Adicionando a funcionalidade de carregamento de arquivo a um aplicativo na pgina 676. Voc poder encontrar o arquivo de origem de exemplo, FileUpload.fla, na pasta Samples (Exemplos) no disco rgido. No Windows, v para unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\FileUpload. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/FileUpload.

Para obter informaes sobre cada mtodo, propriedade e evento da API de FileReference, consulte %{FileReference (flash.net.FileReference)}% e %{FileReferenceList (flash.net.FileReferenceList)}% em ActionScript 2.0 Language Reference.

Sobre a funcionalidade e a segurana da API de FileReference API


O Flash Player e a API de FileReference (consulte Sobre upload e download de arquivos na pgina 674) oferecem suporte ao carregamento e download de arquivos de at 100 MB. A API de FileReference no permite que o aplicativo Flash que inicia a transferncia de arquivo faa o seguinte: Acesse o arquivo carregado ou cujo download foi realizado Acesse o caminho do arquivo no computador do usurio

Sobre upload e download de arquivos

675

Quando um servidor requer autenticao, a nica operao possivelmente bem-sucedida a realizao do download do arquivo com o plug-in do navegador do Flash Player. O carregamento em todos os Flash Players ou o download por meio do Flash Player independente ou externo falhar em um servidor que exija autenticao. Use os ouvintes de eventos de FileReference para determinar se as operaes foram concludas com xito ou para manipular erros. O carregamento e o download de arquivo esto restritos ao domnio de arquivo SWF, incluindo os domnios especificados com o uso de um arquivo de diretivas entre domnios. necessrio colocar um arquivo de diretivas no servidor quando o arquivo SWF que inicia o carregamento ou o download no vem do mesmo domnio que o servidor. Para obter mais informaes sobre arquivos de diretivas entre domnios e segurana, consulte Sobre domnios, segurana entre domnios e arquivos SWF na pgina 727. Quando as chamadas a FileReference.browse(), FileReferenceList.browse() ou FileReference.download() estiverem em execuo, a reproduo do arquivo SWF ser interrompida nas seguintes plataformas: Plug-ins de navehador do Flash Player no Mac OS X, Flash Player externo do Macintosh e exibidor inependente Macintosh no Mac OS X 10.1 e posterior. O arquivo SWF continua a ser executado em todos os exibidores Windows e no -Flash Player independente do Macintosh no Mac OS X 10.2 e posterior.
A VI S O 676

Ao permitir que os usurios carreguem arquivos em um ervidor, voc sempre deve ter o cuidado de verificar o tipo de arquivo, antes de salv-lo no disco rgido. Por exemplo, voc no gostaria de permitir que um usurio carregasse um script de servidor que pudesse ser usado para excluir pastas ou arquivos nesse servidor. Se voc s quiser permitir que os usurios carreguem um arquivo de imagem, verifique se o script de servidor que carrega os arquivos determina se o arquivo sendo carregado uma imagem vlida.

Para obter um exemplo de um aplicativo que usa a API de FileReference, consulte Adicionando a funcionalidade de carregamento de arquivo a um aplicativo na pgina 676.

Adicionando a funcionalidade de carregamento de arquivo a um aplicativo


O procedimento a seguir mostra como criar um aplicativo que permite o carregamento de arquivos de imagem em um servidor. O aplicativo permite que os usurios selecionem uma imagem em seus discos rgidos para carregar e enviar a um servidor. A imagem carregada aparecer no arquivo SWF utilizado para carregar a imagem.

Trabalhando com dados externos

Depois do exemplo que cria o aplicativo Flash h um exemplo que detalha o cdigo do servidor. Lembre-se de que os arquivos de imagem tm tamanhos restritos: voc s pode carregar imagens com at 200K.
Para criar um aplicativo FLA usando a API de FileReference:
1. 2.

Crie um novo documento do Flash e salve-o como fileref.fla. Abra o painel Components (Componentes) e arraste um componente ScrollPane para o Stage (Palco) e d a ele o nome de instncia imagePane. (A instncia ScrollPane ser dimensionada e reposicionada com o uso do ActionScript em uma etapa posterior.) Arraste um componente Button (Boto) para o Stage e d a ele o nome de instncia uploadBtn. Arraste dois componentes Label (Rtulo) para o Stage e d a eles os nomes de instncia imageLbl e statusLbl. Arraste um componente ComboBox (Caixa de combinao) para o Stage e d a ele o nome de instncia imagesCb. Arraste um componente TextArea (rea de texto) para o Stage e d6e a ele o nome de instncia statusArea. Crie um novo smbolo de clipe de filme no Stage e abra o smbolo para edio (clique duas vezes na instncia para abri-la no modo de edio de smbolo). Crie um novo campo de texto esttico dentro do clipe de filme e adicione o seguinte texto: O arquivo do qual voc tentou fazer download no est no servidor. No aplicativo final, esse aviso poder aparecer devido a um dos seguintes motivos, entre outros:

3.

4.

5.

6.

7.

8.

A imagem foi excluda da fila no servidor durante o carregamento de outra imagem. O servidor no copiou a imagem porque o tamanho do arquivo ultrapassou 200K. O tipo de arquivo no era JPEG, GIF ou PNG vlido.
N OT A

A largura do campo de texto deve ser menor do que a da instncia de ScrollPane (400 pixels); caso contrrio, os usurios tero que rolar horizontalmente para visualizar a mensagem de erro

9.

Clique com o boto direito do mouse no smbolo na Library (Biblioteca) e selecione Linkage (Vinculao) no menu de contexto. in First Frame (Exportar no primeiro quadro) e digite Message (Mensagem) no campo de texto Identifier (Identificador). Clique em OK.

10. Marque as caixas de seleo Export for ActionScript (Exportar para ActionScript) e Export

Sobre upload e download de arquivos

677

11.

Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo):


N OT A

Os comentrios do cdigo apresentam detalhes sobre a funcionalidade. Uma viso geral do cdigo ser mostrada depois desse exemplo.

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); /* The listener object listens for FileReference events. */ var listener:Object = new Object(); /* 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"); }; /* When the file begins to upload, the onOpen() method is called, so notify the user that the file is starting to upload. */ listener.onOpen = function(selectedFile:FileReference):Void { statusArea.text += "Opening " + selectedFile.name + "\n"; }; /* When the file has uploaded, the onComplete() method is called. */ listener.onComplete = function(selectedFile:FileReference):Void { /* Notify the user that Flash is starting to download the image. */ statusArea.text += "Downloading " + selectedFile.name + " to player\n"; /* Add the image to the ComboBox component. */ imagesCb.addItem(selectedFile.name); /* Set the selected index of the ComboBox to that of the most recently added image. */ imagesCb.selectedIndex = imagesCb.length - 1; /* Call the custom downloadImage() function. */

678

Trabalhando com dados externos

downloadImage(); }; var imageFile:FileReference = new FileReference(); imageFile.addListener(listener); 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"}]); }

Esse cdigo do ActionScript primeiro importa a classe FileReference e inicializa, posiciona e redimensiona cada um dos componentes no Stage. Em seguida, um objeto ouvinte e trs manipuladores de evento so definidos: onSelect, onOpen e onComplete. O objeto ouvinte adicionado a um novo objeto FileReference denominado imageFile. Em seguida, ouvintes de eventos so adicionados instncia de ScrollPane imagePane, instncia de ComboBox imagesCb e instncia de Button uploadBtn. Cada uma das funes do ouvinte de eventos definida no cdigo aps essa seo de cdigo.

Sobre upload e download de arquivos

679

A primeira funo, imageDownloaded(), verifica se a quantidade total de bytes para as imagens descarregadas -1, e se for, define contentPath para a instncia de ScrollPane como o clipe de filme com o identificador de vinculao de Message, que voc criou em uma etapa anterior. A segunda funo, downloadImage(), tenta fazer o download da imagem recm-carregada na instncia de ScrollPane. Quando o download da imagem terminar, a funo imageDownloaded() definida anteriormente ser ativada e verificar se o downloaded foi realizado com xito. A ltima funo, uploadImage(), abre uma caixa de dilogo de navegador de arquivos, que filtra todas as imagens JPEG, GIF e PNG.
12. Salve 13.

as alteraes no documento.

Selecione File (Arquivo) > Publish settings (Configuraes de publicao), escolha a guia Formats (Formatos) e verifique se as opes Flash e HTML esto selecionadas. Na caixa de dilogo Publish Settings, selecione a guia Flash e a opo Access Network Only (Acessar somente a rede) no menu pop-up Local Playback Security (Segurana de reproduo local). Se concluir essa etapa, voc no encontrar restries de segurana ao testar o documento em um navegador local.

14. (Opcional)

15.

Na caixa de dilogo Publish Settings, clique em Publish (Publicar) para criar os arquivos HTML e SWF. Quando terminar, v para o prximo procedimento, no qual voc criar o recipiente para o arquivo SWF.

Voc poder encontrar o arquivo de origem de exemplo, FileUpload.fla, na pasta Samples (Exemplos) no disco rgido.

No Windows, v para unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\FileUpload. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/FileUpload.

O procedimento a seguir requer que o recurso PHP esteja instalado no servidor da Web e que voc tenha permisses de gravao nas subpastas de imagens denominadas e temporrias. Primeiro, necessrio concluir o procedimento anterior ou usar o arquivo SWF concludo disponvel nas pastas indicadas anteriormente.
Para criar um script de servidor para o aplicativo de carregamento de imagem:
1.

Crie um novo documento PHP usando um editor de texto como o Dreamweaver ou o Bloco de Notas. Adicione o cdigo PHP a seguir ao documento. (Uma viso geral do cdigo ser mostrada depois desse script.)

2.

680

Trabalhando com dados externos

<?php $MAXIMUM_FILESIZE = 1024 * 200; // 200KB $MAXIMUM_FILE_COUNT = 10; // keep maximum 10 files on server echo exif_imagetype($_FILES['Filedata']); if ($_FILES['Filedata']['size'] <= $MAXIMUM_FILESIZE) { move_uploaded_file($_FILES['Filedata']['tmp_name'], "./temporary/ ".$_FILES['Filedata']['name']); $type = exif_imagetype("./temporary/".$_FILES['Filedata']['name']); if ($type == 1 || $type == 2 || $type == 3) { rename("./temporary/".$_FILES['Filedata']['name'], "./images/ ".$_FILES['Filedata']['name']); } else { unlink("./temporary/".$_FILES['Filedata']['name']); } } $directory = opendir('./images/'); $files = array(); while ($file = readdir($directory)) { array_push($files, array('./images/'.$file, filectime('./images/ '.$file))); } usort($files, sorter); if (count($files) > $MAXIMUM_FILE_COUNT) { $files_to_delete = array_splice($files, 0, count($files) $MAXIMUM_FILE_COUNT); for ($i = 0; $i < count($files_to_delete); $i++) { unlink($files_to_delete[$i][0]); } } print_r($files); closedir($directory); function sorter($a, $b) { if ($a[1] == $b[1]) { return 0; } else { return ($a[1] < $b[1]) ? -1 : 1; } } ?>

Esse cdigo PHP primeiro define duas variveis constantes: $MAXIMUM_FILESIZE e $MAXIMUM_FILE_COUNT. Essas variveis determinam o tamanho mximo (em kilobytes) de uma imagem sendo carregada no servidor (200KB), bem como a quantidade de arquivos carregados recentemente que pode ser mantida na pasta de imagens (10). Se o tamanho do arquivo de imagem sendo carregado no momento for menor que ou igual ao valor de $MAXIMUM_FILESIZE, a imagem ser movida para a pasta temporria.

Sobre upload e download de arquivos

681

Em seguida, o tipo de arquivo carregado ser evrificado para garantir que a imagem seja JPEG, GIF ou PNG. Se a imagem for de um tipo compatvel, ela ser copiada da pasta temporria para a pasta de imagens. Se o arquivo carragado no pertencer a um tipo permitido, ele ser excludo do sistema de arquivos. Em seguida, uma listagem de diretrio da pasta de imagens ser criada e repetida com uma repetio while. Cada arquivo na pasta de imagens ser adicionado a um array e classificado em seguida. Se o nmero atual de arquivos na pasta de imagens for maior do que o valor de $MAXIMUM_FILE_COUNT, arquivos sero excludos at que haja apenas $MAXIMUM_FILE_COUNT imagens. Isso evita que a pasta de imagens atinja um tamanho impossvel de gerenciar, j que ela s pode conter 10 imagens de cada vez, e cada imagem s pode ter at 200KB (ou aproximadamente 2 MB de imagens de cada vez).
3. 4. 5.

Salve as alteraes no documento PHP. Carregue os arquivos SWF, HTML e PHP no navegador da Web. Visualize o documento HTML remoto em um navegador da Web e clique no boto Upload Image (Carregar imagem) no arquivo SWF. Localize um arquivo de imagem no disco rgido e selecione Open (Abrir) na caixa de dilogo. O arquivo SWF carrega o arquivo de imagem no documento PHP remoto e o exibe no ScrollPane (que adiciona barras de rolagem se necessrio). Para visualizar uma imagem carregada anteriormente, selecione o nome de arquivo na instncia de ComboBox no Stage. Se o usurio tentar carregar uma imagem que no seja de um tipo permitido (JPEG, GIF ou PNG) ou o arquivo for grande demais (mais de 200 KB), o Flash exibir a mensagem de erro no clipe de filme Message na Library.

6.

Voc poder encontrar o arquivo de origem de exemplo, FileUpload.fla, na pasta Samples (Exemplos) no disco rgido.

No Windows, v para unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\FileUpload. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/FileUpload.

Para obter mais informaes sobre a segurana de arquivo local, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709. Para obter mais informaes sobre como gravar em PHP, v para www.php.net/.

682

Trabalhando com dados externos

Sobre XML
Extensible Markup Language (XML) is becoming the standard for exchanging structured data in Internet applications. possvel integrar dados no Flash com servidores que usam a tecnologia XML para criar aplicativos sofisticados, como sistemas de bate-papo ou de corretagem. No XML, assim como no HTML, use marcas para especificar ou marcar um corpo de texto. No HTML, use as marcas predefinidas para indicar como o texto deve aparecer no navegador da Web (por exemplo, a marca< b >indica que o texto deve estar em negrito). No XML, defina as marcas que identificam o tipo dos dados (por exemplo, >password<VerySecret</ password>). O XML separa a estrutura das informaes da forma como elas so exibidas, de modo que o mesmo documento XML possa ser usado e reutilizado em ambientes diferentes. Toda marca XML chamada de n ou elemento. Cada n possui um tipo (1, que indica um elemento XML, ou 3, que indica um n de texto), e os elementos tambm podem ter atributos. Um n aninhado em outro n denominado n-filho. Essa estrutura de rvore hierrquica de ns denominada DOM XML, semelhante ao DOM JavaScript, que a estrutura de elementos de um navegador da Web. No exemplo a seguir, <portfolio> o n pai. Ele no tem atributos e contm o n filho <holding>, que tem os atributos symbol, qty, price e value:
<portfolio> <holding symbol="rich" qty="75" price="245.50" value="18412.50" /> </portfolio>

Para obter mais informaes, consulte os tpicos a seguir:


Usando a classe XML na pgina 684 Usando a classe XMLSocket na pgina 690

Para obter mais informaes sobre XML, consulte www.w3.org/XML. H vrios arquivos de exemplo no disco rgido que carregam XML em um arquivo SWF em tempo de execuo. 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 rgido.

No Windows, v para boot drive\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\XML_BlogTracker. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/XML_BlogTracker.

Sobre XML

683

Um segundo exemplo demonstra como usar XML e arrays aninhados paa selecionar seqncias de caracteres de idiomas diferentes para preencher campos de texto. Voc poder encontrar o arquivo de origem de exemplo, xml_languagePicker.fla, na pasta Samples (Exemplos) no disco rgido.

No Windows, v para unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\XML_LanguagePicker. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/XML_LanguagePicker.

Um terceiro exemplo demonstra como criar um menu dinmico com dados XML. O exemplo chama o construtor ActionScript XmlMenu() e passa dois parmetros a ele: o caminho para o arquivo de menu XML e uma referncia para a Timeline atual. O restante da funcionalidade reside em um arquivo de classe personalizado, XmlMenu.as. Voc poder encontrar o arquivo de origem de exemplo, xmlmenu.fla, na pasta Samples (Exemplos) no disco rgido.

No Windows, v para unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\XML_Menu. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/XML_Menu.

Usando a classe XML


Os mtodos da classe ActionScript XML (por exemplo, appendChild(), removeNode() e insertBefore()) permitem estruturar os dados XML no Flash para envi-los a um servidor e para manipular e interpretar os dados XML descarregados. Os mtodos da classe XML a seguir enviam e carregam dados XML em um servidor usando o mtodo POST HTTP:

O mtodo load() faz o download do XML de um URL e coloca-o em um objeto ActionScript XML. O mtodo send()codifica o objeto XML em um documento XML e o envia para um URL especificado usando o mtodo POST. Se especificado, uma janela de navegador exibir os dados retornados. O mtodo sendAndLoad() passa um objeto XML para um URL. Todas as informaes retornadas so colocadas em um objeto ActionScript XML.

Por exemplo, possvel criar um sistema de corretagem para a venda de ttulos que armazene todas as informaes (nomes de usurios, senhas, identificaes de sesses, ttulos em carteira e informaes sobre transaes) em um banco de dados.

684

Trabalhando com dados externos

O script do servidor que transfere as informaes entre o Flash e o banco de dados l e grava os dados no formato XML. O ActionScript pode ser usado para converter as informaes obtidas no arquivo SWF (por exemplo, um nome de usurio e uma senha) em um objeto XML e, em seguida, enviar os dados para o script de servidor como um documento XML. Voc tambm pode usar o ActionScript para carregar o documento XML retornado pelo servidor em um objeto XML para ser usado no arquivo SWF.
documento XML documento XML Resposta Solicitao SQL

loginReplyXML loginXML

Banco de dados
username Jean Smith password

Submit

Filme do Flash

O fluxo e a converso de dados entre um filme do Flash, um script do servidor e um banco de dados A validao da senha no sistema de corretagem requer dois scripts: uma funo definida no Quadro 1, e um script que cria e depois envia os objetos XML criados no documento. Quando os usurios inserem informaes em campos de texto no arquivo SWF com as variveis username e password, essas variveis devem ser convertidas em XML antes de serem passadas para o servidor. A primeira seo do script carrega as variveis em um objeto XML criado recentemente chamado loginXML. Quando o usurio clica em um boto para fazer login, o objeto loginXML convertido em uma seqncia de caracteres do XML e enviado para o servidor. O cdigo 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;

Sobre XML

685

trace(_global.session); gotoAndStop("welcome"); break; case 'FAILURE' : gotoAndStop("loginfailure"); break; default: // this should never happen trace("Unexpected value received for STATUS."); } } else { trace("an error occurred."); } }; // this function triggers when the login_btn is clicked login_btn.onRelease = function() { var loginXML:XML = new XML(); // create XML formatted data to send to the server var loginElement:XMLNode = loginXML.createElement("login"); loginElement.attributes.username = username; loginElement.attributes.password = password_txt.text; loginXML.appendChild(loginElement); // send the XML formatted data to the server loginXML.sendAndLoad("http://www.flash-mx.com/mm/main.cfm", loginReplyXML); };

Voc pode testar esse cdigo usando o nome de usurio JeanSmith e a senha VerySecret. A primeira seo do script gera o seguinte XML quando o usurio clica no boto de login:
<login username="JeanSmith" password="VerySecret" />

686

Trabalhando com dados externos

O servidor recebe o XML, gera uma resposta XML e envia-a de volta ao arquivo SWF. Se a senha for aceita, o servidor responder da seguinte maneira:
<LOGINREPLY STATUS="OK" SESSION="4D968511" />

Esse XML inclui um atributo session que contm a identificao de uma sesso exclusiva, gerada aleatoriamente, que ser usada em todas as comunicaes entre o cliente e o servidor no restante da sesso. 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 instruo 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 instruo nesse cdigo ActionScript defime uma funo annima (inline), chamada quando o evento onLoad disparado. O boto de login (instncia login_btn) usado para enviar o nome do usurio e a senha como XML ao servidor e para carregar uma resposta XML de volta para o arquivo SWF. Voc pode usar o mtodo 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 so criados por meio dos valores inseridos pelo usurio no arquivo SWF, e esse objeto XML enviado por meio do mtodo sendAndLoad. Semelhante aos dados de uma funo loadVariables(), o elemento XML loginreply chega de forma assncrona (ou seja, no 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 funo loginReplyXML, chamada quando o manipulador onLoad disparado, de modo que possa processar o elemento loginreply.
NO T A

Essa funo sempre deve estar no quadro que contm oActionScript referente ao boto de login.

Sobre XML

687

Se o login for bem-sucedido, o arquivo SWF passar para o rtulo de quadro welcome. Se houver falha no login, a reproduo passar para o rtulo de quadro loginfailure. Esse processamento usa uma condio e uma instruo case. Para obter mais informaes sobre as instrues case e break, consulte %{case statement}% e %{break statement}% em ActionScript 2.0 Language Reference. Para obter mais informaes sobre condies, consulte %{if statement}% e %{else statement}% em ActionScript 2.0 Language Reference.
NO TA

Esse design apenas um exemplo, e a Macromedia no oferece garantia alguma quanto ao nvel de segurana proporcionado. Se voc estiver implementando um sistema seguro protegido por senha, dever ter um bom conhecimento de segurana de rede.

Para obter mais informaes, 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 informaes sobre a segurana de arquivo local, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709. Voc poder encontrar o arquivo de origem de exemplo, login.fla, na pasta Samples (Exemplos) no disco rgido. 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 formulrio no qual voc insere um nome de usurio e uma senha, e depois clica em um boto para entrar em um site. No Windows, v para unidade de inicializao\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 usurios acessem o cdigo de status de uma solicitao HTTP. Isso permite que os desenvolvedores determinem por que uma determinada operao de carregamento falhou, em vez de apenas detectarem que uma operao 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 cdigo de status retornado da solicitao HTTP.
Verificando os cdigos de status HTTP com a classe XML:
1. 2.

Crie um novo documento do Flash e salve-o como xmlhttp.fla. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
var my_xml:XML = new XML();

688

Trabalhando com dados externos

my_xml.ignoreWhite = true; my_xml.onHTTPStatus = function(httpStatus:Number) { trace("HTTP status is: " + httpStatus); }; my_xml.onLoad = function(success:Boolean) { if (success) { trace("XML carregado com xito"); // 0 (No error; parse was completed successfully.) trace("o status XML : " + my_xml.status); } else { trace("impossvel carregar XML"); } }; my_xml.load("http://www.helpexamples.com/crossdomain.xml");

O cdigo anterior define um novo objeto XML com o nome de varivel 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 cdigo de status do servidor da Web, enquanto a propriedade XML.status contm um valor numrico 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 A VI S O A T E N O

O manipulador de eventos XML.onHTTPStatus novo no Flash Player 8.

No confunda os cdigos HTTP httpStatus com a propriedade status da classe XML. O manipulador de eventos onHTTPStatus retorna o cdigo de status do servidor de uma solicitao HTTP e a propriedade status define automaticamente e retorna um valor numrico que indica se um documento XML foi analisado com xito em um objeto XML. Se um servidor da Web no retornar um cdigo de status para o Flash Player, o nmero 0 ser retornado para o manipulador de eventos onHTTPStatus.

H vrios arquivos de exemplo no disco rgido que carregam XML em um arquivo SWF em tempo de execuo. 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 rgido.

Sobre XML

689

No Windows, v para unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\XML_BlogTracker. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/XML_BlogTracker.

Um segundo exemplo demonstra como usar XML e arrays aninhados paa selecionar seqncias de caracteres de idiomas diferentes para preencher campos de texto. Voc poder encontrar o arquivo de origem de exemplo, xml_languagePicker.fla, na pasta Samples (Exemplos) no disco rgido.

No Windows, v para unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\XML_LanguagePicker. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/XML_LanguagePicker.

Um terceiro exemplo demonstra como criar um menu dinmico com dados XML. O exemplo chama o construtor ActionScript XmlMenu() e passa dois parmetros a ele: o caminho para o arquivo de menu XML e uma referncia para a Timeline atual. O restante da funcionalidade reside em um arquivo de classe personalizado, XmlMenu.as. Voc poder encontrar o arquivo de origem de exemplo, xmlmenu.fla, na pasta Samples (Exemplos) no disco rgido.

No Windows, v para unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\XML_Menu. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/XML_Menu.

Usando a classe XMLSocket


O ActionScript dispe de uma classe XMLSocket interna que permite a abertura de uma conexo contnua com um servidor. Uma conexo de soquete permite que o servidor publique ou envie informaes para o cliente assim que elas estejam disponveis. Sem uma conexo contnua, o servidor deve aguardar uma solicitao HTTP. Essa conexo aberta elimina os problemas de latncia e normalmente usada para aplicativos em tempo real, como aplicativos de bate-papo. Os dados so enviados atravs da conexo de soquete como uma nica seqncia de caracteres e devem estar no formato XML. Voc pode usar a classe XML para estruturar os dados.

690

Trabalhando com dados externos

Para criar uma conexo de soquete, necessrio criar um aplicativo do servidor para aguardar a solicitao dessa conexo e enviar uma resposta ao arquivo SWF. possvel criar esse tipo de aplicativo de servidor em uma linguagem de programao, como Java.
NO TA

A classe XMLSocket no pode ser encapsulada de forma automtica atravs de firewalls porque, diferentemente do protocolo RTMP, essa classe no tem recursos de encapsulamento HTTP. Se voc precisar usar o encapsulamento HTTP, em vez disso, use o Flash Remoting ou Flash Communication Server (que oferece suporte a RTMP).

Voc pode usar os mtodos connect() e send() da classe XMLSocket para transferir XML para/de um servidor atravs de uma conexo de soquete. O mtodo connect() estabelece uma conexo de soquete com uma porta do servidor da Web. O mtodo send() envia um objeto XML para o servidor especificado na conexo de soquete. Quando voc chama o mtodo connect(), o Flash Player abre uma conexo TCP/IP com o servidor e mantm a conexo aberta at que ocorra uma das seguintes situaes: O mtodo close() da classe XMLSocket chamado. No existe mais nenhuma referncia ao objeto XMLSocket. O Flash Player encerrado. A conexo interrompida (por exemplo, o modem desconectado).

O exemplo a seguir cria uma conexo 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

Sobre XML

691

sendButton.onRelease = function() { sendData(); }; // traces data returned from socket connection theSocket.onData = function(msg:String):Void { trace(msg); };

Para obter mais informaes, consulte a entrada %{XMLSocket}% em ActionScript 2.0 Language Reference. Para obter mais informaes sobre a segurana de arquivo local, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709.

Enviando mensagens para o Flash Player e a partir deste


Para enviar mensagens de um arquivo SWF a seu ambiente de host (por exemplo, um navegador da Web, um filme do Macromedia Director ou o Flash Player independente), use a funo fscommand().Essa funo permite estender o arquivo SWF com os recursos do host. Por exemplo, voc pode enviar uma funo fscommand() para uma funo JavaScript em uma pgina HTML que abra uma nova janela do navegador com propriedades especficas. Para controlar um SWF do Flash Player a partir de linguagens de script do navegador da Web, como JavaScript, VBScript e Microsoft JScript, voc pode usar os mtodos do Flash Player, funes que enviam mensagens de um ambiente de host para o SWF. Por exemplo, voc pode ter um link em uma pgina HTML que envie o arquivo SWF para um quadro especfico. Para obter mais informaes, consulte os seguintes tpicos:

Usando a funo fscommand() na pgina 692 Sobre o uso de JavaScript para controlar os aplicativos Flash na pgina 695 Sobre os mtodos do Flash Player na pgina 696

Usando a funo fscommand()


N O TA 692

A API External (Externa) uma substituta da funo fscommand() no Flash 8 para interoperao com uma pgina HTML ou um aplicativo de recipiente. A API External oferece uma funcionalidade mais avanada do que a funofscommand() nessa situao. Para obter mais informaes, consulte Sobre a API External na pgina 696.

Trabalhando com dados externos

Use a funo fscommand() para enviar uma mensagem para qualquer programa que esteja hospedando o Flash Player, como um navegador da Web.
NO T A quit fullscreen exec N OT A

O uso de fscommand() para chamar o JavaScript no funciona nos navegadores Safari ou Internet Explorer para Macintosh.

A funo fscommand() tem dois parmetros: command e arguments. Para enviar uma mensagem para a verso 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 usurio solta o boto:
my_btn.onRelease = function() { fscommand("fullscreen", true); };

A tabela a seguir mostra os valores que podem ser especificados para os parmetros command e arguments da funo fscommand() a fim de controlar a aparncia de arquivo SWF que esteja sendo reproduzido no exibidor independente (incluindo projetores):
Um projetor um arquivo SWF salvo em um formato que pode ser executado comom aplicativo independente ou seja, incorporando o Flash Player com o contedo de um arquivo executvel.

Comando

Arguments
Nenhum
true ou false

Objetivo
Fecha o projetor. A especificao de true define o Flash Player no modo de tela cheia. A especificao de false retorna o exibidor para a exibio normal de menu. O valor false define o exibidor para que ele sempre desenhe o arquivo SWF em seu tamanho original e nunca redimensionado. O valor true fora o arquivo SWF a ser redimensionado para a escala de 100% do exibidor. A especificao de true ativa o conjunto completo de itens do menu de contexto. A especificao de false torna esmaecidos todos os itens do menu de contexto, exceto Settings (Configuraes) e About Flash Player (Sobre o Flash Player).

allowscale

true ou false

showmenu

true ou false

Caminho para o Executa um aplicativo no projetor. aplicativo

Enviando mensagens para o Flash Player e a partir deste

693

Para usar fscommand() para enviar uma mensagem para uma linguagem de script como JavaScript em um navegador da Web, passe dois parmetros quaisquer em command e arguments. Esses parmetros podem ser seqncias de caracteres ou expresses e sero usados em uma funo JavaScript que captura, ou manipula, a funo fscommand(). Uma funo fscommand() chama a funo JavaScript moviename_DoFSCommand na pgina HTML que incorpora o arquivo SWF, onde moviename o nome do Flash Player designado pelo atributo name da marca embed ou pelo atributo id da marca objeto. Se o nome do arquivo SWF atribudo ao Flash Player for myMovie, a funo JavaScript chamada ser myMovie_DoFSCommand.
Para usar fscommand() a fim de abrir uma caixa de mensagem em um arquivo SWF na pgina HTML atravs de JavaScript:
1. 2.

Crie um novo arquivo FLA e salve-o como myMovie.fla. Arraste duas instncias do componente Button para o Stage (Palco) e atribua-lhes os nomes window_btn e alert_btn, respectivamente, e os rtulos Open Window e Alert. Insira uma nova camada na Timeline e a remomeie como Actions. Selecione o Quadro 1 da camada Actions e adicione o seguinte cdigo ActionScript no painel Actions (Aes):
window_btn.onRelease = function() { fscommand("popup", "http://www.macromedia.com/"); }; clear_btn.onRelease = function() { fscommand("alert", "You clicked the button."); };

3. 4.

5.

Selecione File (Arquivo) > Publish Settings (Configuraes de publicao) e verifique se o Flash com FSCommand est selecionado no menu Template (Modelo) da guia HTML. Selecione File > Publish (Arquivo - Publicar) para gerar os arquivos SWF e HTML. Em um editor de texto ou HTML, abra o arquivo HTML gerado na etapa 6 e examine o cdigo. Quando voc publicou o arquivo SWF usando o Flash com o modelo FSCommand na guia HTML da caixa de dilogo Publish Settings, um cdigo adicional foi inserido no arquivo HTML. Os atributos NAME e ID do arquivo SWF so o nome do arquivo. Por exemplo, para o arquivo myMovie.fla, os atributos sero definidos como myMovie. No arquivo HTML, adicione o cdigo JavaScript a seguir, onde // Place your code here. exibido no documento:
if (command == "alert") { alert(args); } else if (command == "popup") { window.open(args, "mmwin", "width=500,height=300"); }

6. 7.

8.

694

Trabalhando com dados externos

(Para obter mais informaes sobre publicao, consulte Captulo 17, Publicao em Usando o Flash.) Como alternativa, nos aplicativos do Microsoft Internet Explorer, possvel anexar um manipulador de eventos na marca <SCRIPT>, como mostrado neste exemplo:
<script Language="JavaScript" event="FSCommand (command, args)" for="theMovie"> ... </script> 9.

Salve e feche o arquivo HTML. Quando estiver reeditando os arquivos HTML fora do Flash dessa maneira, lembre-se de que voc deve desmarcar a caixa de seleo HTML em File > Publish Settings; caso contrrio, o cdigo HTML ser substitudo pelo Flash quando for feita a nova publicao.

10. Em um da navegador da Web, abra o arquivo HTML para exibi-lo. Clique no boto Open

Window (Abrir janela); uma janela aberta no site da Macromedia. Clique no boto Alert (Alerta) para abrir uma janela de alerta. A funo fscommand() pode enviar mensagens ao Macromedia Director que so interpretadas pelo Lingo como seqncias de caracteres, eventos ou cdigo Lingo executvel. Se a mensagem for uma seqncia de caracteres ou um evento, voc dever criar o cdigo Lingo para receb-la a partir da ao fscommand() e executar uma ao no Director. Para obter mais informaes, consulte o Director Support Center (Centro de suporte do Director em www.macromedia.com/support/director. No Visual Basic, Visual C++ e em outros programas que podem hospedar controles ActiveX, fscommand() envia um evento VB com duas seqncias de caracteres que podem ser manipuladas na linguagem de programao do ambiente. Para obter mais informaes, use as palavras-chave Flash method e faa uma pesquisa no Flash Support Center (Centro de suporte do Flash) em www.macromedia.com/support/flash.

Sobre o uso de JavaScript para controlar os aplicativos Flash


O Flash Player 6 (6.0.40.0) e as verses posteriores oferecem suporte aos mtodos JavaScript especficos dos aplicativos Flash, bem como o FSCommand no Netscape 6.2 e posterior. As verses anteriores no oferecem suporte aos mtodos do Flash JavaScript e ao FSCommand no Netscape 6.2 ou verses posteriores. Para obter mais informaes, consulte o artigo do Macromedia Support Center (Centro de suporte da Macromedia), Scripting With Flash (Criando scripts com o Flash) em www.macromedia.com/support/flash/publishexport/ scriptingwithflash/.

Enviando mensagens para o Flash Player e a partir deste

695

Para o Netscape 6.2 e verses posteriores, no necessrio definir o atributo swliveconnect como true. Entretanto, a definio de swLiveConnect como true no tem efeitos adversos no arquivo SWF. Para obter mais informaes, consulte o atributo swLiveConnect em Parmetros e atributos na pgina 540 in Usando o Flash.

Sobre os mtodos do Flash Player


Voc pode usar os mtodos do Flash Player para controlar um arquivo SWF no Flash Player a partir de linguagens de script de navegador da Web, como JavaScript e VBScript. Como ocorre em outros mtodos, possvel usar os mtodos do Flash Player para enviar chamadas aos arquivos SWF do Flash a partir de um ambiente de script diferente do ActionScript. Cada mtodo possui um nome, e a maioria dos mtodos contm parmetros. Um parmetro especifica o valor com que o mtodo opera. O clculo executado por alguns mtodos retorna um valor que pode ser usado pelo ambiente de script. Duas tecnologias permitem a comunicao entre o navegador e o Flash Player: LiveConnect (Netscape Navigator 3.0 ou posterior no Windows 95/98/2000/NT ou Power Macintosh) e ActiveX (Internet Explorer 3.0 e posterior no Windows 95/98/2000/NT/XP). Embora as tcnicas de script sejam semelhantes para todos os navegadores e linguagens, h propriedades e eventos adicionais disponveis para uso com os controles ActiveX. Para obter mais informaes, inclusive uma lista completa dos mtodos de script do Flash Player, use as palavras-chave Flash method para fazer uma busca no Flash Support Center (Centro de suporte do Flash) em www.macromedia.com/support/flash.

Sobre a API External


A classe ExternalInterface tambm denominada API External, um novo subsistema que permite a voc comunicar-se facilmente do ActionScript e do recipiente do Flash Player para uma pgina HTML com o JavaScript ou para um aplicativo desktop com o Flash Player incorporado.
N OT A

Essa funcionalidade substitui a antiga funo fscommand() para interoperao com uma pgina HTML ou um aplicativo de recipiente. A API External oferece uma funcionalidade mais avanada do que a funofscommand() nessa situao. Para obter mais informaes, consulte Sobre a API External na pgina 696.

A classe ExternalInterface somente est disponvel nas seguintes circunstncias: Em todas as verses com suporte do Internet Explorer para Windows (5.0 e posterior). Em um recipiente ActiveX personalizado incorporado, como um aplicativo desktop que incorpore o controle ActiveX do Flash Player.

696

Trabalhando com dados externos

Em qualquer navegador com suporte para a interface NPRuntime, que atualmente so os seguintes:

Firefox 1.0 e posterior Mozilla 1.7.5 e posterior Netscape 8.0 e posterior Safari 1.3 e posterior.

Em todas as outras situaes, a propriedade ExternalInterface.available retornar false. No ActionScript, voc pode chamar uma funo JavaScript na pgina HTML. A API External oferece a seguinte funcionalidade aperfeioada, em comparao com fscommand():

Voc pode usar qualquer funo do JavaScript, no apenas aquelas que usa com %{fscommand function}%. Tambm possvel passar qualquer nmero de argumentos, com qualquer nome; voc no est limitado a passar um comando e seus argumentos. possvel passar vrios tipos de dados (como Boolean [Booleano], Number [Nmero] e String [Seqncia de caracteres]); voc no est mais limitado aos parmetros de String. Agora voc pode receber o valor de uma chamada, e esse valor retornado imediatamente para o ActionScript (como o valor de retorno da chamada feita).

possvel chamar uma funo do ActionScript do JavaScript oem uma pgina HTML. Para obter mais informaes, consulte %{ExternalInterface (flash.external.ExternalInterface)}%. Para obter mais informaes sobre a segurana de arquivo local, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709. As seguintes sees contm exemplos que usam a API External:

Criando interao com a API External na pgina 697 Controlando Flash Video com a API External na pgina 701

Criando interao com a API External


Voc pode criar interao entre o navegador e um arquivo SWF incorporado em uma pgina da Web. O procedimento a seguir envia texto pgina HTML que contm o arquivo SWF, e o HTML envia uma mensagem de volta ao arquivo SWF em tempo de execuo.
Para criar o aplicativo Flash:
1. 2.

Crie um novo documento do Flash e salve-o como extint.fla. Arraste dois componentes TextInput (Entrada de texto) para o Stage e d a eles os nomes de instncia in_ti e out_ti.

Sobre a API External

697

3.

Arraste um componente Label para o Stage, atribua a ele o nome de instncia de out_lbl, posicione-o acima da instncia de TextInput out_ti e defina a propriedade de texto da guia Parameters (Parmetros) do inspetor Properties (Propriedades) Sending to JS: (Enviando ao JS). Arraste um componente Button para o Stage (Palco), posicione-o ao lado do rtulo out_lbl e d a ele um nome de instncia send_button. Arraste um componente Label para o Stage, atribua a ele um nome de instncia de in_lbl, posicione-o acima da instncia de TextInput in_ti e defina sua propriedade de texto na guia Parameters como Receiving from JS: (Recebendo do JS). Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
import flash.external.ExternalInterface; ExternalInterface.addCallback("asFunc", this, asFunc); function asFunc(str:String):Void { in_ti.text = "JS > Hello " + str; } send_button.addEventListener("click", clickListener); function clickListener(eventObj:Object):Void { trace("click > " + out_ti.text); ExternalInterface.call("jsFunc", out_ti.text); }

4.

5.

6.

O cdigo anterior divide-se em trs sees. A primeira importa a classe ExternalInterface para que voc no tenha que usar seu nome de classe totalmente qualificado. A segunda seo do cdigo define uma funo de retorno, asFunc(), chamada do JavaScript em um documento HTML criado em um prximo exemplo. Essa funo define o texto dentro de um componente TextInput no Stage. A terceira seo do cdigo define uma funo e a atribui como ouvinte de eventos para quando o usurio clica na instncia do componente Button no Stage. Sempre que o usurio clica no boto, o arquivo SWF chama a funo JavaScript jsFunc() na pgina HTML e passa a propriedade de texto da instncia de entrada de texto out_ti.
7.

Selecione File (Arquivo) > Publish Settings, escolha a guia Formats e verifique se as opes Flash e HTML esto selecionadas. Clique em Publish para criar os arquivos HTML e SWF. Quando terminar, v para o prximo procedimento, no qual voc criar o recipiente para o arquivo SWF.

8.

698

Trabalhando com dados externos

Antes de testar o documento do Flash anterior, necessrio modificar o cdigo HTML gerado e adicionar mais HTML e JavaScript. O procedimentoa seguir modifica o recipiente HTML para o arquivo SWF, de modo que os dois arquivos possam interagir quando executados em um navegador.
Para criar o recipiente HTML do arquivo SWF:
1. 2.

Conclua o procedimento anterior. Abra o arquivo extint.html que o Flash cria quando voc publica o aplicativo. Ele fica na mesma pasta que o documento do Flash. Adicione o seguinte cdigo JavaScript entre as marcas de abertura e fechamento head:
<script language="JavaScript"> <!-function thisMovie(movieName) { var isIE = navigator.appName.indexOf("Microsoft") != -1; return (isIE) ? window[movieName] : document[movieName]; } function makeCall(str) { thisMovie("extint").asFunc(str); } function jsFunc(str) { document.inForm.inField.value = "AS > Hello " + str; } // --> </script>

3.

Esse cdigo JavaScript define trs mtodos. O primeiro retorna uma referncia ao arquivo SWF incorporado com base em se o navegador do usurio o Microsoft Internet Explorer (IE) ou um Mozilla. A segunda funo, makeCall(), chama o mtodo asFunc() definida dentro do documento do Flash no exemplo anterior. O parmetro "extint" na chamada de funo thisMovie() refere-se identificao do objeto e ao nome do arquivo SWF incorporado. Se voc salvou o documento do Flash com outro nome, ser necessrio alterar essa seqncia de caracteres para corresponder os valores no objeto e marcas incorporadas. A terceira funo, jsFunc(), define o valor do campo de texto inField no documento HTML. Essa funo chamada do documento do Flash quando um usurio clica no componente Button send_button.
4.

Adicione o seguinte cdigo 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" />

Sobre a API External

699

</form> <form name="inForm" method="POST" action=""> Receiving from AS:<br /> <input type="text" name="inField"> </form>

Esse cdigo HTML cria dois formulrios HTML semelhantes queles criados no ambiente do Flash no exerccio anterior. O primeiro formulrio envia o valor do campo de texto outField funo JavaScript makeCall() definida em uma etapa anterior. O segundo formulrio usado para exibirum valor enviado do arquivo SWF quando o usurio clica na instncia de send_button.
5.

Salve o documento HTML e carregue os arquivos HTML e SWF em um navegador da Web. Visualize o arquivo HTML em um navegador da Web, insira uma seqncia de caracteres na instncia de TextInput out_ti e clique no boto Send (Enviar). O Flash chama a funo JavaScript jsFunc() e passa o contedo do campo de texto out_ti, que exibe o contedo no campo de entrada de texto inField do formulrio HTML inForm.

6.

7.

Digite um valor no campo de texto HTML outField e clique no boto Send. O Flash chama a funo asFunc() do arquivo SWF, que exibe a seqncia de caracteres na instncia de TextInput in_ti.

Voc poder encontrar o arquivo de origem de exemplo, ExtInt.fla, na pasta Samples (Exemplos) no disco rgido.

No Windows, v para unidade de inicializao\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 pgina 701. Para obter mais informaes sobre a segurana de arquivo local, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709.
N OT A 700

Evite usar outros mtodos de acesso ao objeto de plug-in, como document.getElementById("pluginName") ou document.all.pluginName, porque esses outros mtodos no funcionam de modo consistente em todos os navegadores.

Trabalhando com dados externos

Controlando Flash Video com a API External


O procedimento a seguir mostra como controlar arquivos do Flash Video (FLV) usando controles em uma pgina HTML e exibe informaes sobre o vdeo em um campo de texto HTML. Esse procedimento usa a API External para obter essa funcionalidade.
Para criar um aplicativo Flash usando a API External:
1. 2.

Crie um novo documento do Flash e salve-o como video.fla. Adicione um novo smbolo de vdeo biblioteca selecionando New Video (Novo vdeo) no menu pop-up no painel Library. Arraste o smbolo de vdeo para o Stage e d a ele o nome de instncia selected_video. Selecione a instncia de selected_video e depois no inspetor Properties para redimension-la para 320 pixels de largura por 240 pixels de altura. Defina as coordenadas x e y para a posio do vdeo como 0. Selecione o Stage e use o inspetor Properties para redimensionar suas dimenses para 320 por 240 pixels. Agora, o Stage corresponde s dimenses da instncia de vdeo. Adicione o seguinte ActionScript ao Frame 1 (Quadro 1) da Timeline (Linha de tempo) principal:
import flash.external.ExternalInterface; /* Register playVideo() and pauseResume() so that it is possible to call them from JavaScript in the container HTML page. */ ExternalInterface.addCallback("playVideo", null, playVideo); ExternalInterface.addCallback("pauseResume", null, pauseResume); /* The video requires a NetConnection and NetStream object. */ var server_nc:NetConnection = new NetConnection(); server_nc.connect(null); var video_ns:NetStream = new NetStream(server_nc); /* Attach the NetStream object to the Video object on Stage so that the NetStream data is displayed in the Video object. */ selected_video.attachVideo(video_ns); /* The onStatus() method is called automatically when the status of the NetStream object is updated (the video starts playing, for example). When that occurs, send the value of the code property to the HTML page by calling the JavaScript updateStatus() function via ExternalInterface. */ video_ns.onStatus = function(obj:Object):Void { ExternalInterface.call("updateStatus", " " + obj.code); };

3. 4.

5. 6.

7.

Sobre a API External

701

function playVideo(url:String):Void { video_ns.play(url); } function pauseResume():Void { video_ns.pause(); }

A primeira parte desse cdigo ActionScript define duas funes de retorno ExternalInterface, playVideo() e pauseResume(). Essas funes sero chamadas do the JavaScript no prximo procedimento. A segunda parte do cdigo cria um novo objeto NetConnection e NetStream, que voc usa com a instncia de vdeo para a reproduo dinmica de arquivos FLV. O cdigo no prximo procedimento define um manipulador de eventos onStatus para o objeto NetStream video_ns. Sempre que o objeto NetStream altera seu status, o Flash usa o mtodo ExternalInterface.call() para disparar a funo personalizada JavaScript, updateStatus(). As duas ltimas funes, playVideo() e pauseResume(), controlam a reproruo da instncia de vdeo no Stage. Essas duas funes so chamadas do JavaScript escrito no procedimento a seguir.
8. 9.

Salve o documento do Flash. Selecione File (Arquivo) > Publish Settings (Configuraes de publicao), escolha a guia Formats (Formatos) e verifique se as opes Flash e HTML esto selecionadas. em Publish para publicar os arquivos SWF e HTML no disco rgido. Quando terminar, v para o prximo procedimento, no qual voc criar o recipiente para o arquivo SWF.

10. Clique

Voc poder encontrar o arquivo de origem de exemplo, external.fla, na pasta Samples (Exemplos) no disco rgido.

No Windows, v para unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\ExternalAPI. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/ExternalAPI.

No procedimento a seguir, voc modificar o cdigo HTML gerado pelo Flash no procedimento anterior. Esse procedimento cria o JavaScript e o HTML necessrios para fazer com que os arquivos FLV sejam reproduzidos no arquivo SWF.
Para criar o recipiente para o arquivo SWF:
1. 2.

Conclua o procedimento anterior. Abra o documento video.html publicado na ltima etapa do procedimento anterior.

702

Trabalhando com dados externos

3.

Modifique o cdigo existente para que corresponda ao seguinte:


N OT A

Examine os comentrios do cdigo no exemplo a seguir. Uma viso geral do cdigo ser mostrada depois desse exemplo.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>ExternalInterface</title> <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); } // Call the pauseResume() function within the SWF file. function callFlashPlayPauseVideo() { flashVideoPlayer.pauseResume(); } /* 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>

Sobre a API External

703

</head> <body bgcolor="#ffffff" onLoad="initialize();"> <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 /> Playback <input type="button" name="playPause" value="play/pause" onClick="callFlashPlayPauseVideo();" /> <br /><br /> Video status messages <br /> <textarea name="videoStatus" cols="50" rows="10"></textarea> </form> </body> </html>

Esse cdigo HTML define quatro funes JavaScript: initialize(), callFlashPlayVideo(), callFlashPlayPauseVideo() e updateStatus(). A funo initialize() chamada dentro da marca body no evento onLoad. As funes callFlashPlayVideo() e callFlashPlayPauseVideo() so chamadas quando o usurio clica no boto de reproduo ou no boto de reproduo/pausa dentro de um documento HTML e dispara as funes playVideo() e pauseResume() no arquivo SWF.

704

Trabalhando com dados externos

A funo final, updateStatus(), chamada pelo arquivo SWF sempre que o manipulador de eventos onStatus do objeto NetStream video_ns disparado. Esse cdigo HTML tambm define um formulrio que tem uma caixa de combinao de vdeos que o usurio pode escolher. Sempre que um usurio seleciona um vdeo e clica no boto de reproduo, a funo JavaScript callFlashPlayVideo() chamada, que por sua vez chama a funo playVideo() dentro do arquivo SWF. Essa funo passa o URL do arquivo SWF para carregar na instncia do vdeo. medida que o vdeo reproduzido e o status do objeto NetStream alterado, o contedo da rea de texto HTML no Stage atualizado.
4.

Salve as alteraes no documento HTML e carregue os arquivos HTML e SWF em um site da Web. Abra o documento remoto video.html do site da Web, selecione um vdeo na caixa de combinao e clique no boto de reproduo. O Flash reproduz o arquivo FLV selecionado e atualiza o contedo da rea de texto videoStatus dentro do documento HTML.

5.

Voc poder encontrar o arquivo de origem de exemplo, external.fla, na pasta Samples (Exemplos) no disco rgido.

No Windows, v para unidade de inicializao\Program Files\Macromedia\Flash 8\Samples and Tutorials\Samples\ActionScript\ExternalAPI. No Macintosh, v para HD Macintosh/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/ActionScript/ExternalAPI.

(flash.external.ExternalInterface)}%

Para obtr mais informaes sobre a API External, consulte %{ExternalInterface em ActionScript 2.0 Language Reference.

Para obter mais informaes sobre a segurana de arquivo local, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709.
N OT A

Evite usar outros mtodos de acesso ao objeto de plug-in, como document.getElementById("pluginName") ou document.all.pluginName, porque esses outros mtodos no funcionam de modo consistente em todos os navegadores.

Sobre a API External

705

706

Trabalhando com dados externos

CAPTULO 17

Noes bsicas de segurana


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 segurana do Flash 8. Quando abrir um arquivo SWF no disco rgido, talvez voc precise fazer configuraes especiais para testar o arquivo localmente. Para obter informaes sobre a segurana de arquivo local, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709. Para obter informaes sobre as mudanas entre o modelo de segurana do Flash Player 7 e do Flash Player 8, consulte Sobre compatibilidade com os modelos de segurana anteriores do Flash Player na pgina 708. Para obter informaes sobre como carregar e analisar dados de um servidor, leia o Captulo 16, Trabalhando com dados externos, na pgina 663. Para obter informaes sobre segurana, consulte www.macromedia.com/devnet/security e www.macromedia.com/software/ flashplayer/security/. Para obter mais informaes sobre segurana no Flash 8, consulte estes tpicos:
Sobre compatibilidade com os modelos de segurana anteriores do Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .708 Sobre segurana do arquivo local e o Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . .709 Sobre domnios, segurana entre domnios 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

17

707

Sobre compatibilidade com os modelos de segurana anteriores do Flash Player


Como resultado das alteraes ao recurso de segurana no Flash Player 7, o contedo executado conforme p esperado no Flash Player 6 ou nas verses anteriores talvez no seja executado da mesma forma nas verses 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 domnio carregasse dados de um domnio semelhante. No Flash Player 7 e verses posteriores, se um arquivo SWF da verso 6 (ou anterior) tentar carregar dados de um servidor em outro domnio, e esse servidor no fornecer um arquivo de diretivas que permita leitura a partir do domnio daquele arquivo SWF, ser exibida a caixa de dilogo Macromedia Flash Player Settings (Configuraes do Macromedia Flash Player). A caixa de dilogo solicita que o usurio autorize ou negue o acesso aos dados entre domnios. Se o usurio clicar em Allow (Autorizar), o arquivo SWF poder acessar os dados solicitados; se o usurio clicar em Deny (Negar), o arquivo SWF no poder acessar os dados solicitados. Para evitar que essa caixa de dilogo seja exibida, crie um arquivo de diretivas de segurana no servidor que est fornecendo os dados. Para obter mais informaes, consulte Sobre a autorizao de carregamento de dados entre domnios na pgina 737. O Flash Player 7 e as verses posteriores no permitem o acesso entre domnios sem um arquivo de diretivas de segurana. 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 verso 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 verso 7 ou anterior no domnio do arquivo SWF que fez a chamada, assim como ocorria no Flash Player 7. Entretanto, esse tipo de chamada no afeta nenhum arquivo SWF do Flash Player 8 (ou posterior) no domnio do arquivo SWF efetuando a chamada. Isso ajuda a minimizar a quebra de contedo legado no Flash Player. Para obter mais informaes, consulte Sobre domnios, segurana entre domnios e arquivos SWF na pgina 727, %{allowDomain (security.allowDomain method)}%, e %{allowInsecureDomain (security.allowInsecureDomain method)}%.

708

Noes bsicas de segurana

O Flash Player 8 no permite que os arquivos SWF locais se comuniquem com a Internet sem uma configurao especfica no computador. Vamos supor que exista contedo legado publicado antes da efetivao dessas restries. Se esse contedo tentar se comunicar com a rede ou o sistema de arquivos local, ou ambos, o Flash Player 8 interromper a operao e voc dever fornecer explicitamente a permisso para que o aplicativo funcione do modo correto. Para obter mais informaes, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709.

Sobre segurana do arquivo local e o Flash Player


O Flash Player 8 aperfeioou o modelo de segurana, estabelecendo que os aplicativos e arquivos SWF do Flash em um computador local no tm permisso para se comunicar com a Internet e o sistema de arquivos local por padro. Um arquivo SWF local um arquivo SWF instalado localmente no computador de um usurio, no disponibilizado de um site da Web e que no inclui arquivos de projetor (EXE).
N OT A

As restries analisadas nesta seo no afetam os arquivos SWF presentes na Internet.

Quando cria um arquivo FLA, voc pode indicar se um arquivo SWF tem permisso para se comunicar com uma rede ou sistema de arquivos local. Nas verses anteriores do Flash Player, os arquivos SWF locais podiam interagir com outros arquivos SWF e carregar dados de qualquer posio local ou remota. No Flash Player 8, um arquivo SWF no pode estabelecer conexes com o sistema de arquivos local e a Internet. Essa uma alterao de segurana, para que um arquivo SWF no possa ler arquivos no seu disco rgido e enviar o contedo desses arquivos pela Internet. Essa restrio de segurana afeta todo o contedo implantado localmente, quer seja contedo legado (um arquivo FLA criado em uma verso anterior do Flash) ou criado no Flash 8. Imagine que voc faa a implantao de um aplicativo do Flash, usando o Flash MX 2004 ou posterior, executado localmente e que tambm acessa a Internet. No Flash Player 8, esse aplicativo agora solicita que o usurio d permisso para comunicar-se com a Internet. Quando voc testa um arquivo no disco rgido, necessrio seguir uma srie de etapas para determinar se ele um documento confivel local ou um documento possivelmente no confivel. Se voc criar o arquivo no ambiente de criao do Flash, por exemplo, quando voc seleciona Control (Controlar) > Test Movie (Testar filme), o arquivo ser confivel porque est em um ambiente de teste.

Sobre segurana do arquivo local e o Flash Player

709

No Flash Player 7 e anterior, os arquivos SWF locais tinham permisses pare ler de um sistema de arquivos local e da rede (como a Internet). No Flash Player 8, os arquivos SWF locais podem ter os seguintes nveis de permisso:
Access the local file system only (Acessar apenas o sistema de arquivos local - padro)

Um arquivo SWF local pode ler do sistema de arquivos local e de caminhos de rede UNC (universal naming convention, conveno de atribuio de nome universal), mas no pode se comunicar com a Internet. Para obter mais informaes sobre arquivos SWF de acesso local, consulte Access local files only (Acessar arquivos locais somente - padro) na pgina 718.
Access the network only (Acessar somente a rede)

Um arquivo SWF local pode acessar a rede (como a Internet), mas no o sistema de arquivos local em que est instalado. Para obter mais informaes sobre arquivos SWF somente de rede, consulte Access network only (Acessar somente a rede) na pgina 719. Um arquivo SWF local pode ler do sistema de arquivos local em que est instalado, lr e gravar de e para servidores e pode fazer scripts entre outros arquivos SWF na rede ou no sistema de arquivos local. Esses arquivos so confiveis e se comportam da mesma forma que no Flash Player 7. Para obter mais informaes sobre arquivos SWF de acesso de rede e local, consulte Access file system and network (Acessar o sistema de arquivos e a rede) na pgina 719. Para obter mais informaes sobre a segurana de arquivo local no Flash 8 em relao ferramenta de criao, consulte estas sees:

Access to the local file system and the network (Acessar o sistema de arquivos local e a rede)

Noes bsicas sobre as sandboxes de segurana local na pgina 711 Sobre as configuraes de segurana do Flash Player na pgina 712 Sobre a segurana de arquivo local e os arquivos de projetores na pgina 714 Sobre a resoluo de problemas de arquivos SWF legados na pgina 715 Corrigindo o contedo legado implantado em computadores locais na pgina 716 Publicando arquivos para implantao local na pgina 717

Para obter informaes sobre a segurana de arquivo local para os usurios, consulte Sobre as configuraes de segurana do Flash Player na pgina 712. Para obter mais informaes sobre segurana, consulte www.macromedia.com/devnet/security/ e www.macromedia.com/ software/flashplayer/security/.

710

Noes bsicas de segurana

Noes bsicas sobre as sandboxes de segurana local


H vrias sandboxes se segurana diferentes no Flash Player. Cada uma delas determina o modo como um arquivo SWF pode interagir com o sistema de arquivos local, a rede ou ambos ao mesmo tempo. Restringir o modo como um arquivo pode interagir com o sistema de arquivos local ou a rede ajuda a manter o computador e seus arquivos seguros. Entender as sandboxes de segurana ajuda a desenvolver e a testar aplicativos Flash no computador, sem encontrar erros inesperados.

Local-with-file-system (Local com sistema de arquivos)


Por questes de segurana, o Flash Player 8 coloca todos os arquivos SWF locais, inclusive os legados, na sandbox local com sistema de arquivos, por padro (a menos que alguma outra configurao seja feita). Para alguns arquivos SWF legados (de verses anteriores ao Flash Player 8), as operaes podem ser afetadas pela imposio de restries ao seu acesso (sem acesso externo rede), mas isso proporciona o padro mais seguro para a proteo dos usurios. A partir dessa sandbox, os arquivos SWF podem ler de arquivos no sistema local ou caminhos UNC (usando o mtodo XML.load(), por exemplo), mas no podem se comunicar com a rede de nenhuma forma. Isso assegura ao usurio que no haver vazamento dos dados locais para a rede ou qualquer outro tipo de compartilhamento inadequado.

Local-with-networking (Local com a rede)


Quando os arquivos SWF locais so atribudos sandbox local com a rede, eles perdem o acesso ao sistema de arquivos local. Entretanto, esses arquivos so autorizados a acessar rede. Todavia, um arquivo SWF local com a rede ainda no tem autorizao para ler nenhum dado derivado da rede, a menos que sejam definidas permisses para essa ao. Portanto, um arquivo SWF local com a rede no em acesso local, embora tenha a capacidade de transmitir dados pela rede e possa ler dados dos sites na rede que designam permisses de acesso especficas.

Local-trusted (Local confivel)


Os arquivos SWF atribudos sandbox local confivel podem interagir com qualquer outro arquivo SWF e carregar dados de qualquer lugar (remota ou localmente).

Sobre segurana do arquivo local e o Flash Player

711

Sobre as configuraes de segurana do Flash Player


A Macromedia desenvolveu o Flash Player para fornecer configuraes de segurana que no requerem que voc permita ou negue explicitamente o acesso na maioria das situaes. De vez em quando, voc poder encontrar contedo legado do Flash criado com regras de segurana mais antigas para o Flash Player 7 ou as verses anteriores. Nesses casos, o Flash Player permite que voc defina o contedo para funcionar da maneira pretendida pelo desenvolvedor, utilizando as regras de segurana mais antigas; tambm possvel optar por impor as novas regras mas rigorosas. A ltima opo garante que voc s exiba ou reproduza contedo que atenda aos padres mais atuais de segurana, mas, s vezes, pode impedir que o contedo mais antigo do Flash funcione corretamente. Todos os usurios que exibem arquivos SWF (inclusive aqueles que no desenvolvem para Flash) podem definir permisses globalmente por meio do painel Global Security Settings (Configuraes de segurana globais) no Settings Manager (Gerenciado de configuraes) do Flash Player (mostrado na figura a seguir).

Quando o contedo mais antigo executado em uma verso mais nova do exibidor, e o Flash Player precisa que voc decida se deseja impor regras mais novas ou no, uma das caixas de dilogo pop-up a seguir poder ser exibida. Essas caixas de dilogo solicitam permisso antes de permitir que o contedo antigo do Flash se comunique com outros locais na Internet:

Poder ser exibida uma caixa de dilogo avisando que o contedo do Flash utilizado est tentando usar regras de segurana mais antiga para acessar as informaes de um site fora de seu prprio domnio e que essas informaes podero ser compartilhadas entre os dois sites. O Flash Player pergunta se voc deseja permitir ou negar esse acesso.

712

Noes bsicas de segurana

Alm de responder caixa de dilogo, voc pode usar o painel Global Security Settings para especificar se o Flash Player sempre dever pedir permisso, por meio dessa caixa, antes de permitir o acesso; sempre negar o acesso, sem perguntar primeiro; ou sempre permitir o acesso a outros sites ou domnios sem pedir permisso.

(Flash Player 8 somente) Poder ser exibida uma caixa de dilogo avisando que um arquivo SWF est tentando se comunicar com a Internet. O Flash Player 8 no permite que o contedo local do Flash s comunique com a Internet, por padro.

Clique em Settings (Configuraes) para acessar o painel Global Security Settings, no qual possvel especificar que certos aplicativos do Flash no computador possam se comunicar com a Internet. Para alterar as configuraes de segurana ou saber mais sobre suas opes, use o painel Global Security Settings. Use esse painel para redefinir as configuraes de privacidade no Macromedia Flash Player:

Se voc selecionar Always Deny (Sempre negar) e confirmar essa seleo, o acesso no ser negado para nenhum site da Web que tentar usar a cmera ou o microfone. Voc no ver a pergunta se um site da Web pode usar sua cmera o microfone novamente. Essa ao aplica-se aos sites da Web que voc j visitou ou no. Se voc selecionar Always Ask (Sempre perguntar) e confirmar essa seleo, qualquer site da Web que tentar usar a cmera ou o microfone dever pedir permisso. Essa ao aplica-se aos sites da Web que voc j visitou ou no.

Sobre segurana do arquivo local e o Flash Player

713

Se voc tiver selecionado Remember (Lembrar) no painel Privacy Settings (Configuraes de privacidade), conforme mostrado na figura a seguir, para permitir ou negar permanentemente o acesso a um ou mais sites da Web, a seleo de Always Ask ou Always Deny ter o efeito de desmarcar a opo Remember para todos esses sites. Em outras palavras, a seleo feita aqui substitui qualquer escolha feita anteriormente no painel Privacy Settings, mostrado na figura a seguir.

Depois que voc selecionar Always Ask ou Always Deny (ou em vez de faz-lo), especifique as configuraes 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 (Configuraes de privacidade de site da Web) e selecionar Always Allow para sites individuais que conhece e nos quais confia. Para o contedo implantado localmente e os dados locais, os usurios tm outra opo: eles podem especificar quais arquivos SWF podem acessar a Internet utilizando o painel Global Security Settings (Configuraes de segurana globais). Para obter mais informaes sobre como especificar configuraes no painel Global Security Settings, consulte Especificando arquivos confiveis usando o Settings Manager na pgina 721. Para obter mais informaes sobre o painel Global Security Settings, consulte www.macromedia.com/support/ documentation/en/flashplayer/help/settings_manager04a.html.
N OT A 714

As selees que os usurios fizerem no painel Global Security Settings substituiro as decises tomadas na caixa de dilogo de segurana pop-up.

Sobre a segurana de arquivo local e os arquivos de projetores


Os arquivos de projetores e os arquivos SWF neles contidos ou carregados no projetor em tempo de execuo no so afetados pelas restries de segurana de arquivo local, porque o usurio final precisa utilizar o executvel para usar o arquivo SWF. No h alteraes nos arquivos de segurana e de projetores no Flash Player 8; ele apresenta o mesmo nvel de acesso e segurana que as verses anteriores do Flash Player.

Noes bsicas de segurana

Lembre-se de que os usurios freqentemente so cautelosos em relao execuo de arquivos de projetores. Um arquivo de projetor um aplicativo executvel EXE ou Macintosh e os usurios devem ter cuidado ao executar esses arquivos em seus computadores. Se voc distribuir um aplicativo usando arquivos de projetores, possvel que alguns usurios no o instalem. Alm disso, um arquivo de projetor incorpora uma verso especfica do Flash Player dentro do projetor, que pode ser mais antiga do que a verso mais recente do Flash Player disponvel para download no site da Macromedia na Web. O Flash Player incorporado no arquivo de projetor pode ser uma verso legada do projetor criado com uma verso anterior do Flash ou uma edio do Flash Player lanada aps a verso atual da ferramenta de criao do Flash. Por isso, distribua os aplicativos usando arquivos SWF sempre que possvel.

Sobre a resoluo de problemas de arquivos SWF legados


Alguns arquivos FLA e SWF legados (criados com o Flash MX 2004 e verses anteriores) talvez no funcionem quando testados ou implantados localmente (em um disco rgido) devido s alteraes de segurana no Flash 8. Isso poder ocorrer quando um arquivo SWF tentar acessar sites da Web fora de seu domnio e, nesse caso, ser necessrio implementar um arquivo de diretivas entre domnios. Talvez voc tenha arquivos FLA ou SWF criados no Flash MX 2004 ou verses anteriores que foram distribudos aos usurios que no utilizam a ferramenta de criao do Flash 8, mas atualizaram para o Flash Player 8. Caso o contedo testado localmente ou legado implantado (um arquivo SWF antigo no disco rgido de um usurio) seja quebrado por tentar se comunicar com a Internet quando executado no Flash Player 8, voc depender dos usurios para confiarem explicitamente no seu contedo para que ele seja executado de modo correto (clicando em um boto de uma caixa de dilogo). Para saber como corrigir contedo legado para reproduo em um computador local, consulte Corrigindo o contedo legado implantado em computadores locais na pgina 716.

Sobre segurana do arquivo local e o Flash Player

715

Corrigindo o contedo legado implantado em computadores locais


Se voc tiver publicado arquivos SWF para o Flash Player 7 ou verses anteriores implantadas nos computadores locais e se comunicar com a Internet, os usurios devero permitir explicitamente a comunicao com a Internet. Os usurios podem impedir quebra de contedo adicionando a localizao do arquivo SWF em seus computadores locais sandbox confivel no Settings Manager (Gerenciador de configuraes).
Para corrigir os arquivos SWF para a reproduo local, use uma destas opes:

Executa o Local Content Updater (Atualizador de contedo local). O Local Content Updater reconfigura o arquivo SWF para torn-lo compatvel com o modelo de segurana 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 informaes e fazer download do Local Content Updater, consulte www.macromedia.com/ support/flashplayer/downloads.html.
Redeploy (Implantar novamente) Republish and redeploy (Publicar e implantar novamente)

Publica o arquivo novamente com o Flash Basic 8 ou o Flash Professional 8. A ferramenta de criao requer que voc especifique na caixa de dilogo Publish Settings se um arquivo SWF local pode acessar a rede ou o sistema de arquivos local mas no ambos. Se especificar que um arquivo SWF local pode acessar a rede, voc tambm dever ativar permisses 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 informaes, consulte Publicando arquivos para implantao local na pgina 717.

Usa um arquivo de configurao (.cfg) na pasta #Security/FlashPlayerTrust. Voc pode usar esse arquivo para definir permisses de rede e acesso local. Para obter mais informaes, consulte Criando arquivos de configurao para o desenvolvimento em Flash na pgina 723.
Deploy new content (Implantar novo contedo)
N OT A 716

Todas essas opes requerem que voc publique ou implante o arquivo SWF novamente.

Noes bsicas de segurana

Publicando arquivos para implantao local


Voc pode enviar os arquivos FLA ou SWF do Flash 8 a um usurio para testar ou aprovar a necessidade de acesso Internet do aplicativo. Se o documento for reproduzido em um sistema local, mas acessar arquivos na Internet (por exemplo, carregando XML ou enviando variveis), talvez o usurio precise de um arquivo de configurao para que o contedo funcione corretamente ou talvez seja necessrio configurar o arquivo FLA para que o arquivo SWF publicado possa acessar a rede. Como alternativa, voc pode definir um arquivo de configurao dentro do diretrio FlashPlayerTrust. Para obter mais informaes sobre como definir arquivos de configurao, consulte Criando arquivos de configurao para o desenvolvimento em Flash na pgina 723. Use o Flash Basic 8 ou o Flash Professional 8 para criar contedo para implantao local que funcione com a segurana de arquivo local do Flash Player 8. Nas configuraes de publicao do Flash 8, especifique se o contedo local pode acessar a rede ou o sistema de arquivos local, mas no ambos. Voc pode definir nveis de permisso para um arquivo FLA na caixa de dilogo Publish Settings. Esses nveis de permisso afetam a reproduo local do arquivo FLA, quando executado localmente em um disco rgido.
N OT A

Se voc especificar o acesso de rede para um arquivo local, tambm ser necessrio ativar as permisses 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) so colocados em uma sandbox separada que corresponde aos domnios de origem de site da Web exclusivos deles. Os arquivos SWF locais que especificam o acesso rede so colocados na sandbox local-with-networking (local com a rede). Por padro, esses arquivos podem ler dados somente do mesmo site no qual se originaram. A correspondncia de domnio exato aplica-se a esses arquivos. Os arquivos SWF de rede podero acessar dados de outros domnios se tiverem as permisses corretas. Para obter mais informaes sobre arquivos SWF de rede, consulte Access network only (Acessar somente a rede) na pgina 719.

Local SWF files (Arquivos SWF locais)

Os arquivos SWF que operam com sistemas de arquivos locais ou caminhos de rede UNC so colocados em uma das trs sandboxes no Flash Player 8. Por padro, os arquivos SWF locais so colocados na sandbox local-with-file-system (local com sistema de arquivos). Os arquivos SWF locais registrados como confiveis (com o uso de um arquivo de configurao) so colocados na sandbox local-trusted (local confivel). Para obter informaes sobre essas sandboxes, consulte Access local files only (Acessar arquivos locais somente - padro) na pgina 718.

Sobre segurana do arquivo local e o Flash Player

717

Para obter mais informaes sobre a sandbox de segurana, consulte Noes bsicas sobre as sandboxes de segurana local na pgina 711. Os dois primeiros nveis de permisso so definidos no ambiente de criao do Flash, e o terceiro definido com o uso do painel Global Security Settings ou do arquivo FlashAuthor.cfg. O exemplo a seguir mostra quais opes esto disponveis quando voc publica um arquivo para teste no disco rgido local.
Para publicar um documento com um nvel de permisso especificado:
1. 2. 3.

Abra o arquivo FLA para o qual voc deseja especificar um nvel de permisso. Selecione File (arquivo) > Publish Settings (Configuraes de publicao) > Flash. Encontre a caixa de dilogo Local Playback Security (Segurana de reproduo local) e selecione uma destas opes no menu pop-up:

Access local files only (Acessar arquivos locais somente - consulte Access local files only (Acessar arquivos locais somente - padro)) Access network only (Acessar somente a rede - consulte Access network only (Acessar somente a rede))

4.

Clique em OK para continuar criando o arquivo FLA ou em Publish para criar o arquivo SWF.

Para obter mais informaes sobre os nveis de permisses que voc pode especificar para seus aplicativos, consulte Access local files only (Acessar arquivos locais somente - padro) na pgina 718, Access network only (Acessar somente a rede) na pgina 719 e Access file system and network (Acessar o sistema de arquivos e a rede) na pgina 719.

Access local files only (Acessar arquivos locais somente padro)


Para definir esse nvel de permisso, selecione Publish Settings > Flash e depois escolha Access Local Files Only no menu pop-up Local Playback Security. Esse nvel de permisso permite que um arquivo SWF local acesse apenas o sistema de arquivos local em que o SWF est sendo executado. O arquivo SWF pode ler de arquivos conhecidos no disco local, sem nenhuma restrio. No entanto, as seguintes restries se aplicam aos aplicativos acessando a rede:

O arquivo SWF no pode acessar a rede de nenhuma forma. O arquivo SWF no pode criar scripts entre arquivos SWF de rede ou ter seu script transferido entre arquivos SWF de rede.

718

Noes bsicas de segurana

O arquivo SWF no pode se comunicar com arquivo SWF locais que tenham permisso para acessar somente a rede e tambm no pode se comunicar com pginas HTML. No entanto, a comunicao permitida em alguns casos, por exemplo, se o HTML for confivel e se allowScriptAccess for definido como always ou se allowScriptAccess no for definido e o arquivo SWF pertencer ao Flash Player 7 ou verses anteriores.

Access network only (Acessar somente a rede)


Para definir esse nvel de permisso, selecione Publish Settings > Flash e depois escolha Access Network Only no menu pop-up Local Playback Security. Os arquivos SWF com acesso de rede podero ler de um servidor se ele contiver um arquivo de diretivas entre domnios com <allow-access-from-domain= *>. Os arquivos SWF locais com acesso de rede podem criar script entre outros arquivos SWF, se esses outros arquivos, que esto sendo acessados, contiverem System.security.allowDomain(*). Os arquivos SWF de rede podero criar scripts entre um arquivo SWF local com acesso de rede se esse arquivo SWF local contiver allowDomain(*). O arquivo SWF nunca poder ler de arquivos locais. Em alguns casos, o tipo de arquivo SWF afeta o acesso. Para obter informaes, consulte %{allowDomain (mtodo security.allowDomain)}% em ActionScript 2.0 Language Reference. O valor curinga (*) indica que todos os domnios, inclusive os hosts locais, tm permisso de acesso. Esteja certo de que voc deseja fornecer esse amplo nvel de acesso, antes de usar o argumento curinga. Sem nenhuma dessas permisses, os arquivos SWF locais com acesso de rede somente podem se comunicar com outros arquivos SWF locais que tenham acesso de rede, e podem enviar dados aos servidores (usando XML.send(), por exemplo). Em alguns casos, o acesso somente ser permitido se o arquivo HTML for confivel.

Access file system and network (Acessar o sistema de arquivos e a rede)


Este o nvel de permisso mais alto. Um arquivo SWF que tenha essas permisses um arquivo SWF confivel local. Os arquivos SWF confiveis locais podem ler de outros arquivos SWF locais, interagir com qualquer servidor e escrever ActionScript para outros arquivos SWF ou HTML que no tenham proibido explicitamente a permisso de arquivo (por exemplo, com allowScriptAccess="none"). O usurio ou o desenvolvedor do Flash pode conceder esse nvel de permisso das seguintes formas:

Usando o painel Global Security Settings no Settings Manager. Usando um arquivo de configurao global.

Sobre segurana do arquivo local e o Flash Player

719

Um arquivo de configurao pode ser instalado com o arquivo SWF, criado por um desenvolvedor do Flash ou adicionado por um administrador (para todos os usurios ou o usurio atual) ou qualquer desenvolvedor do Flash (para o usurio atual). Para obter mais informaes sobre arquivos de configurao e o painel Global Security Settings, consulte Sobre as configuraes de segurana do Flash Player na pgina 712 e Especificando arquivos confiveis usando o Settings Manager na pgina 721 e Criando arquivos de configurao para o desenvolvimento em Flash na pgina 723.

Testando o contedo localmente com as restries de segurana de arquivo local do Flash 8


Como desenvolvedor do Flash, com freqncia voc testar os aplicativos do Flash localmente, portanto, poder visualizar um prompt de caixa de dilogo quando um aplicativo local do Flash tentar se comunicar com a Internet. Essa caixa de dilogo poder ser exibida quando voc testar um arquivo SWF no Flash Player, se esse arquivo no tiver acesso de rede. Para obter mais informaes sobre como publicar arquivos SWF com nveis de permisso especificados, consulte Publicando arquivos para implantao local na pgina 717. A publicao de um arquivo SWF com uma dessas opes indica que voc pode se comunicar com a rede ou o sistema de arquivos local. s vezes, pode ser que voc precise se comunicar com o sistema de arquivos local e a rede ao testar um documento. Como o novo modelo de segurana pode interromper seu fluxo de trabalho durante a criao de aplicativos do Flash, voc poder usar o painel Global Security Settings no Settings Manager do Flash Player para especificar quais aplicativos do Flash no computador sempre podero se comunicar com a Internet e o sistema de arquivos local. Ou voc poder modificar o arquivo de configurao para especificar diretrios confiveis no disco rgido. Para obter mais informaes, consulte as seguintes sees:

Especificando arquivos confiveis usando o Settings Manager na pgina 721 Criando arquivos de configurao para o desenvolvimento em Flash na pgina 723

720

Noes bsicas de segurana

Especificando arquivos confiveis usando o Settings Manager


possvel especificar que o contedo do Flash no seu computador sempre poder usar as regras de segurana antigas adicionando o local desse contedo ao painel Global Security Settings no Flash Player Settings Manager (Gerenciador de configuraes do Flash Player). Depois que voc adicionar um local no computador ao painel Security (Segurana), o contedo nesse local ser confivel. O Flash Player no pedir permisso e sempre autorizar o uso das regras de segurana antigas, mesmo que a opo Always Deny esteja selecionada no painel Security. A lista Always Trust Files in These Locations (Sempre confiar nos arquivos desses locais) substitui as opes no painel Settings (Configuraes). Ou seja, se voc optar por sempre negar ao contedo local e da Web o direito de usar as regras de segurana antigas, os arquivos locais na lista de itens confiveis sempre sero autorizados a utiliz-las. Essa lista na parte inferior do painel aplica-se especialmente ao contedo do Flash descarregado para o seu computador, no ao contedo que voc usa ao visitar um site. O exemplo a seguir mostra como especificar que um arquivo SWF local possa se comunicar com a Internet. Quando voc testar um arquivo em um navegador localmente, em File (Arquivo) > Publish Preview (Visualizar publicao) > HTML, talvez seja exibida uma caixa de dilogo de segurana. Se voc clicar em Settings, o painel Global Security Settings do Settings Manager ser exibido.
.

Para especificar que um arquivo SWF possa se comunicar com a Internet e o sistema de arquivos local:
1.

No painel Global Security Settings, clique no menu pop-up e selecione Add Location (Adicionar local).

Sobre segurana do arquivo local e o Flash Player

721

A caixa Add Location ser aberta.

Se voc acessou o Settings Manager clicando no boto Settings em uma caixa de dilogo, a caixa Add Location conter um caminho semelhante a C:\nome_do_diretrio\nome_do_arquivo.swf ou /Users/nome_do_diretrio/ nome_do_arquivo.swf; esse caminho informa qual arquivo tentou se comunicar com a Internet e foi interrompido pela segurana do Flash Player. Se o caminho apresentar o contedo que dever ter permisso para se comunicar com a Internet, copie e cole-o na caixa Trust This Location (Confiar nesse local). Ou clique em um dos botes Browse (Procurar) e encontre o contedo. Voc pode adicionar um arquivo individual ou um diretrio completo. Caso adicione um diretrio completo, todos os arquivos e subdiretrios nele contidos sero considerados confiveis. Uma parte do contedo do Flash consiste em vrios arquivos relacionados e talvez seja necessrio confiar no diretrio completo em que esses arquivos se encontram. Em geral, no confie em diretrios de nvel superior.
2.

Clique em Confirm (Confirmar). O local ser adicionado ao painel Security Settings (Configuraes de segurana). Os locais na lista sempre tero permisso para usar as regras de segurana antigas, mesmo que as opes Always Deny ou Always Ask na parte superior do painel Security estejam selecionadas. Aps a adio de locais confiveis, voc poder reiniciar o contedo local do Flash atualizando o navegador ou reiniciando o exibidor.

Se voc clicar em Always Allow, essa opo s aplicar essa configurao ao contedo legado sempre permitido (Flash Player 7 e verses anteriores). A configurao nem sempre autoriza o contedo do Flash Player 8. recomendvel especificar os aplicativos e diretrios do Flash no computador que podero se comunicar com a Internet e o sistema de arquivos local.

722

Noes bsicas de segurana

Criando arquivos de configurao para o desenvolvimento em Flash


A ferramenta de criao do Flash 8 define um sinalizador no disco rgido para identific-lo como desenvolvedor e direcion-lo a uma verso especfica para desenvolvedores do painel Global Security Settings, em vez desse mesmo painel para usurios. O sinalizador fica no arquivo FlashAuthor.cfg no disco rgido, que instalado automaticamente junto com as ferramentas de criao do Flash Basic 8 e do Flash Professional 8. O arquivo FlashAuthor.cfg fica nos seguintes diretrios aproximados:
Windows disco de inicializao\Documents and Settings\<Usurio>\Application Data\Macromedia\Flash Player\#Security Macintosh

/Users/<Usurio>/Library/Preferences/Macromedia/Flash Player/#Security/

Por padro, esse arquivo definido para LocalSecurityPrompt=Author, o que significa que s avisos exibidos no computador tratam voc como desenvolvedor do Flash, e no como usurio sem a ferramenta de criao instalada. Voc poder testar os arquivos locais como usurio final e visualizar as caixas de dilogo d aviso que um usurio final encontraria. Para fazer isso, abra FlashAuthor.cfg em um editor de texto e altere LocalSecurityPrompt no arquivo FlashAuthor.cfg para corresponder ao seguinte:
LocalSecurityPrompt=User

Talvez voc queira fornecer um arquivo FlashAuthor.cfg, com LocalSecurityPrompt definido como Author (Autor) para outros desenvolvedores no processo de design ou desenvolvimento ou para os usurios que testam os aplicativos Flash no disco rgido e no tm a ferramenta de criao do Flash 8 instalada. Isso ajuda a simular a experincia do usurio final com o contedo implantado localmente.
N OT A

Se o arquivo FlashAuthor.cfg for excludo, ele ser recriado quando voc iniciar a ferramenta de criao do Flash 8.

No diretrio #Security no disco rgido, voc poder criar um diretrio FlashPlayerTrust no qual armazenar arquivos de configurao exclusivos. Dentro desses arquivos, especifique os diretrios ou aplicativos nos quais confia no disco rgido. Esse diretrio no requer acesso administrativo, portanto, os usurios sem permisses administrativas podem definir permisses para arquivos SWF e aplicativos de teste.

Sobre segurana do arquivo local e o Flash Player

723

Se voc no especificar um diretrio, talvez o contedo no funcione conforme pretendido. Os arquivos de configurao dentro de um diretrio FlashPlayerTrust contm caminhos de diretrio. O arquivo pode conter uma lista de vrios diretrios e voc pode anexar novos caminhos a ele. O Flash Player espera encontrar um caminho por linha nos arquivos de configurao. Qualquer linha iniciada com # (sem nenhum espao antes desse sinal) ser tratada como comentrio.
Para criar um arquivo de configurao para confiar em um diretrio:
1. 2. 3.

Encontre a pasta #Security no disco rgido. Crie uma pasta chamada FlashPlayerTrust dentro da pasta #Security. Crie um novo arquivo no diretrio FlashPlayerTrust usando um editor de textos e salve-o como myTrustFiles.cfg. Voc pode usar qualquer nome exclusivo para o arquivo de configurao. Encontre o diretrio no qual voc testa os aplicativos do Flash. Digite ou cole cada caminho de diretrio (qualquer caminho de diretrio no disco rgido) em uma nova linha do arquivo. possvel colar vrios caminhos de diretrio em linhas separadas. Quando terminar, o arquivo ficar parecido com o seguinte exemplo:
C:\Documents and Settings\<seu_nome>\My Documents\files\ C:\Documents and Settings\<seu_nome>\My Documents\testapps\

4. 5.

6. 7.

Salve as alteraes em myTrustFiles.cfg. Teste um documento que acesse arquivos locais e de rede a partir do diretrio ao qual voc adicionou o arquivo. Os aplicativos do Flash salvos nesse diretrio agora podem acessar arquivos locais e a rede.

possvel salvar vrios caminhos de diretrio em cada arquivo de configurao e vrios arquivos *.cfg no diretrio FlashPlayerTrust. Se voc criar aplicativos que so instalados no disco rgido de um usurio final, talvez seja necessrio criar um arquivo de configurao no FlashPlayerTrust para especificar um diretrio confivel para o aplicativo. Crie os arquivos de configurao dentro do diretrio FlashPlayerTrust que especifica o local do aplicativo confivel. Consulte o procedimento anterior para obter informaes sobre esse diretrio e criar arquivos de configurao.
NO T A 724

Um instalador executado por um usurio com permisso administrativa em um computador.

Noes bsicas de segurana

Desenvolva um esquema de atribuio de nomes exclusivo para evitar conflitos com outros aplicativos que possam instalar arquivos nesse diretrio. Por exemplo, talvez voc queira usar o nome exclusivo da sua empresa e software no nome do arquivo para evitar conflitos.
D IC A

Se no quiser usar arquivos de configurao, publique os aplicativos do Flash em um servidor de teste separado, e vez de fornecer aos clientes ou outros desenvolvedores arquivos SWF para execuo em seus discos rgidos locais.

Para obter mais informaes sobre arquivos de configurao, consulte www.macromedia.com/ go/flashauthorcfg. Tambm possvel criar um arquivo de configurao exclusivo para confiar em um ou mais diretrios. Para obter informaes detalhadas sobre segurana, consulte www.macromedia.com/devnet/security/e www.macromedia.com/software/flashplayer/ security/.

Sobre a propriedade sandboxType


A propriedade System.security.sandboxType do Flash Player 8 retorna o tipo de sandbox de segurana na qual o arquivo SWF fazendo a chamada est operando. A propriedade sandboxType apresenta um destes quatro valores:
remote

O arquivo SWF armazenado na Internet e opera de acordo com regras de sandbox baseada em domnio. O arquivo SWF um arquivo local no qual o usurio confiou, utilizando o Global Security Settings Manager ou um arquivo de configurao do FlashPlayerTrust. O arquivo SWF pode ler de fontes de dados locais e se comunicar com a rede (como a Internet).

localTrusted

localWithFile

O arquivo SWF um arquivo local no qual o usurio no confiou, e que no foi publicado com uma designao de rede. O arquivo SWF pode ler de fontes de dados locais, mas no pode se comunicar com a rede (como a Internet).

localWithNetwork

O arquivo SWF um arquivo local no qual o usurio no confiou, e que foi publicado com a opo Access Network Only selecionada na caixa de dilogo Publish Settings (guia Flash). O arquivo SWF pode se comunicar com a rede, mas no pode ler de fontes de dados locais.

Sobre segurana do arquivo local e o Flash Player

725

Voc pode marcar a propriedade sandboxType de qualquer arquivo SWF, embora um valor seja retornado somente nos arquivos publicados para o Flash Player 8. Isso significa que quando publica para o Flash Player 7 ou anterior, voc no sabe se h suporte para a propriedade sandboxType em tempo de execuo. Se no houver suporte para a propriedade em tempo de execuo, o valor ser undefined (indefinido), o que ocorrer quando a verso do Flash Player (indicada pela propriedade System.capabilities.version) for anterior 8. Se o valor for undefined, voc poder determinar o tipo de sandbox verificando se o URL do arquivo SWF um arquivo local ou no. Se o arquivo SWF for local, o Flash Player classificar o SWF como localTrusted (que como todo o contedo local foi tratado antes do Flash Player 8); caso contrrio, o Flash Player classificar o arquivo SWF como remote.

Sobre as restries do tipo local-with-file-system


Um arquivo do tipo local-with-file-system no foi registrado com o arquivo de configurao dentro do diretrio FlashPlayerTrust, do painel Global Security Settings no Settings Manager ou no recebeu permisso de acesso de rede na caixa de dilogo Publish Settings no ambiente de criao do Flash.
N OT A

Para obter informaes sobre sandboxes de segurana, consulte Noes bsicas sobre as sandboxes de segurana local na pgina 711.

Esses arquivos incluem contedo legado executado no Flash Player 8. Se estiver desenvolvendo contedo no Flash 8 ou se tiver contedo que se enquadre em uma das categorias a seguir, voc (ou seus usurios) dever registrar o arquivo como confivel. Para obter informaes sobre como registrar um arquivo como confivel, consulte Especificando arquivos confiveis usando o Settings Manager na pgina 721. Para obter informaes sobre como conceder permisses para a reproduo de arquivo local usando arquivos de configurao, consulte Criando arquivos de configurao para o desenvolvimento em Flash na pgina 723. Os arquivos SWF do tipo local-with-file-system apresentam as seguintes restries: No podem acessar a rede, o que inclui o seguinte: Carregar outros arquivos SWF da rede (exceto utilizando caminhos UNC no pertencentes Internet) Enviar solicitaes HTTP Criar conexes usando XMLSocket, Flash Remoting ou NetConnection Chamar getURL() exceto se voc usar getURL("file:...") ou
getURL("mailto:...")

726

Noes bsicas de segurana

Podem interagir com outros arquivos local-with-file-system, mas apresentam restries relativas ao seguinte:

Script entre arquivos (como o acesso do ActionScript aos objetos em outros arquivos SWF). Chamar System.security.allowDomain Usar LocalConnection como remetente ou ouvinte e independentemente dos manipulares LocalConnection.allowDomain.
NO TA

Os arquivos SWF do tipo local-with-file-system podem interagir com outros arquivos SWF local-with-file-system no pertencentes rede. No entanto, no podem interagir com arquivos SWF do tipo local-with-network.

Os arquivos SWF local-with-file-system tm acesso de leitura aos arquivos conhecidos no sistema de arquivos local. Por exemplo, voc pode usar XML.load() em um arquivo SWF local-with-file-system desde que carregue de outro sistema de arquivos local e no da Internet.

Os arquivos SWF local-with-file-system no podem se comunicar com pginas HTML, o que inclui o seguinte:

Scripts de entrada (como a API ExternalInterface, o ActiveX, o LiveConnect e o XPConnect) Scripts de sada (como chamadas personalizadas a fscommand e getURL("javascript:..."))
N OT A

Se a pgina HTML for confivel, ela representar uma exceo a isso.

Sobre domnios, segurana entre domnios e arquivos SWF


Por padro, o Flash Player 7 e outras verses impedem que um arquivo SWF seja disponibilizado de um domnio por meio de leitura de dados, objetos ou variveis de arquivos SWF disponibilizadas de domnios diferentes. Alm disso, o contedo que carregado atravs de protocolos no protegidos (no-HTTPS) no pode ler contedos protegidos (HTTPS), mesmo que os dois estejam exatamente no mesmo domnio. Por exemplo, um arquivo SWF localizado em http://www.macromedia.com/main.swf no pode carregar dados de https:// www.macromedia.com/data.txt sem permisso explcita; nem um arquivo SWF disponibilizado em um domnio pode carregar dados (utilizando loadVars(), por exemplo) de outro domnio.

Sobre domnios, segurana entre domnios e arquivos SWF

727

Endereos IP numricos idnticos so compatveis. Contudo, um nome de domnio no compatvel com um endereo IP, mesmo que o nome do domnio corresponda ao mesmo endereo IP. A tabela a seguir mostra exemplos de domnios compatveis:
www.macromedia.com data.macromedia.com 65.57.83.12 www.macromedia.com data.macromedia.com 65.57.83.12

A tabela a seguir mostra exemplos de domnios incompatveis:


www.macromedia.com macromedia.com www.macromedia.com 65.57.83.12 www.macromedia.com data.macromedia.com www.macromedia.com macromedia.com www.macromedia.com (mesmo que esse domnio corresponda a 65.57.83.12 ) 65.57.83.12 (mesmo que www.macromedia.com corresponda a esse endereo IP)

O Flash Player 8 no permite que os arquivos SWF locais se comuniquem com a Internet sem uma configurao apropriada. Para obter informaes sobre como definir um arquivo de configurao para testar o contedo localmente, consulte Criando arquivos de configurao para o desenvolvimento em Flash na pgina 723. Para obter mais informaes sobre segurana, consulte www.macromedia.com/devnet/ security/ e www.macromedia.com/software/flashplayer/security/. Para obter mais informaes, consulte os seguintes tpicos:

Regras relativas a nomes de domnio para configuraes e dados locais na pgina 728 Acesso entre domnios e a subdomnios entre arquivos SWF na pgina 729 Sobre a autorizao de carregamento de dados entre domnios na pgina 737

Regras relativas a nomes de domnio para configuraes e dados locais


No Flash Player 6, as regras de correspondncia de domnio superior so usadas, por padro, ao acessar configuraes locais (tais como permisses de acesso a uma cmera ou microfone) ou dados com persistncia local (objetos compartilhados). Ou seja, as configuraes e dados para arquivos SWF hospedados em here.xyz.com, there.xyz.com e xyz.com so compartilhados e armazenados em xyz.com.

728

Noes bsicas de segurana

No Flash Player 7, as regras de correspondncia de domnio exato so usadas por padro. Ou seja, as configuraes e dados de um arquivo hospedado em aqui.xyz.com so armazenados em here.xyz.com, as configuraes e dados de um arquivo hospedado em there.xyz.com so armazenados em there.xyz.com e assim sucessivamente. System.exactSettings permite que voc especifique as regras que devero ser utilizadas. Esta propriedade suportada por arquivos publicados para Flash Player 6 ou verses posteriores. Para arquivos publicados para Flash Player 6, o valor padro false, significando que as regras de correspondncia de domnio superior esto sendo usadas. Para arquivos publicados para Flash Player 7 ou 8, o valor padro true, significando que as regras de correspondncia de domnio exato esto sendo usadas. Se voc estiver usando configuraes ou dados locais persistentes e quiser publicar um arquivo SWF do Flash Player 6 para Flash Player 7 ou 8, poder ser necessrio definir este valor como false no arquivo portado. Para obter mais informaes, consulte %{exactSettings (System.exactSettings property)}% em ActionScript 2.0 Language Reference.

Acesso entre domnios e a subdomnios entre arquivos SWF


Ao desenvolver uma srie de arquivos SWF que se comunicam entre si on-line por exemplo, ao usar loadMovie(), MovieClip.loadMovie(), MovieClipLoader.LoadClip() ou objetos Local Connection voc poder hospedar os arquivos SWF em domnios ou subdomnios diferentes ou de um mesmo domnio superior. Nos arquivos publicados para Flash Player 5 e verses anteriores, no havia restries em relao ao acesso entre domnios e a subdomnios. Nos arquivos publicados para Flash Player 6, voc podia utilizar o manipulador LocalConnection.allowDomain ou o mtodo System.security.allowDomain() para especificar o acesso entre domnios (por exemplo, para permitir que um arquivo em someSite.com pudesse ser acessado por um arquivo em someOtherSite.com), e no era necessrio nenhum comando para autorizar acesso ao subdomnio (por exemplo, um arquivo em www.someSite.com podia ser acessado por um arquivo em store.someSite.com).

Sobre domnios, segurana entre domnios e arquivos SWF

729

Arquivos publicados para Flash Player 7 implementam acesso entre arquivos SWF de forma diferente das verses anteriores, de duas maneiras. Primeiro, o Flash Player 7 implementa as regras de correspondncia de domnio exato, em vez das regras de correspondncia de domnio superior. Portanto, o arquivo que est sendo acessado (mesmo se publicado para uma verso anterior ao Flash Player 7) deve autorizar explicitamente o acesso entre domnios ou a um subdomnio. Este assunto analisado nesta seo. Segundo, um arquivo hospedado em um site que usa um protocolo seguro (HTTPS) deve autorizar explicitamente o acesso de um arquivo hospedado em um site que usa um protocolo inseguro (HTTP ou FTP). Este assunto discutido na prxima seo (consulte Acesso de protocolo HTTP para HTTPS entre arquivos SWF na pgina 741). Geralmente voc chama System.security.allowDomain nos seus aplicativos. Entretanto, quando o destinatrio de LocalConnection um arquivo SWF HTTPS e o remetente no , allowInsecureDomain chamado. A questo a seguir afeta apenas os arquivos SWF publicados para o Flash Player 7. Quando o destinatrio HTTPS, e o remetente um arquivo SWF local, allowDomain() chamado, mesmo que allowInsecureDomain() deva ser chamado. No entanto, no Flash Player 8, quando um destinatrio HTTPS LocalConnection Flash Player 8, e o remetente um arquivo local, allowInsecureDomain() chamado. Os arquivos executados no Flash Player 8 esto sujeitos a alteraes em relao ao modo como so executados no Flash Player 7. Chamar System.security.allowDomain permite operaes 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 verses anteriores, chamar System.security.allowDomain permitia operaes entre scripts nas quais o arquivo SWF sendo acessado podia ser qualquer arquivo SWF no mesmo domnio que o que chamasse System.security.allowDomain. Isso abria todo o domnio 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 operaes entre scripts nas quais o arquivo de acesso qualquer um e pode ser carregado de qualquer local (como uma permisso global). As permisses curinga podem ser teis, mas devem seguir as novas regras de segurana de arquivo local no Flash Player 8. Especificamente, os arquivos locais no vm de um domnio, portanto, necessrio utilizar o valor curinga. Entretanto, tenha cuidado ao usar o valor curinga porque qualquer domnio tem acesso ao arquivo. Para obter mais informaes, consulte %{allowInsecureDomain (mtodo security.allowInsecureDomain)}%.

730

Noes bsicas de segurana

Talvez voc se depare com uma situao em que carrega um arquivo SWF filho de um domnio diferente daquele que o chamou. Talvez voc queira permitir que esse arquivo crie script para o SWF pai, mas no conhece o domnio final do qual o arquivo SWF filho vir. Essa situao pode acontecer, por exemplo, quando voc usa redirecionamentos de balanceamento de carga ou servidores de terceiros. Nessa situao, voc pode usar a propriedade MovieClip._url como argumento para esse mtodo. Por exemplo, se carregar um arquivo SWF em my_mc, voc poder chamar System.security.allowDomain(my_mc._url). Se voc fizer isso, ser necessrio esperar at que o arquivo SWF em my_mc comece a ser carregado, porque a propriedade _url ainda no tem esse valor correto final. Para determinar quando o carregamento de um arquivo SWF filho foi iniciado, use MovieClipLoader.onLoadStart. A situao oposta tambm pode ocorrer; ou seja, voc pode criar um arquivo SWF filho que queira permitir que seu pai crie script para ele, mas no sabe qual ser o domnio de seu arquivo SWF pai (trata-se de um arquivo SWF que pode ser carregado por vrios domnios). Nessa situao, chame System.security.allowDomain(_parent._url) do arquivo SWF filho. No necessrio esperar o carregamento do arquivo SWF pai, porque ele carregado antes do filho.
N OT A

Se o arquivo SWF da Internet sendo acessado for carregado de um URL HTTPS, o arquivo SWF devera chamar System.security.allowInsecureDomain("*").

Sobre domnios, segurana entre domnios e arquivos SWF

731

A tabela a seguir resume as regras de correspondncia de domnio nas verses diferentes do Flash Player:
Arquivos publicados para o Flash Player
5 ou anterior 6

Acesso entre domnios entre Acesso de subdomnio arquivos SWF entre arquivos SWF (allowDomain() necessrio)
Sem restries Sem restries

Sem restries Correspondncia de domnio superior: allowDomain() necessrio para domnios superiores que no correspondem. Correspondncia de domnio exato Permisso explcita para arquivos hospedados HTTPS acessarem arquivos hospedados HTTP ou FTP Correspondncia de domnio exato Permisso explcita para arquivos hospedados HTTPS acessarem arquivos hospedados HTTP ou FTP

7 e posterior

As verses que controlam o comportamento do Flash Player so verses de arquivos SWF (a verso especificada do Flash Player de um arquivo SWF), no a verso do prprio Flash Player. Por exemplo, quando o Flash Player 8 estiver reproduzindo um arquivo SWF publicado para a verso 7, o Flash Player aplicar um comportamento consistente com a verso 7. Essa prtica garante que as atualizaes do exibidor no alterem o comportamento de System.security.allowDomain() nos arquivos SWF implantados. Como o Flash Player 7 e as verses posteriores implementam regras de correspondncia exata de domnio, em vez das regras de correspondncia de domnio superior, poder ser necessrio modificar os scripts que j existam se voc desejar acess-los a partir de arquivos publicados para Flash Player 7 ou 8. Voc tambm pode publicar para Flash Player 6 os arquivos modificados. Se tiver utilizado alguma instruo LocalConnection.allowDomain() ou System.security.allowDomain() em seus arquivos e definido permisso para sites de domnios superiores, voc precisar alterar seus parmetros para especificar domnios exatos. O exemplo a seguir mostra as alteraes que voc talvez precise fazer se tiver cdigo do Flash Player 6:
// Flash Player 6 commands in a SWF file at www.anyOldSite.com // to allow access by SWF files that are hosted at www.someSite.com // or at store.someSite.com System.security.allowDomain("someSite.com");

732

N OT A

Voc precisar de System.security.allowInsecureDomain no Flash Player 7 e posterior se estiver executando acesso HTTP-para-HTTPS, mesmo que tenha correspondncia de domnio exato.

Noes bsicas de segurana

my_lc.allowDomain = function(sendingDomain) { return(sendingDomain=="someSite.com"); } // Corresponding commands to allow access by SWF files // that are published for Flash Player 7 or later System.security.allowDomain("www.someSite.com", "store.someSite.com"); my_lc.allowDomain = function(sendingDomain) { return(sendingDomain=="www.someSite.com" || sendingDomain=="store.someSite.com"); }

Poder ser necessrio adicionar instrues como estas em seus arquivos, se voc ainda no 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 instrues 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"); }

Alm disso, considere que se um aplicativo Flash Player 6 em execuo no Flash Player 7 tentar acessar dados fora de seu domnio exato, o Flash Player 7 e as regras de correspondncia de domnio exato sero impostos e o usurio dever permitir ou negar o acesso. Em resumo, poder ser necessrio modificar os seus arquivos para adicionar ou alterar instrues allowDomain se voc publicar arquivos para Flash Player 7 que atendam s seguintes condies:

Voc implementou scripts entre arquivos SWF (consulte Permitindo o acesso a dados entre arquivos SWF de domnios diferentes na pgina 734). O arquivo SWF chamado (de qualquer verso) no est hospedado em site com protocolo seguro (HTTPS), ou os arquivos SWF chamado e de chamada esto 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 pgina 741. Os arquivos SWF no esto no mesmo domnio (por exemplo, um arquivo est em www.domain.com e o outro em store.domain.com). 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 correspondncia de nome de domnio exato.

Voc deve realizar as seguintes alteraes:

Sobre domnios, segurana entre domnios e arquivos SWF

733

Se o arquivo SWF chamado estiver publicado para Flash Player 6, modifique-o para adicionar ou alterar uma instruo System.security.allowDomain ou LocalConnection.allowDomain, usando a correspondncia de nome de domnio exato, conforme mostrado nos exemplos de cdigo desta seo. Voc pode publicar o arquivo modificado tanto para Flash Player 6 quanto para 7. Se o arquivo SWF chamado estiver publicado para Flash Player 5 ou verses anteriores, porte o arquivo chamado para Flash Player 6 ou 7 e adicione uma instruo System.security.allowDomain, usando a correspondncia de nome de domnio exato, conforme mostrado nos exemplos de cdigo desta seo. Objetos LocalConnection no so suportados no Flash Player 5 e verses anteriores.

Para obter informaes sobre sandboxes de segurana local, consulte Sobre segurana do arquivo local e o Flash Player na pgina 709.

Permitindo o acesso a dados entre arquivos SWF de domnios diferentes


Para que dois arquivos SWF acessem dados um do outro (variveis e objetos), os dois arquivos devem se originar do mesmo domnio. Por padro, no Flash Player 7 e verses posteriores, os dois domnios devem ser exatamente iguais para que os dois arquivos possam compartilhar os dados. Entretanto, um arquivo SWF pode conceder acesso a arquivos SWF de domnios especficos, chamando LocalConnection.allowDomain ou System.security.allowDomain(). permite que arquivos SWF e HTML no domnio especificado acessem objetos e variveis no arquivo SWF que contm a chamada allowDomain().
System.security.allowDomain()

Se dois arquivos SWF forem disponibilizados do mesmo domnio por exemplo, http:// mysite.com/movieA.swf and http://mysite.com/movieB.swf ento movieA.swf poder examinar e modificar variveis, objetos, propriedades, mtodos etc. em movieB.swf, e movieB poder fazer o mesmo para movieA. Isso se chama script entre filmes ou operao entre scripts. Se dois arquivos SWF forem disponibilizados de domnios diferentes por exemplo, http:// mysite.com/movieA.swf and http://othersite.com/movieB.swf ento, por padro, o Flash Player no permitir que movieA.swf crie script para movieB.swf, e nem o contrrio. Se voc chamar System.security.allowDomain("mysite.com"), movieB.swf dar a movieA.swf permisso para criar script para movieB.swf. Um arquivo SWF d aos arquivos SWF de outros domnios permisso para a criao de script por meio da chamada para System.security.allowDomain(). Isso se chama criao de script entre domnios.

734

Noes bsicas de segurana

Para obter mais informaes sobre System.security.allowDomain(), operaes entre scripts e script entre domnios, consulte %{allowDomain (security.allowDomain method)}% em ActionScript 2.0 Language Reference. Por exemplo, suponha que o arquivo main.swf esteja disponvel a partir de www.macromedia.com. Em seguida, esse arquivo SWF carrega outro arquivo SWF (data.swf ) de data.macromedia.com em uma instncia de clipe de filme criada dinamicamente com createEmptyMovieClip().
// In macromedia.swf this.createEmptyMovieClip("target_mc", this.getNextHighestDepth()); target_mc.loadMovie("http://data.macromedia.com/data.swf");

Suponha que data.swf defina um mtodo chamado getData() em sua Timeline principal. Por padro, main.swf no pode chamar o mtodo getData() definido em data.swf aps o carregamento desse arquivo porque os dois arquivos SWF no residem no mesmo domnio. Por exemplo, ocorrer uma falha na chamada de mtodo 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

Entretanto, data.swf pode conceder acesso a arquivos SWF disponibilizados de www.macromedia.com usando o manipulador LocalConnection.allowDomain ou o mtodo System.security.allowDomain(), dependendo do tipo de acesso desejado. O cdigo a seguir, includo em data.swf, permite que um arquivo SWF disponibilizado a partir de www.macromedia.com acesse suas variveis e mtodos:
// Within data.swf this._lockroot = true; System.security.allowDomain("www.macromedia.com"); var my_lc:LocalConnection = new LocalConnection(); my_lc.allowDomain = function(sendingDomain:String):Boolean { return (sendingDomain == "www.macromedia.com"); }; function getData():Void { var timestamp:Date = new Date(); output_txt.text += "data.swf:" + timestamp.toString() + "\n\n"; } output_txt.text = "**INIT**:\n\n";

Agora, a funo getData no arquivo SWF carregado pode ser chamada pelo arquivo macromedia.swf. Observe que allowDomain permite a qualquer arquivo SWF do domnio autorizado acessar qualquer arquivo SWF do domnio 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).

Sobre domnios, segurana entre domnios e arquivos SWF

735

Para obter mais informaes sobre correspondncias de nomes de domnios, consulte Acesso entre domnios e a subdomnios entre arquivos SWF na pgina 729.

Arquivos de diretivas de servidor para autorizar o acesso a dados


Um documento do Flash pode carregar dados de uma origem externa usando uma das seguintes chamadas de carregamento de dados: XML.load(), XML.sendAndLoad(), LoadVars.load(), LoadVars.sendAndLoad(), loadVariables(), loadVariablesNum(), MovieClip.loadVariables(), XMLSocket.connect(), e Macromedia Flash Remoting (NetServices.createGatewayConnection). Alm disso, um arquivo SWF pode importar RSLs (Runtime Shared Libraries, Bibliotecas compartilhadas em tempo de execuo) ou recursos definidos em outro arquivo SWF durante a execuo. Por padro, os dados ou a RSL devem residir no mesmo domnio que o arquivo SWF que estiver carregando dados ou mdia externos. Para disponibilizar dados e recursos de bibliotecas compartilhadas em tempo de execuo para arquivos SWF em diferentes domnios, voc deve usar um arquivo de diretivas entre domnios. Um arquivo de diretivas entre domnios um arquivo XML que fornece um modo ao servidor para indicar que seus dados e documentos esto disponveis aos arquivos SWF atendidos por determinados domnios ou por todos os domnios. Todos os arquivos SWF disponveis a partir de um domnio especificado no arquivo de diretivas do servidor tero permisso para acessar dados, recursos ou RSLs desse servidor. Se voc estiver carregando dados externos, dever criar arquivos de diretivas mesmo se no planejar portar nenhum dos arquivos para Flash Player 7. Se estiver utilizando RSLs, dever criar arquivos de diretivas se o arquivo de chamada ou o arquivo chamado estiver publicado para Flash Player 7. Para obter mais informaes, consulte os seguintes tpicos:

Sobre a autorizao de carregamento de dados entre domnios na pgina 737 Sobre locais de arquivo de diretivas personalizadas na pgina 738 Sobre arquivos de diretivas XMLSocket na pgina 740

736

Noes bsicas de segurana

Sobre a autorizao de carregamento de dados entre domnios


Quando um documento do Flash tenta acessar os dados de outro domnio, o Flash Player tenta automaticamente carregar um arquivo de diretivas daquele domnio. Se o domnio do documento do Flash que est tentando acessar os dados estiver includo no arquivo de diretivas, os dados ficaro automaticamente acessveis. Os arquivos de diretivas devem ser denominados crossdomain.xml e podem residir no diretrio raiz ou em outro diretrio no servidor que esteja disponibilizando os dados com ActionScript adicional (consulte Sobre locais de arquivo de diretivas personalizadas na pgina 738). Os arquivos de diretivas funcionam somente nos servidores que se comunicam atravs de HTTP, HTTPS ou FTP. O arquivo de diretivas especfico da porta e do protocolo do servidor onde ele reside. Por exemplo, um arquivo de diretivas localizado em https://www.macromedia.com:8080/ crossdomain.xml se aplicar somente s chamadas de carregamento de dados feitas a www.macromedia.com atravs do HTTPS na porta 8080. Uma exceo a essa regra o uso de um objeto XMLSocket para conectar a um servidor de soquete em outro domnio. Nesse caso, um servidor HTTP executado na porta 80 do mesmo domnio que o servidor de soquete deve fornecer o arquivo de diretivas para a chamada do mtodo. Um arquivo de diretivas XML contm uma nica marca <cross-domain-policy>, a qual, por sua vez, contm nenhuma ou mais marcas <allow-access-from>. Cada marca <allowaccess-from> contm um atributo, domain, que especifica um endereo IP exato, um domnio exato ou um domnio curinga (qualquer domnio). Os domnios curingas so indicados por um asterisco (*), que corresponde a todos os domnios e todos os endereos IP, ou por um asterisco seguido de um sufixo, que corresponde apenas aos domnios terminados com o sufixo especificado. Os sufixos devem ser iniciados com um ponto. Entretanto os domnios curingas com sufixos podem corresponder a domnios compostos somente pelo sufixo, sem o ponto inicial. Por exemplo, foo.com considerado como parte de *.foo.com. Os curingas no so permitidos nas especificaes de domnios IP. Se voc especificar um endereo IP, ser concedido acesso somente a arquivos SWF carregados a partir daquele endereo IP atravs da sintaxe IP (por exemplo, http://65.57.83.12/ flashmovie.swf ), e no para os carregados utilizando a sintaxe de nome de domnio. O Flash Player no executa a resoluo de DNS. O exemplo a seguir mostra um arquivo de diretivas que permite acesso aos documentos do Flash provenientes de foo.com, friendOfFoo.com, *.foo.com e 105.216.0.40, a partir de um documento do Flash em foo.com:

Arquivos de diretivas de servidor para autorizar o acesso a dados

737

<?xml version="1.0" ?> <!-- http://www.foo.com/crossdomain.xml --> <cross-domain-policy> <allow-access-from domain="www.friendOfFoo.com" /> <allow-access-from domain="*.foo.com" /> <allow-access-from domain="105.216.0.40" /> <cross-domain-policy>

Tambm possvel permitir o acesso aos documentos originados de qualquer domnio, conforme mostrado no exemplo a seguir:
<?xml version="1.0" ?> <!-- http://www.foo.com/crossdomain.xml --> <cross-domain-policy> <allow-access-from domain="*" /> <cross-domain-policy>

Cada marca <allow-access-from> tambm tem o atributo opcional secure . O padro do atributo secure true. Voc poder definir o atributo como false se o arquivo de diretivas estiver em um servidor HTTPS e se quiser que os arquivos SWF em um servidor HTTP carreguem dados do servidor HTTPS. A definio do atributo secure como false pode comprometer a segurana oferecida por HTTPS. Se o arquivo SWF que voc est descarregando vier de um servidor HTTPS, mas o arquivo SWF carregando-o estiver em um servidor HTTP, ser necessrio adicionar o atributo secure="false" marca <allow-access-from>, conforme mostrado no cdigo a seguir:
<allow-access-from domain="www.foo.com" secure="false" />

Um arquivo de diretivas que no contenha marcas <allow-access-from> tem o mesmo efeito de no haver uma diretiva no servidor.

Sobre locais de arquivo de diretivas personalizadas


O Flash Player 7 (7.0.19.0) oferece suporte a um mtodo denominado System.security.loadPolicyFile. Esse mtodo permite especificar um local personalizado em um servidor no qual um arquivo de diretiva entre domnios possa ser encontrado, portanto, ele no precisa estar no diretrio raiz. O Flash Player 7 (7.0.14.0) somente procurava arquivos de diretivas no local raiz de um servidor, mas podia ser inconveniente para um administrador de site colocar esse arquivo no diretrio raiz. Para obter mais informaes sobre o mtodo loadPolicyFile e as conexes XMLSocket, consulte Sobre arquivos de diretivas XMLSocket na pgina 740 e %{loadPolicyFile (security.loadPolicyFile method)}% em ActionScript 2.0 Language Reference.

738

Noes bsicas de segurana

Se voc usar o mtodo loadPolicyFile, um administrador de site poder colocar o arquivo de diretiva em qualquer diretrio, desde que os arquivos SWF que precisam usar esse arquivo chamem loadPolicyFile para informar ao Flash Player onde ele est localizado. No entanto, os arquivos de diretivas no colocados no diretrio raiz tm um escopo limitado. O arquivo de diretivas permite acesso somente aos locais em seu prprio nvel ou abaixo dele na hierarquia do servidor. O mtodo loadPolicyFile est disponvel somente no Flash Player 7 (7.0.19.0) ou posterior. Os autores de arquivos SWF que usarem o mtodo loadPolicyFile devero seguir um destes procedimentos:

Exigir o Flash Player 7 (7.0.19.0) ou posterior. Verificar se o site de onde os dados vm tem um arquivo de diretivas no local padro (o diretrio raiz) e em um local no padro. As verses anteriores do Flash Player usam o local padro.

Caso contrrio, os autores devero criar arquivos SWF para que a falha de uma operao de carregamento entre domnios seja implementada.
A T E N O

Se os arquivos do SWF dependerem de loadPolicyFile, os visitantes com o Flash Player 6 ou anterior ou Flash Player 7 (7.0.19.0) ou posterior no tero problemas. No entanto, os visitantes com o Flash Player 7 (7.0.14.0) no tero suporte para loadPolicyFile.

Se voc quiser usar um arquivo de diretivas em um local personalizado no servidor, chame System.security.loadPolicyFile antes de fazer qualquer solicitao que dependa do arquivo de diretivas, como o seguinte:
System.security.loadPolicyFile("http://www.foo.com/folder1/folder2/ crossdomain.xml"); var my_xml:XML = new XML(); my_xml.load("http://www.foo.com/folder1/folder2/myData.xml");

possvel carregar vrios arquivos de diretivas com escopos sobrepostos usando-se loadPolicyFile. Para todas as solicitaes, o Flash Player tentar consultar todos os arquivos cujo escopo inclua seu local. Se um arquivo de diretivas no conceder acesso entre domnios, outro arquivo no ser impedido de conceder acesso aos dados. Se todas as tentativas de acesso falharem, o Flash Player procurar no local padro do arquivo crossdomain.xml (no diretrio raiz). A solicitao falhar se nenhum arquivo de diretivas for encontrado no local padro.

Arquivos de diretivas de servidor para autorizar o acesso a dados

739

Sobre arquivos de diretivas XMLSocket


Para uma tentativa de conexo XMLSocket, o Flash Player 7 (7.0.14.0) procurava crossdomain.xml em um servidor HTTP na porta 80 no subdomnio em que essa tentativa era feita. O Flash Player 7 (7.0.14.0) e todas as verses anteriores restringiam o acesso de conexes XMLSocket s portas 1024 e superiores. No entanto, no Flash Player 7 (7.0.19.0) e posteriores, o ActionScript pode informar ao Flash Player sobre um local no padro para um arquivo de diretivas usando System.security.loadPolicyFile. Qualquer local personalizado para arquivos de diretivas XMLSocket ainda dever estar em um servidor de soquete XML. No exemplo a seguir, o Flash Player recupera um arquivo de diretivas de um URL especificado:
System.security.loadPolicyFile("http://www.foo.com/folder/policy.xml");

As permisses concedidas pelo arquivo de diretivas no local aplicam-se a todo o contedo no mesmo nvel ou abaixo dele na hierarquia do servidor. Portanto, se tentar carregar os seguintes dados, voc descobrir que somente pode carregar dados de certos locais:
myLoadVars.load("http://foo.com/sub/dir/vars.txt"); // allowed myLoadVars.load("http://foo.com/sub/dir/deep/vars2.txt"); // allowed myLoadVars.load("http://foo.com/elsewhere/vars3.txt"); // not allowed

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 concluso do download de qualquer arquivo de diretiva antes de negar uma solicitao que requeira um arquivo desse tipo. O Flash Player consultar o local padro de crossdomain.xml se nenhuma outra diretiva for autorizada no arquivo SWF. A sintaxe especial permite a recuperao 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 no estiver no diretrio padro (raiz); caso contrrio, a porta s poder ser a 1024 ou superior (assim como ocorre com os exibidores anteriores). Quando uma conexo 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 conexes normais de soquete pela mesma porta. O servidor dever aguardar <policy-file-request /> antes de transmitir um arquivo de diretivas.

740

Noes bsicas de segurana

Disponibilizar arquivos de diretivas em uma porta separada das conexes normais, caso em que poder enviar um arquivo de diretivas to logo uma conexo seja estabelecida na porta de arquivo de diretivas dedicada.

O servidor dever enviar um byte nulo para terminar um arquivo de diretivas antes de fechar a conexo. Se o servidor no fechar a conexo, o Flash Player far isso ao receber o byte nulo de trmino. Um arquivo de diretivas disponibilizado por um soquete XML tem a mesma sintaxe que outro arquivo de diretivas, mas tambm deve especificar as portas s quais o acesso concedido. As portas autorizadas so especificadas em um atributo to-ports na marca <allow-accessfrom>. Se o arquivo de diretivas for inferior porta 1024, ele poder conceder acesso a qualquer porta; quando um arquivo de diretivas vem da porta 1024 ou superior, ele somente pode conceder acesso a outras portas acima de 1024. Nmeros de porta exclusivos, intervalos de portas e curingas so permitidos. O seguinte cdigo um exemplo de um arquivo de diretivas XMLSocket:
<cross-domain-policy> <allow-access-from domain="*" to-ports="507" /> <allow-access-from domain="*.foo.com" to-ports="507,516" /> <allow-access-from domain="*.bar.com" to-ports="516-523" /> <allow-access-from domain="www.foo.com" to-ports="507,516-523" /> <allow-access-from domain="www.bar.com" to-ports="*" /> <cross-domain-policy>

Coo a capacidade de se conectar a portas inferiores a 1024 est disponvel 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 prprio subdomnio.

Acesso de protocolo HTTP para HTTPS entre arquivos SWF


necessrio usar um manipulador ou mtodo allowDomain para permitir que um arquivo SWF em um domnio seja acessado por um arquivo SWF em outro domnio. Entretanto, se o arquivo SWF que est sendo acessado estiver hospedado em um site que usa protocolo seguro (HTTPS), o manipulador ou mtodo allowDomain no permitir acesso a partir de um arquivo SWF hospedado em um site que usa um protocolo inseguro. Para permitir esse acesso, voc dever usar as instrues LocalConnection.allowInsecure Domain() ou System.security.allowInsecureDomain(). Consulte Permitindo o acesso de protocolo HTTP para HTTPS entre arquivos SWF na pgina 742 para obter mais informaes.

Acesso de protocolo HTTP para HTTPS entre arquivos SWF

741

Permitindo o acesso de protocolo HTTP para HTTPS entre arquivos SWF


Alm das regras de correspondncia de domnio exato, voc deve autorizar explicitamente o acesso de arquivos hospedados em sites que utilizem um protocolo inseguro a arquivos hospedados em sites que utilizem um protocolo seguro (HTTPS). Se o arquivo chamado estiver publicado para Flash Player 6, 7 ou 8, voc dever implementar uma das instrues allowDomain (consulte Acesso entre domnios e a subdomnios entre arquivos SWF na pgina 729) ou utilizar as novas instrues LocalConnection.allowInsecure Domain ou System.security.allowInsecureDomain(). Por exemplo, se o arquivo SWF em https://www.someSite.com/data.swf tiver de permitir o acesso atravs de um arquivo SWF em http://www.someSite.com, o cdigo a seguir adicionado a data.swf permitir tal acesso:
// No data.swf System.security.allowInsecureDomain("www.someSite.com"); my_lc.allowInsecureDomain = function(sendingDomain:String):Boolean { return (sendingDomain == "www.someSite.com"); };
AVISO 742

A implementao de uma instruo allowInsecureDomain() compromete a segurana oferecida pelo protocolo HTTPS. Voc dever efetuar estas alteraes somente se no puder reorganizar o seu site de forma que todos os arquivos SWF sejam disponibilizados atravs de protocolos HTTPS.

O cdigo a seguir mostra um exemplo das alteraes 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"); }

Noes bsicas de segurana

Poder ser necessrio adicionar instrues como estas em seus arquivos, se voc ainda no as estiver utilizando. Poder ser necessria uma modificao mesmo se ambos os arquivos estiverem no mesmo domnio (por exemplo, um arquivo em http://www.domain.com est chamando um arquivo em https://www.domain.com). Em resumo, poder ser necessrio modificar os seus arquivos para incluir ou alterar instrues se voc publicar arquivos para Flash Player 7 ou posterior que atendam s seguintes condies:

Voc implementou scripts entre arquivos SWF (usando loadMovie(), MovieClip.loadMovie(), MovieClipLoader.LoadClip() ou objetos Local Connection). O arquivo de chamada no est hospedado em um servidor com protocolo HTTPS e o arquivo chamado est em HTTPS. Se o arquivo chamado estiver publicado para Flash Player 7, inclua System.security.allowInsecureDomain ou LocalConnection.allowInsecureDomain no arquivo chamado, usando correspondncia de nome de domnio exato, conforme mostrado nos exemplos de cdigo desta seo. Se o arquivo chamado estiver publicado para Flash Player 6 ou verses anteriores e os arquivos chamado e de chamada estiverem no mesmo domnio (por exemplo, um arquivo em http://www.domain.com chama um arquivo em https://www.domain.com), nenhuma modificao ser necessria. Se o arquivo chamado estiver publicado para Flash Player 6, os arquivos no estiverem no mesmo domnio e voc no desejar portar o arquivo chamado para Flash Player 7, modifique o arquivo chamado adicionando ou alterando uma instruo System.security.allowDomain ou LocalConnection.allowDomain, usando correspondncia de nome de domnio exato, conforme mostrado nos exemplos de cdigo desta seo. Se o arquivo chamado estiver publicado para Flash Player 6 e voc desejar port-lo para Flash Player 7, dever incluir System.security.allowInsecureDomain ou LocalConnection.allowInsecureDomain nesse arquivo, usando correspondncia de domnio exato, conforme mostrado nos exemplos de cdigo desta seo.

Voc deve realizar as seguintes alteraes:

Acesso de protocolo HTTP para HTTPS entre arquivos SWF

743

Se o arquivo chamado estiver publicado para Flash Player 5 ou verses anteriores e os arquivos no estiverem no mesmo domnio, voc poder optar por uma destas duas aes. Voc poder portar o arquivo chamado para Flash Player 6 e adicionar ou alterar uma instruo System.security.allowDomain, usando correspondncia de nome de domnio exato, conforme mostrado nos exemplos de cdigo desta seo, ou portar o arquivo chamado para Flash Player 7 e incluir uma instruo System.security.allowInsecureDomain nesse arquivo, usando correspondncia de nome de domnio exato, conforme mostrado nos exemplos de cdigo desta seo.

744

Noes bsicas de segurana

CAPTULO 18

Depurando aplicativos
O Macromedia Flash Basic 8 e o Macromedia Flash Professional 8 oferecem vrias ferramentas para testar o ActionScript nos arquivos SWF. O Debugger (Depurador) permite que voc encontre erros em um arquivo SWF durante sua execuo no Flash Debug Player (consulte Depurando scripts na pgina 745). O Flash tambm fornece as seguintes ferramentas de depurao adicionais:

18

O painel Output (Sada), que exibe mensagens de erro, inclusive alguns erros de tempo de execuo, e listas de variveis e objetos (consulte Usando o painel Output na pgina 759) A instruo trace, que envia observaes de programao e valores de expresso para o painel Output (consulte Usando a instruo trace na pgina 764) As instrues throw e try..catch..finally que permitem testar e responder aos erros em tempo de execuo de dentro do script.

Esta seo descreve como depurar os scripts e os aplicativos Flash utilizando o Debugger e como usar o painel Output. Para obter mais informaes, consulte os seguintes tpicos:
Depurando scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .745 Usando o painel Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .759

Depurando scripts
O Debugger no Flash 8 ajuda a encontrar erros no arquivo SWF durante sua execuo no Flash Player. Voc deve exibir seu arquivo SWF em uma verso especial do Flash Player chamada Flash Debug Player. Ao instalar a ferramenta de criao, o Flash Debug Player instalado automaticamente. Assim, se voc instalar o Flash e navegar por um site com contedo Flash ou usar a opo Test Movie (Testar filme), estar usando o Flash Debug Player. Tambm possvel executar o instalador no seguinte diretrio no Windows ou no Macintosh: diretrio de instalao do Flash\Players\Debug\ ou inicie o Flash Debug Player independente do mesmo diretrio.

745

Quando usar o comando Control (Controle) > Test Movie para testar os arquivo SWF que implementam controles de teclado (tabulao, atalhos de teclado criados usando Key.addListener() e assim por diante), selecione Control > Disable Keyboard Shortcuts (Desativar atalhos de teclado). A seleo desta opo evita que o ambiente de criao retenha pressionamentos de teclas e permite pass-los diretamente para o exibidor. Por exemplo, no ambiente de criao, Control+U abre a caixa de dilogo Preferences (Preferncias). Se o seu script associar Control+U a uma ao que sublinha o texto na tela, ao usar o comando Test Movie, o pressionamento de Control+U abrir a caixa de dilogo Preferences (Preferncias) em vez de executar a ao 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

Quando voc usar um aplicativo em outro idioma em um sistema em ingls, o comando Test Movie falhar se alguma parte do caminho SWF tiver caracteres que no possam ser representados com o esquema de codificao MBCS. Por exemplo, caminhos em japons em um sistema em ingls no funcionam. Todas as reas do aplicativo que usarem o exibidor externo estaro sujeitas a esta limitao.

O Debugger mostra uma lista hierrquica de clipes de filme carregados atualmente no Flash Player. Com o Debugger, voc pode exibir e modificar valores de variveis e propriedades durante a reproduo do arquivo SWF, e pode usar pontos de interrupo para interromper sua execuo e percorrer o cdigo 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 interrupo no ActionScript para interromper o Flash Player e executar a depurao direta do cdigo durante a sua execuo. 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 exibio dinmica do clipe de filme. Quando os clipes de filme so adicionados ou removidos do arquivo, a lista de exibio reflete as alteraes imediatamente. possvel redimensionar a lista de exibio movendo o divisor horizontal.
Para ativar o Debugger no modo de teste:

Selecione Control (Controle) > Debug Movie (Depurar filme).

746

Depurando aplicativos

Esse comando exporta o arquivo SWF com as informaes de depurao (o arquivo SWD) e permite a depurao do arquivo SWF. Ele abre o Debugger e o arquivo SWF no modo de teste.
NO T A

Se necessrio, voc poder redimensionar as vrias regies do painel Debugger. Quando o ponteiro muda entre cada regio, voc pode arrastar para redimensionar as listas de exibio e observao, e a exibio do cdigo.
Lista de observao Visualizao de cdigo

Barra de status Lista de exibio

Para obter mais informaes, consulte os tpicos a seguir: Depurando um arquivo SWF a partir de um local remoto Exibindo e modificando variveis na pgina 750 Usando a lista de observao na pgina 752 Exibindo propriedades do clipe de filme e alterando propriedades editveis na pgina 753 Definindo e removendo pontos de interrupo na pgina 755 Sobre como trabalhar nas linhas de cdigo na pgina 757

Depurando scripts

747

Depurando um arquivo SWF a partir de um local remoto


possvel depurar um arquivo SWF remoto usando as verses independentes, ActiveX ou plug-in do Flash Player. Para encontrar essas verses do Flash Player, procure no seguinte diretrio no Windows ou no Macintosh: diretrio de instalao do Flash\Players\Debug\. Durante a exportao de um arquivo SWF, possvel ativar a depurao e criar uma senha para depurao. Se voc no ativar a depurao, o Debugger no ser ativado. Para garantir que somente usurios confiveis possam executar arquivos SWF no Flash Debug Player, publique-os com uma senha para depurao. Assim como no JavaScript ou no HTML, os usurios podem exibir variveis de cliente no ActionScript. Para armazenar variveis de maneira segura, voc deve envi-las a um aplicativo no servidor, em vez de armazen-las no arquivo. Entretanto, como desenvolvedor do Flash, voc pode ter outros segredos comerciais, como estruturas de clipes de filmes, que no deseja revelar. Use a senha para depurao a fim de proteger o seu trabalho.
Para ativar a depurao remota de um arquivo SWF:
1. 2.

Selecione File > Publish Settings (Configuraes de publicao). Na guia Flash da caixa de dilogo Publish Settings, selecione Debugging permitted (Depurao permitida).

3.

Para definir uma senha, digite-a na caixa Password (Senha). Depois de definida a senha, ningum poder fazer download de informaes para o Debugger sem ela. No entanto, se o campo Password for deixado em branco, a senha no ser solicitada.

4.

Feche a caixa de dilogo Publish Settings e selecione um dos seguintes comandos:


Control > Debug Movie File > Export (Exportar) > Export Movie (Exportar filme) File > Publish (Publicar)

748

Depurando aplicativos

O Flash cria um arquivo de depurao, com a extenso .swd e salva-o no mesmo diretrio que o arquivo SWF. O arquivo SWD usado para depurar o ActionScript e contm informaes que lhe permitem usar pontos de interrupo e depurar o cdigo diretamente.
5.

Coloque o arquivo SWD no mesmo diretrio do arquivo SWF no servidor. Mesmo que o arquivo SWD no esteja no mesmo diretrio do arquivo SWF, voc poder executar uma depurao remota. No entanto, o Debugger no tem informaes de pontos de interrupo e no permitir a depurao direta do cdigo.

6. 7.

No Flash, selecione Window (Janela) > Debugger. No Debugger, selecione Enable Remote Debugging (Ativar a depurao remota) no menu pop-up no canto superior direito do painel.

Para ativar o Debugger a partir de um local remoto:


1. 2.

Abra o aplicativo de criao Flash. Em um navegador ou na verso existente do exibidor independente, abra o arquivo SWF publicado a partir do local remoto. A caixa de dilogo Remote Debug (Depurao remota) exibida.

Depurando scripts

749

3.

Na caixa de dilogo Remote Debug (Depurao remota), selecione Localhost (Host local) ou Other Machine (Outra mquina):

4.

Quando a conexo for estabelecida, a senha ser solicitada. Digite a senha para depurao se j houver uma definida. A lista de exibio do arquivo SWF aparece no Debugger. Se o arquivo SWF no for reproduzido, o Debugger poder ser interrompido, portanto, clique em Continue para inici-lo.

Exibindo e modificando variveis


A guia Variables no Debugger mostra os nomes e os valores de todas as variveis globais e de linha de tempo no arquivo SWF selecionadas na lista de exibio. Se voc alterar o valor de uma varivel na guia Variables, poder ver a alterao refletida no arquivo SWF durante sua execuo. Por exemplo, para testar a deteco de coliso em um jogo, voc pode inserir o valor da varivel para posicionar uma bola no local correto prximo a uma parede.

NO TA 750

Se essa caixa de dilogo no for exibida, significa que o Flash no pde encontrar o arquivo SWD. Nesse caso, clique com o boto 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.

Selecione Localhost se o Debug Player e o aplicativo de criao Flash estiverem no mesmo computador. Selecione Other Machine (Outra mquina) se o Debug Player e o aplicativo de criao Flash no estiverem no mesmo computador. Digite o endereo IP do computador em que o aplicativo de criao Flash est sendo executado.

Depurando aplicativos

No Debugger, a guia Locals (Locais) mostra os nomes e os valores das variveis locais disponveis, na linha do ActionScript em que o arquivo SWF esteja parado atualmente, em um ponto de interrupo ou em qualquer outro local dentro de uma funo definida pelo usurio.
Para exibir uma varivel:
1.

Selecione o clipe de filme que contm a varivel na lista de exibio. Para exibir variveis globais, selecione o clipe _global na lista de exibio.
NO TA

Se necessrio, voc poder redimensionar as vrias regies do painel Debugger. Quando o ponteiro muda entre cada regio, voc pode arrastar para redimensionar as listas de exibio e observao, e a exibio do cdigo.

2.

Clique na guia Variables (Variveis).

A lista de exibio atualizada automaticamente enquanto o arquivo SWF reproduzido. Se um clipe de filme for removido do arquivo SWF em um quadro especfico, esse clipe ser removido da lista de exibio do Debugger juntamente com sua varivel e o nome de varivel. No entanto, se voc marcar uma varivel para a lista de observao (consulte Usando a lista de observao na pgina 752), ela ser removida da guia Variables (Variveis), mas ainda poder ser exibida nessa lista.

Para modificar o valor de uma varivel:

Clique duas vezes no valor e insira um novo.

Depurando scripts

751

O valor no pode ser uma expresso. Por exemplo, use "Hello", 3523 ou "http:// www.macromedia.com", mas no use x + 2 ou eval("name:" +i). O valor pode ser uma seqncia de caracteres (qualquer valor entre aspas [""]), um nmero ou um valor booleano (true (verdadeiro) ou false (falso)).
N OT A 752 NO T A

Para escrever o valor de uma expresso para o painel Output no modo de teste, use a instruo trace. Consulte Usando a instruo trace na pgina 764.

Usando a lista de observao


Para monitorar um conjunto de variveis crticas de forma organizada, voc pode marc-las para serem exibidas na lista de observao. Essa lista mostra o caminho absoluto para a varivel e o valor. Tambm possvel inserir um novo valor de varivel na lista de observao da mesma maneira que na guia Variables. Agora, a lista de observao mostra apenas as variveis e as propriedades que voc pode acessar usando um caminho de destino absoluto, como _global ou _root. Se uma varivel local for inserida na lista de observao, seu valor aparecer apenas quando o Flash Player for parado em uma linha do ActionScript com o escopo dessa varivel. Todas as demais variveis aparecero durante a reproduo do arquivo SWF. Se o Debugger no encontrar o valor da varivel, ele ser listado como Undefined (Indefinido).
Se necessrio, voc poder redimensionar as vrias regies do painel Debugger. Quando o ponteiro muda entre cada regio, voc pode arrastar para redimensionar as listas de exibio e observao, e a exibio do cdigo.

A lista de observao mostra apenas as variveis e no as propriedades ou funes.

Variveis marcadas para a lista de observao e variveis na lista de observao

Depurando aplicativos

Para adicionar variveis lista de observao, escolha uma desta opes:

Na guia Variables ou Locals, clique com o boto direito do mouse (Windows) ou, pressionando Control, clique (Macintosh) em uma varivel selecionada e escolha Watch (Observao) no menu de contexto. exibido um ponto azul prximo varivel. Na guia Watch (Observao), clique no boto direito do mouse (Windows), ou mantenha pressionada a tecla Control e clique (Macintosh) e selecione Add (Adicionar) no menu de contexto. Clique duas vezes na coluna de nome e insira o caminho de destino para o nome da varivel no campo.

Para remover variveis da lista de observao:

Na guia Watch ou Variables (Variveis), clique com o boto direito do mouse (Windows) ou mantenha pressionada a tecla Control (Macintosh) e clique e selecione Remove no menu de contexto.

Exibindo propriedades do clipe de filme e alterando propriedades editveis


No Debugger, a guia Properties (Propriedades) mostra todos os valores de propriedades de qualquer clipe de filme no Stage (Palco). possvel alterar um valor e ver o efeito no arquivo SWF durante sua reproduo. Algumas propriedades de clipe de filme so somente de leitura e no podem ser alteradas.
N OT A

Se necessrio, voc poder redimensionar as vrias regies do painel Debugger. Quando o ponteiro muda entre cada regio, voc pode arrastar para redimensionar as listas de exibio e observao, e a exibio do cdigo.

Para exibir as propriedades de um clipe de filme no Debugger:


1.

Selecione um clipe de filme na lista de exibio.

Depurando scripts

753

2.

No Debugger, clique na guia Properties.

Para modificar o valor de uma propriedade:

Clique duas vezes no valor e insira um novo. O valor no pode ser uma expresso. Por exemplo, insira 50 ou "clearwater", mas no x + 50. O valor pode ser uma seqncia de caracteres (qualquer valor entre aspas [""]), um nmero ou um valor booleano (true (verdadeiro) ou false (falso)). No possvel digitar valores de objeto ou de array (por exemplo, {id: "rogue"} ou [1, 2, 3]) no Debugger.
NO TA

Para escrever o valor de uma expresso para o painel Output no modo de teste, use a instruo trace. Consulte Usando a instruo trace na pgina 764.

754

Depurando aplicativos

Definindo e removendo pontos de interrupo


Um ponto de interrupo permite interromper um aplicativo Flash em execuo no Flash Debug Player em uma linha especfica do ActionScript. Use os pontos de interrupo para testar os possveis itens problemticos do cdigo. Por exemplo, se voc tiver escrito um conjunto de instrues if..else if e no conseguir determinar qual delas est em execuo, poder adicionar um ponto de interrupo antes das instrues e examinar cada uma delas no Debugger. Voc pode definir os pontos de interrupo no painel Actions, na janela Script ou no Debugger. Os pontos de interrupo definidos no painel Actions so salvos com o arquivo FLA. Os pontos de interrupo definidos no Debugger e na janela Script no so salvos no arquivo FLA e so vlidos somente para a sesso atual de depurao.
A T E N O

Se definir pontos de interrupo no painel Actions ou na janela Script e pressionar o boto Auto Format (Formatao automtica), voc poder observar que alguns desses pontos no esto mais no local correto. Pode ser que o ActionScript tenha sido movido para outra linha quando o cdigo foi formatado, porque, s vezes, as linhas em branco so removidas. Talvez seja necessrio verificar e modificar os pontos de interrupo depois que voc clicar em Auto Format ou formatar automaticamente os scripts antes de selecionar pontos de interrupo.

Para definir ou remover um ponto de interrupo no painel Actions ou na janela Script durante uma sesso de depurao, siga um destes procedimentos:

Clique na margem esquerda. Um ponto vermelho indica um ponto de interrupo. Clique no boto Debug options (Opes de depurao) acima do painel Script. Clique com o boto direito do mouse (Windows) ou mantenha a tecla Control pressionada e clique (Macintosh) para exibir o menu de contexto e selecione Set Breakpoint (Definir ponto de interrupo), Remove Breakpoint (Remover ponto de interrupo) ou Remove Breakpoints in this File (Remover pontos de interrupo neste arquivo).
NO T A N O TA

Na janela Script, tambm possvel selecionar Remove Breakpoints in all AS Files (Remover pontos de interrupo em todos os arquivos AS).

Pressione Control+Shift+B (Windows) ou Command+Shift+B (Macintosh).


Em algumas verses anteriores do Flash, um clique na margem esquerda do painel Script selecionava a linha de cdigo; agora essa ao adiciona ou remove um ponto de interrupo. Para selecionar uma linha de cdigo, clique com o boto do mouse e pressione Control (Windows) ou clique e pressione Command (Macintosh).

Depurando scripts

755

Para definir e remover pontos de interrupo no Debugger, siga um destes procedimentos:


Clique na margem esquerda. Um ponto vermelho indica um ponto de interrupo. Clique no boto Toggle Breakpoint (Alternar o ponto de interrupo) ou Remove All Breakpoints acima da visualizao do cdigo. Clique com o boto direito do mouse (Windows) ou mantenha a tecla Control pressionada e clique (Macintosh) para exibir o menu de contexto e selecione Set Breakpoint, Remove Breakpoint ou Remove Breakpoints in the File. Pressione Control+Shift+B (Windows) ou Command+Shift+B (Macintosh).

Depois que o Flash Player parar no ponto de interrupo, ser possvel executar uma depurao total, parcial ou circular daquela linha de cdigo. (Consulte Sobre como trabalhar nas linhas de cdigo na pgina 757.) Voc pode definir pontos de interrupo na janela Script e visualiz-los no depurador, se o depurador apresentar o mesmo caminho para o arquivo do ActionScript que aquele que estava aberto na janela Script. Da mesma forma, possvel definir pontos de interrupo no depurador durante uma sesso de depurao e visualiz-los no arquivo do ActionScript se voc abri-lo na janela Script.
NO TA 756

No defina pontos de interrupo em comentrios ou linhas em branco; se forem definidos em comentrios ou linhas vazias, os pontos de interrupo sero ignorados.

Sobre o arquivo XML de pontos de interrupo


Quando voc trabalha com pontos de interrupo em um arquivo de script externo na janela Script, o arquivo AsBreakpoints.xml permite o armazenamento de informaes de ponto de interrupo. O arquivo AsBreakpoints.xml gravado no diretrio Local Settings (Configuraes locais), nos seguintes locais: Windows: Disco rgido\Documents and Settings\User\Local Settings\Application Data\Macromedia\Flash 8\language\Configuration\Debugger\ Macintosh: HD do Macintosh/Users/User/Library/Application Support/Macromedia Flash 8/ Configuration/Debugger/ Um exemplo de AsBreakpoints.xml mostrado a seguir:
<?xml version="1.0"?> <flash_breakpoints version="1.0"> <file name="c:\tmp\myscript.as"> <breakpoint line="10"></breakpoint>

Depurando aplicativos

<breakpoint line="8"></breakpoint> <breakpoint line="6"></breakpoint> </file> <file name="c:\tmp\myotherscript.as"> <breakpoint line="11"></breakpoint> <breakpoint line="7"></breakpoint> <breakpoint line="4"></breakpoint> </file> </flash_breakpoints>

O arquivo XML consiste nas seguintes marcas:


flash_breakpoints Esse n tem um atributo, denominado version, que indica a verso do arquivo XML. A verso do Flash 8 1.0. file

Um n filho de flash_breakpoints. Esse n tem um atributo, denominado name, que indica o nome do arquivo que contm pontos de interrupo.

Um n filho de file. Esse n tem um atributo, denominado line, que indica o nmero da linha em que o ponto de interrupo existe.
breakpoint

O arquivo AsBreakpoints.xml lido quando voc inicia o Flash e gerado novamente quando o Flash encerrado. AsBreakpoints.xml usado para controlar os pontos de interrupo entre as sesses de desenvolvimento do Flash. Uma estrutura de dados interna mantm os pontos de interrupo enquanto voc os define e remove ao desenvolver no Flash.

Sobre como trabalhar nas linhas de cdigo


Quando uma sesso de depurao iniciada, o Flash Player interrompido para que voc possa alternar pontos de interrupo. Se definir pontos de interrupo no painel Actions (Aes), voc poder clicar no boto Continue (Continuar) para reproduzir o arquivo SWF at atingir um ponto de interrupo. Se voc no definir pontos de interrupo no painel Actions, use o menu de salto no Debugger para selecionar qualquer script no arquivo SWF. Quando selecionar o script. voc poder adicionar pontos de interrupo a ele. Aps a adio de pontos de interrupo, clique em Continue para iniciar o arquivo SWF. O Debugger parar quando alcanar o ponto de interrupo. Por exemplo, no cdigo a seguir, suponha que o ponto de interrupo esteja definido dentro de um boto na linha myFunction():
on(press){ myFunction(); }

Depurando scripts

757

Quando voc clica no boto, o ponto de interrupo alcanado e o Flash Player interrompido. Desse modo, possvel entrar no cdigo e levar o Debugger at a primeira linha da funo myFunction(), independentemente do local em que ela esteja definida no documento. Tambm possvel percorrer a funo ou sair dela. medida que voc percorre as linhas de cdigo, os valores de variveis e propriedades so alterados na lista de observao e nas guias Variables (Variveis), Locals (Locais) e Properties (Propriedades). A seta amarela do lado esquerdo da visualizao de cdigo do Debugger indica a linha em que o Debugger parou. Use os botes a seguir localizados na parte superior da visualizao de cdigo:
Continue (Continuar) Stop Debugging (Parar a depurao) Toggle Breakpoint (Alternar o ponto de interrupo) Remove All Breakpoints (Remover todos os pontos de interrupo)

Step Out (Depurao circular) Step In (Depurao total) Step Over (Depurao parcial)

Step In (Depurao total) avana

o Debugger (indicado pela seta amarela) dentro de uma funo. O boto Step In funciona somente com funes definidas pelo usurio. No exemplo a seguir, se voc colocar um ponto de interrupo na linha 7 e clicar em Step In, o Debugger avanar para a linha 2, e, com um clique posterior em Step In, ele avanar para a linha 3. Para avanar o Debugger uma linha de cdigo, clique em Step In para linhas que no tm funes definidas pelo usurio. Por exemplo, se voc parar na linha 2 e selecionar Step In, o Debugger avanar para a linha 3, conforme mostrado no seguinte exemplo:

1 2 3 4 5 6 7 8

function myFunction() { x = 0; y = 0; } mover = 1; myFunction(); mover = 0; Os nmeros neste trecho de cdigo indicam nmeros de linha. Eles no fazem parte do cdigo.

758

NO TA

Depurando aplicativos

Step Out (Depurao circular) avana o Debugger at sair de uma funo. Esse boto s funcionar se voc estiver parado no momento em uma funo definida pelo usurio. Ele move a seta amarela para a linha posterior quela em que a funo foi chamada. No exemplo anterior, se voc colocar um ponto de interrupo na linha 3 e clicar em Step Out, o Debugger avanar para a linha 8. Clicar em Step Out em uma linha fora de uma funo definida pelo usurio o mesmo que clicar em Continue. Por exemplo, se voc parar na linha 6 e clicar em Step Out, o exibidor continuar executando o script at encontrar um ponto de interrupo. Step Over (Depurao parcial) avana

o Debugger sobre uma linha de cdigo. Esse boto move a seta amarela para a prxima linha no script. No exemplo anterior, se tivesse parado na linha 7 e clicado em Step Over, voc avanaria diretamente para a linha 8 sem parar em myFunction(), embora o cdigo de myFunction() ainda seja executado.
Continue (Continuar) sai

da linha em que o exibidor est parado e continua a reproduo at alcanar um ponto de interrupo. desativa o Debugger, mas continua a reproduzir o

Stop Debugging (Parar a depurao)

arquivo SWF no Flash Player.

Usando o painel Output


No modo de teste, o painel Output (Sada) mostra informaes para ajud-lo a solucionar problemas do arquivo SWF. Algumas informaes, como erros de sintaxe, so exibidas automaticamente. Voc pode mostrar outras informaes usando os comandos List Objects (Listar objetos) e List Variables (Listar variveis). (Consulte Listando os objetos de um arquivo SWF na pgina 761 e Listando as variveis de um arquivo SWF na pgina 762.) Se voc usar a instruo trace em seus scripts, poder enviar informaes especficas para o painel Output enquanto o arquivo SWF executado. Essas informaes podem incluir observaes sobre o status do arquivo SWF ou o valor de uma expresso. (Consulte Usando a instruo trace na pgina 764.)
Para mostrar o painel Output, siga um destes procedimentos:

Selecione Window (Janela) > Output (Sada). Pressione F2.

Usando o painel Output

759

Para trabalhar com o contedo do painel Output, clique no menu pop-up no canto superior direito para visualizar suas opes.

A tabela a seguir lista as opes disponveis no menu pop-up do painel Output:


Item de menu
Word wrap (Quebra automtica de linha)

O que faz
Alterna automaticamente a quebra automtica de linha, para que o usurio no tenha que utilizar a barra de rolagem horizontal para visualizar toda a linha de caracteres. Se selecionada, quebra as linhas; caso contrrio, no haver quebra de linhas. Copia todo o contedo do painel Output na rea de transferncia do computador. Para copiar uma parte selecionada da sada, escolha a rea que voc deseja copiar e selecione Copy. Limpa toda a sada presente no painel Output no momento. Abre uma caixa de dilogo que voc pode usar para encontrar uma palavra-chave ou frase no contedo do painel Output. Tenta localizar a prxima instncia de uma palavra-chave ou frase no contedo do painel Output. Salva o contedo atual do painel Output em um arquivo de texto externo. Mostra a caixa de dilogo Print, que permite imprimir o contedo atual do painel Output em uma impressora instalada ou em programas instalados, como o Flash Paper ou o Acrobat. Permite selecionar dois nveis possveis de sada: None (Nenhum) ou Verbose (Extenso). Selecione None para eliminar a sada enviada ao navegador.

Copy (Copiar)

Clear (Limpar) Find (Localizar) Find Again (Localizar novamente) Save to File (Salvar em arquivo) Print (Imprimir)

Filter level (Nvel de filtro)

760

Depurando aplicativos

Item de menu
Maximize Panel (Maximizar painel) Close Panel (Fechar painel)

O que faz
Maximiza o painel Output quando acoplado. Fecha o painel Output e limpa o contedo do painel.

Para obter mais informaes sobre como o painel Output, consulte os seguintes tpicos:

Listando os objetos de um arquivo SWF na pgina 761 Listando as variveis de um arquivo SWF na pgina 762 Sobre como exibir as propriedades do campo de texto para depurao na pgina 763 Usando a instruo trace na pgina 764 Atualizando o Flash Player para teste na pgina 765

Listando os objetos de um arquivo SWF


No modo de teste, o comando List Objects (Listar Objetos) mostra o nvel, o quadro, o tipo de objeto (forma, clipe de filme ou boto), caminhos de destino e nomes de instncias de clipes de filme, botes e campos de texto em uma lista hierrquica. Essa opo especialmente til para localizar o caminho de destino e o nome de instncia corretos. Ao contrrio do Debugger, a lista no atualizada automaticamente enquanto o arquivo SWF reproduzido. Selecione o comando List Objects sempre que desejar enviar as informaes para o painel Output (Sada).
A TE N O

Selecione o comando List Objects para limpar as informaes exibidas atualmente no painel Output. Se voc no quiser perder informaes no painel Output, selecione Save to File no menu pop-up Options desse painel ou copie e cole essas informaes em outro local antes de selecionar o comando List Objects.

O comando List Objects no lista todos os objetos de dados do ActionScript. Nesse contexto, um objeto considerado como uma forma ou smbolo no Stage.

Usando o painel Output

761

Para exibir uma lista de objetos em um arquivo SWF:


1.

Se o arquivo SWF no estiver em execuo no modo de teste, selecione Control (Controlar) > Test Movie (Testar filme). Selecione Debug > List Objects. Uma lista de todos os objetos do Stage exibida no painel Output, como mostrado neste exemplo:
Level #0: Frame=1 Label="Scene_1" Button: Target="_level0.myButton" Shape: Movie Clip: Frame=1 Target="_level0.myMovieClip" Shape: Edit Text: Target="_level0.myTextField" Text="This is sample text."

2.

Listando as variveis de um arquivo SWF


No modo de teste, o comando List Variables (Listar variveis) mostra uma lista de todas as variveis atualmente no arquivo SWF. Essa lista especialmente til para localizar o nome da varivel e seu caminho de destino corretos. Ao contrrio do Debugger, a lista no atualizada automaticamente enquanto o arquivo SWF reproduzido. Selecione o comando List Variables sempre que desejar enviar as informaes para o painel Output (Sada). O comando List Variables tambm mostra as variveis globais declaradas com o identificador _global. As variveis globais so exibidas na parte superior da sada de List Variables em uma seo intitulada Global Variables (Variveis globais), e cada varivel possui o prefixo _global. Alm disso, o comando List Variables mostra as propriedades getter/setter (apanhadoras/ definidoras), isto , aquelas criadas com o mtodo Object.addProperty(), e inicia os mtodos get ou set. Uma propriedade getter/setter exibida juntamente com qualquer outra propriedade do objeto a que pertence. Para facilitar a distino entre essas propriedades e outras variveis, o valor de uma propriedade getter/setter iniciado com a seqncia de caracteres [getter/setter]. O valor exibido para uma propriedade getter/setter determinado mediante a avaliao da funo get da propriedade.
ATENO 762

Selecione o comando List Variables para limpar as informaes exibidas atualmente no painel Output. Se voc no quiser perder informaes no painel Output, selecione Save to File no menu pop-up Options desse painel ou copie e cole essas informaes em outro local antes de selecionar o comando List Variables.

Depurando aplicativos

Para exibir uma lista de variveis em um arquivo SWF:


1.

Se o arquivo SWF no estiver em execuo no modo de teste, selecione Control (Controlar) > Test Movie (Testar filme). Selecione Debug (Depurar) > List Variables. Uma lista de todas as variveis atualmente no arquivo SWF exibida no painel Output, como mostrado neste exemplo:
Global Variables: Variable _global.mycolor = "lime_green" Level #0: Variable _level0.$version = "WIN 7,0,19,0" Variable _level0.myArray = [object #1, class 'Array'] [ 0:"socks", 1:"gophers", 2:"mr.claw" ] Movie Clip: Target="_level0.my_mc"

2.

Sobre como exibir as propriedades do campo de texto para depurao


Para obter informaes depuradas sobre os objetos TextField, voc pode usar o comando Debug (Depurar)> List Variables (Listar variveis) no modo de teste. O painel Output usa as seguintes convenes para mostrar objetos TextField:

Se uma propriedade no for encontrada no objeto, ela no ser exibida. No mais de quatro propriedades so exibidas em uma linha. Uma propriedade com um valor de seqncia de caracteres exibida em uma linha separada. Se houver alguma outra propriedade definida para o objeto aps as propriedades internas serem processadas, elas sero adicionadas exibio usando-se as regras no segundo e terceiro pontos dessa lista. As propriedades de cor so exibidas como nmeros hexadecimais (0x00FF00). As propriedades so exibidas na seguinte ordem: variable, text, htmlText, html, textWidth, textHeight, maxChars, borderColor, backgroundColor, textColor, border, background, wordWrap, password, multiline, selectable, scroll, hscroll, maxscroll, maxhscroll, bottomScroll, type, embedFonts, restrict, length, tabIndex, autoSize.

Usando o painel Output

763

O comando List Objects (Listar objetos) no menu Debug (durante o modo de teste) lista os objetos TextField. Se um nome de instncia for especificado para um campo de texto, o painel Output mostrar o caminho de destino completo, incluindo o nome de instncia, da seguinte forma:
Target = "target path"

Para obter mais informaes sobre os comandos List Variables (Listar variveis) e List Objects (Listar objetos), consulte Usando o painel Output na pgina 759.

Usando a instruo trace


Ao usar a instruo trace em um script, voc pode enviar informaes para o painel Output. Por exemplo, ao testar um arquivo SWF ou uma cena, voc pode enviar observaes de programao especficas para o painel ou fazer com que resultados especficos sejam exibidos quando for pressionado um boto ou quando um quadro for reproduzido. A instruo trace semelhante instruo JavaScript alert. Quando a instruo trace usada em um script, voc pode usar expresses como parmetros. O valor de uma expresso exibido no painel Output no modo de teste, conforme mostrado pelo trecho de cdigo e pela imagem do painel Output a seguir.
Para usar a instruo trace em um script:
1.

Selecione o Frame 1 (Quadro 1) da Timeline (Linha de tempo) e adicione o seguinte cdigo ao painel Actions (Aes):
this.createEmptyMovieClip("img_mc", 10); var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip) { trace(target_mc+" loaded in "+getTimer()+" ms"); }; mclListener.onLoadError = function(target_mc:MovieClip, errorCode:String, httpStatus:Number) { trace(">> error downloading image into "+target_mc); trace(">>\t errorCode="+errorCode+", httpStatus="+httpStatus); }; var img_mcl:MovieClipLoader = new MovieClipLoader(); img_mcl.addListener(mclListener); img_mcl.loadClip("http://www.helpexamples.com/flash/images/404.jpg", img_mc);

2.

Selecione Control (Controlar) > Test Movie (Testar filme) para testar o arquivo SWF.

764

Depurando aplicativos

O painel Output (Sada) exibir a seguinte mensagem:

Atualizando o Flash Player para teste


Voc pode fazer download da verso mais recente do Flash Player do Macromedia Support Center em www.macromedia.com/support/flash e us-la para testar seus arquivos SWF.

Usando o painel Output

765

766

Depurando aplicativos

CAPTULO 19

Melhores prticas e convenes de codificao para ActionScript 2.0


Os designers e desenvolvedores do Macromedia Flash devem escrever cdigos e estruturar aplicativos de uma forma intuitiva benfica para eles prprios e tambm para as outras pessoas que esto trabalhando no mesmo projeto. Isso especialmente importante em arquivos FLA com muitos recursos ou longos arquivos de cdigos. Quando voc segue as melhores prticas e convenes de codificao, todos na equipe de design e desenvolvimento podem entender a estrutura de arquivos e o cdigo do ActionScript, e podem trabalhar com mais eficincia. Este documento ajuda a formalizar o processo de desenvolvimento e codificao do Flash. Como comum mais de um designer ou desenvolvedor trabalhar em um nico projeto Flash, as equipes se beneficiam quando todos seguem um conjunto padro de diretrizes para utilizar Flash, organizar arquivos FLA e escrever o cdigo ActionScript 2.0. As sees deste captulo descrevem as melhores prticas para escrever o cdigo ActionScript; e algumas sees de Usando o Flash abordam as melhores prticas para a utilizao da ferramenta de criao Flash. As diretrizes a seguir apresentam as vantagens da consistncia para que as pessoas aprendam a usar Flash e escrever o cdigo ActionScript. Adote as melhores prticas em todas as ocasies, quer voc seja designer ou desenvolvedor, ou esteja trabalhando sozinho ou em equipe.

19

Quando voc trabalhar em documentos do Flash ou ActionScript A adoo de prticas consistentes e eficientes ajuda a acelerar o fluxo de trabalho. Com convenes de codificao estabelecidas, a tarefa de desenvolvimento se torna mais rpida e fica mais fcil compreender e lembrar como o documento foi estruturado, caso voc queira edit-lo posteriormente. Alm disso, o cdigo costuma ter mais mobilidade no framework de um projeto de maior porte, alm de ser reutilizado mais facilmente.

Quando voc compartilhar arquivos FLA ou AS Outras pessoas editando o documento podero localizar e entender rapidamente o ActionScript, modificar o cdigo consistentemente e encontrar e editar recursos.

Quando voc trabalhar em aplicativos

767

Vrios autores podero trabalhar em um aplicativo com menos conflitos e mais eficincia. Se melhores prticas e convenes de codificao forem seguidas, os administradores de projetos ou sites podero gerenciar e estruturar projetos ou aplicativos complexos com menor quantidade de conflitos ou redundncias.

Quando voc estiver estudando ou ensinando o Flash e o ActionScript Aprender a criar aplicativos usando as melhores prticas e seguindo convenes de codificao reduz a necessidade de reaprender determinadas metodologias. Se os alunos que esto aprendendo Flash exercitarem maneiras melhores e consistentes de estruturar o cdigo, podero aprender a linguagem com mais rapidez e menos frustrao.

Tcnicas 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, mtodos consistentes o ajudam a lembrar como estruturou seu documento, especialmente se no tiver usado o arquivo FLA recentemente. Essas so apenas algumas razes pelas quais voc deve aprender e seguir as melhores prticas. Voc est prestes a descobrir muito mais quando ler essas melhores prticas e desenvolver seus prprios bons hbitos. Considere os tpicos a seguir como uma diretriz para a utilizao do Flash; voc pode optar por seguir algumas ou todas as recomendaes. Voc tambm pode modific-las para que se ajustem ao seu modo de trabalho. Muitas das diretrizes neste captulo o ajudam a desenvolver uma maneira consistente de trabalhar com Flash e a criar o cdigo ActionScript. Este captulo aborda os seguintes tpicos sobre as convenes de codificao e as melhores prticas:
Convenes de atribuio de nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .769 Usando de comentrios no cdigo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779 Convenes de codificao do ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782 Otimizao do ActionScript e do Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798 Formatando a sintaxe do ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .799

768

Melhores prticas e convenes de codificao para ActionScript 2.0

Convenes de atribuio de nome


Geralmente, voc gasta 80% de seu tempo de desenvolvimento com depurao, soluo de problemas e manuteno geral, especialmente em projetos maiores. Mesmo quando voc trabalha em projetos pequenos, gasta um tempo significativo analisando e corrigindo o cdigo. A legibilidade do seu cdigo importante para seu benefcio e o benefcio dos membros de sua equipe. Ao seguir as convenes de atribuio de nome, voc melhora a legibilidade, ao mesmo tempo aumentando o fluxo de trabalho e permitindo a localizao e correo de erros no cdigo. Todos os programadores seguem uma maneira padronizada de escrever cdigo, o que aprimora o projeto de muitas maneiras. A utilizao de convenes de atribuio de nome para nomes de variveis pode ser til nas seguintes importantes funes:

Elas tornam o cdigo legvel de modo que seja possvel identificar imediatamente o tipo de dados de uma varivel. Isso pode ajudar aos alunos que estejam aprendendo a criar cdigos, bem como a desenvolvedores que no estejam familiarizados com o seu cdigo. Elas podem ser pesquisadas e substitudas quando necessrio. Elas ajudam a reduzir conflitos com palavras reservadas e construes de linguagem. Elas podem ajud-lo a distinguir entre as variveis de escopos diferentes (variveis locais, propriedades de classe, parmetros etc.).

As sees a seguir contm diretrizes de atribuio de nomes para a criao de cdigo do ActionScript, como arquivos de atribuio de nome, variveis, constantes, componentes etc. A seo Formatando a sintaxe do ActionScript na pgina 799 analisa as convenes de atribuio de nome especficas do ActionScript e comuns em outras linguagens de programao. A seo Convenes de codificao do ActionScript na pgina 782 aborda as codificaes de atribuio de nome especficas para a criao de ActionScript e desenvolvimento com o Flash 8.
NO T A

As verses 7 e 8 do Flash Player seguem a especificao de linguagem ECMAScript (ECMA-262) edio3. til ver essa especificao para obter informaes sobre o funcionamento da linguagem. (Consulte www.ecma-international.org/publications/ standards/Ecma-262.htm.)

Esta seo contm os seguintes tpicos: Diretrizes gerais de atribuio de nome na pgina 770 Como evitar palavras reservadas ou construes de linguagem na pgina 771 Atribuio de nome a variveis na pgina 772 Atribuindo nomes a constantes na pgina 775 Atribuindo nomes a variveis booleanas na pgina 775

Convenes de atribuio de nome

769

Atribuindo nomes a funes e mtodos na pgina 775 Nomeando classes e objetos na pgina 776 Atribuindo nomes a pacotes na pgina 777 Atribuindo nomes a interfaces na pgina 778 Atribuio de nomes a componentes personalizados na pgina 778

Diretrizes gerais de atribuio de nome


Esta seo analisa as diretrizes de atribuio de nome usadas para escrever o cdigo ActionScript. As convenes de atribuio de nome so importantes para escrever o cdigo lgico. O principal objetivo consiste em melhorar a legibilidade do cdigo ActionScript 2.0. Lembre-se de que todas as variveis devem ser nomes exclusivos. Os nomes fazem distino entre maisculas e minsculas no Flash Player 7 e nas verses posteriores. No use o mesmo nome com maisculas e minsculas diferentes, pois isso pode confundir os programadores ao lerem seu cdigo, bem como causar problemas em verses anteriores do Flash que no foram essa distino. Lembre-se destas diretrizes ao atribuir nomes a itens, como variveis, arquivos e classes no Flash:

Limite o uso de abreviaes. Use abreviaes consistentemente. Uma abreviao deve representar claramente apenas um item. Por exemplo, a abreviao sec pode representar section e second.

Faa a concatenao de palavras para criar nomes. Use combinaes de maisculas e minsculas ao concatenar palavras para fazer distino entre palavras, para fins de legibilidade. Por exemplo, selecione myPelican em vez demypelican (meu pelicano)

Denomine um arquivo de modo a descrever o processo ou o item, como addUser (adicionar usurio). No use nomes que no sejam descritivos para mtodos ou variveis. Por exemplo, se recuperar uma parte dos dados correspondente ao nome de usurio do visitante, voc poder usar o mtodo getUserName(), em vez do mtodo menos descritivo getData(). Esse exemplo expressa o que est acontecendo, e no como voc realiza a ao.

Mantenha o tamanho de todos os nomes o menor possvel. Lembre-se de usar nomes descritivos.

As sees a seguir oferecem mais detalhes sobre a atribuio de nomes a itens, como variveis, classes, pacotes e constantes no seu cdigo.

770

Melhores prticas e convenes de codificao para ActionScript 2.0

Como evitar palavras reservadas ou construes de linguagem


Ao atribuir nomes a instncias e variveis, evite usar palavras reservadas, pois elas podem causar erros no cdigo. As palavras reservadas incluempalavras-chave na linguagem ActionScript. Alm disso, no use nenhuma palavra nas linguagens ActionScript 2.0 (chamada de construo de linguagem) para o nome de uma instncia ou varivel. As construes ActionScript abrangem nomes de classes, nomes de classes de componentes, nomes de mtodos e propriedades e nomes de interfaces.
A VI S O

Nunca use maisculas e minsculas diferentes para evitar conflito com palavras reservadas. Por exemplo, a atribuio de nome a uma instncia da classe TextField textfield (que no entra em conflito com TextField porque o Flash faz distino entre maisculas e minsculas) uma prtica de codificao inadequada.

A tabela a seguir lista as palavras reservadas no ActionScript 2.0 que causam erros nos scripts quando usadas como nomes de variveis:
add catch delete eq for gt import intrinsic new onClipEvent return switch try while and class do extends funo if in le not or set tellTarget typeof with break continue dynamic false ge ifFrameLoaded instanceof it Null private static this var case default else finally get implements interface ne on public super throw void

Convenes de atribuio de nome

771

As palavras a seguir so reservadas para uso futuro no Flash, com base na especificao de linguagem preliminar ECMAScript (ECMA-262) Edition 4. Evite usar essas palavras, pois elas podem ser utilizadas em futuras verses do Flash.
as char enum goto native synchronized volatile abstract const export is package throws Boolean debugger final long protected transient bytes double float namespace short use

Atribuio de nome a variveis


Os nomes de variveis podem conter somente letras, nmeros e cifro ($). No comece nomes de variveis com nmeros. As variveis devem ser exclusivas e fazem distino entre maisculas e minsculas no Flash Player 7 e posterior. Por exemplo, evite os seguintes nomes de variveis:
my/warthog = true; // includes a slash my warthogs = true; // includes a space my.warthogs = true; // includes a dot 5warthogs = 55; // begins with a number

Sempre que possvel, use uma atribuio estrita de tipos de dados em suas variveis, pois isso o ajudar da seguinte maneira:

Adiciona a funcionalidade de concluso de cdigo, o que agiliza a codificao. Gera erros no painel Output (Sada), para que no ocorra uma falha silenciosa durante a compilao do arquivo SWF. Esses erros ajudam a localizar e corrigir problemas nos aplicativos.

Para adicionar um tipo de dados s variveis, voc deve defini-las usando a palavra-chave var. No exemplo a seguir, ao criar um objeto LoadVars, voc usaria a atribuio estrita de tipo de dados:
var paramsLv:LoadVars = new LoadVars();

772

Melhores prticas e convenes de codificao para ActionScript 2.0

A atribuio estrita de tipo de dados possibilita a concluso do cdigo e garante que o valor de paramsLv contenha um objeto LoadVars. Isso tambm garante que esse objeto no seja usado para armazenar dados numricos ou de seqncias de caracteres. Como a atribuio estrita utiliza a palavra-chave var, voc no pode adicion-la a variveis ou propriedades globais em um objeto ou array. Para obter mais informaes sobre variveis, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85.
NO TA

A atribuio estrita de tipo de dados no torna mais lento um arquivo SWF. A verificao de tipo ocorre durante a compilao (quando o arquivo SWF criado), e no em tempo de execuo.

Use as seguintes diretrizes ao atribuir nomes a variveis no cdigo: Todas as variveis devem ter nomes exclusivos. No use o mesmo nome de varivel com maisculas/minsculas diferentes. Por exemplo, no use firstname (nome) e firstName (Nome) como variveis diferentes no aplicativo. Embora os nomes faam distino entre maisculas e minsculas no Flash Player 7 e posterior, o uso do mesmo nome de varivel com maisculas e minsculas diferentes pode confundir os programadores que lem o seu cdigo, alm de causar problemas em verses anteriores do Flash que no foram a distino entre maisculas e minsculas. No use palavras que faam parte da linguagem ActionScript 1.0 ou 2.0 como nomes de variveis. Em particular, nunca use palavras-chave como nomes de instncia, porque elas causam erros no cdigo. Para evitar conflitos e possibilitar o funcionamento do seu cdigo, no utilize a distino entre maisculas e minsculas. No use variveis que faam parte de construes de programao comuns. No use construes de linguagem se voc souber da existncia delas em outras linguagens de programao, mesmo que o Flash no inclua essas construes ou no oferea suporte a elas. Por exemplo, no use as seguintes palavras-chave como variveis:
textfield = "myTextField"; switch = true; new = "funk";

Sempre adicione anotaes de tipo de dados ao cdigo. Tambm conhecido como uso de tipos de dados estritos com variveis ou atribuio rigorosa a variveis, o processo de adio de tipos de dados s variveis importante para: Gerar erros em tempo de compilao para que o aplicativo no falhe em silncio. Disparar a concluso do cdigo. Ajudar os usurios a entenderem o cdigo.

Convenes de atribuio de nome

773

Para obter informaes sobre como adicionar anotaes de tipo, consulte Sobre a atribuio de tipos de dados e a atribuio estrita de tipos de dados na pgina 85.

No use o tipo Object (Objeto) demais. As anotaes de tipo de dados devem ser precisas para melhorar o desempenho. Use um tipo Object somente quando no houver uma alternativa razovel.

Mantenha o tamanho das variveis o menor possvel, ao mesmo tempo em que mantm sua clareza. Verifique se os nomes das variveis so descritivos, mas no exagere e use nomes muito longos e complexos.

Somente use nomes de varivel de caractere nico para otimizao em loops. Como opo, voc pode usar nomes de variveis de caractere nico para variveis temporrias em loops (como i, j, k, m e n). Use esses nomes de varivel de caractere nico somente para ndices curtos de loop ou quando a velocidade e otimizao do desempenho so essenciais. O seguinte exemplo mostra esse uso:
var fontArr:Array = TextField.getFontList(); fontArr.sort(); var i:Number; for (i = 0; i<fontArr.length; i++) { trace(fontArr[i]); }

Inicie as variveis com uma letra minscula. Os nomes com iniciais maisculas so reservados para classes, interfaces etc. Use uma combinao de maisculas e minsculas para palavras concatenadas. Por exemplo, use myFont (minhaFonte), em vez de myfont (minhafonte). No use acrnimos e abreviaes. Exceo a essa regra: se os acrnimos ou abreviaes representarem o padro para uso de um termo (como HTML ou CFM). Para acrnimos comumente usados, use maisculas/ minsculas como em newHtmlParser em vez de newHTMLParser para melhorar a legibilidade.

Use pares complementares ao criar um conjunto relacionado de nomes de variveis. Por exemplo, voc pode usar pares complementares para indicar a pontuao mnima e mxima de um jogo, da seguinte forma:
var minScoreNum:Number = 10; // minimum score var maxScoreNum:Number = 500; // maximum score

774

Melhores prticas e convenes de codificao para ActionScript 2.0

Atribuindo nomes a constantes


possvel usar constantes em situaes em que voc precisa fazer referncia a uma propriedade cujo valor nunca alterado. Isso ajuda a encontrar erros de digitao no cdigo que talvez no sejam encontrados se literais foram usados. Tambm permite alterar o valor em um nico local. As variveis devem ser letras minsculas ou maisculas/minsculas; contudo, voc siga estas diretrizes para atribuir nomes a constantes estticas (variveis que no so alteradas):

As constantes devem estar em maisculas. As palavras separadas devem conter sublinhados.


// constant

Voc pode ver essas diretrizes funcionando nos seguinte trecho de cdigo ActionScript:
var BASE_URL:String = "http://www.macromedia.com"; var MAX_WIDTH:Number = 10; // constant

No codifique diretamente constantes numricas a menos que a constante seja 1, 0 ou -1, que voc pode usar em um loop for como um valor de contador.

Atribuindo nomes a variveis booleanas


Inicie as variveis booleanas com a palavra is (porque um valor booleano ou no em virtude de sua natureza). Portanto, voc pode usar o seguinte para uma situao em que um beb seja uma menina ou no (que um valor booleano):
isGirl

Ou, para uma varivel indicando se um usurio fez login (ou no), voc pode usar o seguinte:
isLoggedIn

Atribuindo nomes a funes e mtodos


Use as diretrizes a seguir ao atribuir nomes a funes e mtodos no cdigo. Para obter mais informaes sobre como escrever funes e mtodos, consulte o Captulo 6, Funes e mtodos..

Use nomes descritivos. Use uma combinao de maisculas e minsculas para palavras concatenadas. Um bom exemplo seria singLoud(). Inicie os nomes de funes e mtodos com uma letra minscula. Descreva o valor que est sendo retornado no nome da funo. Por exemplo, se estiver retornando o nome de uma msica, voc dever atribuir funo o nome getCurrentSong().

Convenes de atribuio de nome

775

Estabelea um padro de atribuio de nome para relacionar funes semelhantes. O ActionScript 2.0 no permite a sobrecarga. No contexto da programao orientada a objeto, a sobrecarga refere-se capacidade de fazer com que as funes se comportem de maneira diferente, dependendo dos tipos de dados que so passados para elas.

Atribua nomes a mtodos como verbos. Voc pode concatenar o nome, mas ele deve conter um verbo. Como os verbos executa um operao em um objeto, use-os para a maioria dos mtodos.

Estes so exemplos de nomes de mtodos:


sing(); boogie(); singLoud(); danceFast();

Nomeando classes e objetos


Ao criar um novo arquivo de classes, use as diretrizes a seguir ao atribuir um nome classe e ao arquivo ActionScript. Para a formatao correta, consulte os seguintes exemplos de nomes de classes:
class Widget; class PlasticWidget; class StreamingVideo;

Pode haver variveis de membro pblicas e privadas em uma classe. A classe pode conter variveis que os usurios no devem definir nem acessar diretamente. Torne essas variveis privadas e somente permita que os usurios acessem os valores usando os mtodos getter/ setter. As seguintes diretrizes se aplicam atribuio de nomes a classes:

O nome de uma classe deve iniciar com uma letra maiscula. Escreva os nomes de classes em maisculas e minsculas quando forem palavras compostas ou concatenadas. Comece com uma letra maiscula para uma palavra composta ou concatenada. Um bom exemplo seria NewMember.

Em geral, os nomes de classes so 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 so mais importantes que nomes curtos. No use acrnimos e abreviaes.

776

Melhores prticas e convenes de codificao para ActionScript 2.0

Exceo a essa regra: se os acrnimos ou abreviaes representarem o padro para uso de um termo (como HTML ou CFM). Para acrnimos comumente usados, voc deve usar maisculas/minsculas como NewHtmlParser em vez de NewHTMLParser para melhorar a legibilidade.

Use nomes significativos e simples que descrevam o contedo da classe. Para evitar imprecises ou confuses, use nomes genricos. s vezes, o nome de uma classe uma palavra composta. O qualificador pode descrever o substantivo ou a frase. Por exemplo, em vez de member, voc pode qualificar o substantivo usando NewMember or OldMember.

No pluralize as palavras usadas no nome da classe (como Witches ou BaldPirates). Na maioria dos casos, melhor deixar as palavras como substantivos qualificados. O qualificador descreve o substantivo ou a frase. Por exemplo, em vez de cat ou buckaneer, voc pode qualificar o substantivo como BlackCat ou OldBuckaneer.

No use um nome de classe nas propriedades dessa classe, porque isso causa redundncia. Por exemplo, no faz sentido ter Cat.catWhiskers. Em vez disso, Cat.whiskers bem melhor.

No use substantivos que tambm possam ser interpretados como verbos. Por exemplo, Running ou Gardening. O uso desses substantivos pode provocar confuso com mtodos, estados ou outras atividades de aplicativos.

Use nomes de classes exclusivos para cada classe em um nico aplicativo. No atribua nomes a classes que entrem em conflito com os nomes das classes internas no Flash. Tente comunicar o relacionamento que uma classe tem dentro de uma hierarquia. Isso ajuda a exibir o relacionamento de uma classe dentro de um aplicativo. Por exemplo, voc pode ter a interface Widget e sua implementao pode ser PlasticWidget, SteelWidget e SmallWidget.

Para obter mais informaes sobre interfaces, consulte Captulo 9, Interfaces..

Atribuindo nomes a pacotes


Em nomes de pacotes, comum usar a conveno de atribuio de nome domnio reverso. Exemplos de nomes de domnio reverso incluem com.macromedia para macromedia.com e org.yourdomain para yourdomain.org. Use as seguintes diretrizes ao atribuir nomes a pacotes:

Coloque todo o prefixo do nome do pacote em letras minsculas.

Convenes de atribuio de nome

777

Por exemplo, com, mx ou org.


Coloque classes relacionadas (classes com funcionalidade relacionada) no mesmo pacote. Comece os nomes de pacotes com um prefixo consistente. Por exemplo, voc pode usar com.macromedia.projectName para manter a consistncia. Outro exemplo seria com.macromedia.docs.learnAS2.Users para o manual Learning ActionScript 2.0 Reference.

Use um nome de pacote claro e auto-explicativo. importante explicar as responsabilidades do pacote. Por exemplo, voc pode ter um pacote com o nome Pentagons, que seja responsvel pelo uso da API de desenho Flash para desenhar vrios tipos de pentgonos nos exemplos da documentao; seu nome seria com.macromedia.docs.as2.Pentagons.

Use maisculas/minsculas para nomes de pacotes compostos ou concatenados.


packageName um exemplo de nome de pacote composto ou concatenado. Lembre-se de usar somente minsculas para o prefixo (com, org etc.).

No use sublinhados nem caracteres de cifro.

Atribuindo nomes a interfaces


Iniciar o nome de uma interface com um I maisculo ajuda a diferenci-la de uma classe. O seguinte nome de interface, IEmployeeRecords, usa uma letra maiscula inicial e palavras concatenadas com maisculas/minsculas da seguinte maneira:
interface IEmployeeRecords{}

As seguintes convenes tambm se aplicam:

Os nomes de interfaces apresentam a primeira letra maiscula. O mesmo ocorre com os nomes de classes. Em geral, os nomes de interfaces so adjetivos.
Printable

um bom exemplo.

Para obter mais informaes sobre interfaces, consulte Captulo 9, Interfaces..

Atribuio de nomes a componentes personalizados


Os nomes de componente tm uma primeira letra maiscula e as palavras concatenadas so escritas com maisculas/minsculas. Por exemplo, o seguinte conjunto de componentes de interface de usurio padro usa palavras concatenadas e maisculas/minsculas:

CheckBox (Caixa de seleo) ComboBox (Caixa de combinao)

778

Melhores prticas e convenes de codificao para ActionScript 2.0

DataGrid (Grade de dados) DateChooser (Selecionador de data) DateField (Campo de data) MenuBar (Barra de menus) NumericStepper (Mostrador numrico) ProgressBar (Barra de andamento) RadioButton (Boto de opo) ScrollPane (Painel de rolagem) TextArea (rea de texto) TextInput (Entrada de texto)

Os componentes de no usam palavras concatenadas comeam com letra maiscula. Se voc desenvolver componentes personalizados, use uma conveno de atribuio de nome para evitar incompatibilidades de nomes em componentes Macromedia. Os nomes dos componentes devem ser diferentes do conjunto padro includo no Flash. Se voc adotar sua prpria conveno consistente de atribuio de nome, evitar conflitos de nomes. Lembre-se de que as convenes de atribuio de nome desta seo so diretrizes. mais importante usar um esquema de atribuio de nome que funcione bem e voc deve us-lo de maneira consistente.

Usando de comentrios no cdigo


Esta seo descreve como usar comentrios no cdigo. Os comentrios documentam as decises tomadas em relao ao cdigo, respondendo s perguntas como e por qu. Por exemplo, voc pode descrever uma soluo alternativa em comentrios. Outro desenvolvedor poderia conseguir encontrar o cdigo relacionado para atualizao ou correo. Por fim, o problema poderia ser solucionado em uma verso futura do Flash ou Flash Player e, portanto, a soluo alternativa no seria mais necessria. Para obter mais informaes sobre como escrever comentrios no cdigo ActionScript, consulte as seguintes sees:

Criando comentrios adequados na pgina 780 Adio de comentrios a classes na pgina 781

Usando de comentrios no cdigo

779

Criando comentrios adequados


O uso de comentrios de forma consistente no ActionScript 2.0 permite descrever reas de cdigo complexas ou interaes importantes que, de outro modo, no esto claras. Os comentrios devem explicar claramente a inteno do cdigo e no apenas traduzi-lo. Se houver algo que no for muito bvio no cdigo, adicione comentrios a ele. Se voc usar a ferramenta Auto Format (Formatao automtica) no cdigo, perceber que os comentrios finais (consulte Comentrios finais na pgina 142) passaro para a linha seguinte. Voc pode adicionar esses comentrios aps formatar o cdigo ou deve modificar o novo posicionamento do comentrio aps usar a ferramenta Auto Format. Para obter informaes sobre como usar comentrios em classes, consulte Adio de comentrios a classes na pgina 781. Use as seguintes diretrizes ao adicionar comentrios ao cdigo:

Use blocos de comentrios (/* e */) para comentrios com vrias linhas e uma nica linha ( // ) para comentrios pequenos. Tambm possvel usar um comentrio final na mesma linha que o cdigo ActionScript, caso necessrio.

No use comentrios para traduzir o cdigo ActionScript. No necessrio comentar os elementos bvios no cdigo ActionScript. Comente os elementos que no forem bvios no cdigo. Em particular, adicione comentrios quando o assunto no for descrito nos pargrafos prximos.

No use comentrios desordenados. Uma linha de comentrios desordenados freqentemente contm sinais de igualdade (=) ou asteriscos (*). Em vez disso, use espaos em branco para separar os comentrios do cdigo ActionScript.
N OT A

Se voc usar a ferramenta Auto Format para formatar o ActionScript, remover o espao em branco. Lembre-se de adicion-lo de volta ou usar linhas de comentrio nicas (//) para manter o espaamento. Essas linhas podem ser removidas facilmente aps a formatao do cdigo.

Remova os comentrios desnecessrios do cdigo, antes de implantar o projeto.

780

Melhores prticas e convenes de codificao para ActionScript 2.0

Se voc achar que h comentrios demais no cdigo ActionScript, analise a possibilidade de reescrever uma parte dele. Se voc sentir que deve incluir muitos comentrios sobre o funcionamento do cdigo ActionScript, normalmente ser um sinal de que o cdigo foi mal-escrito.
NO TA NO TA N O TA

O uso de comentrios no cdigo ActionScript mais importante quando este tem fins didticos. Por exemplo, adicione comentrios ao cdigo se voc estiver criando aplicativos de exemplo destinados a ensinar o Flash, ou se estiver criando tutoriais sobre o cdigo ActionScript.

Adio de comentrios a classes


Os dois tipos de comentrios em um arquivo de classe ou interface tpico so comentrios de documentao e comentrios de implementao.
Os comentrios de documentao e implementao no so representados formalmente na linguagem ActionScript. No entanto, em geral so usados pelos desenvolvedores ao escreverem arquivos de classe e interface.

Use comentrios de documentao para descrever as especificaes do cdigo, mas no a implementao. Use comentrios de implementao para fazer comentrios sobre o cdigo ou sobre a implementao de sees especficas do cdigo. Os comentrios de documentao so delimitados por /** e */, e os comentrios de implementao so delimitados por /* e */. Use os comentrios de documentao para descrever interfaces, classes, mtodos e construes. Inclua um comentrio de documentao para cada classe, interface ou membro e coloque-o diretamente antes da declarao. Se houver informaes adicionais para documentar que no se ajustem aos comentrios de documentao, use comentrios de implementao (no formato de bloco de comentrios ou em comentrios de linha nica). As classes devem iniciar com um comentrio padro, no seguinte formato:
/** Classe de usurio verso 1.2 3/21/2004 copyright Macromedia, Inc. */

Aps os comentrios de documentao, declare a classe. Os comentrios de implementao deve seguir diretamente a declarao.
No inclua comentrios que no se relacionem diretamente classe que est sendo lida. Por exemplo, no inclua comentrios que descrevam o pacote correspondente.

Usando de comentrios no cdigo

781

Use comentrios em bloco, de linha nica ou finais no corpo da classe para fazer comentrios sobre o cdigo ActionScript. Para obter mais informaes sobre como usar comentrios em arquivos de classes, consulte Adio de comentrios a classes na pgina 781.

Convenes de codificao do ActionScript


Um dos aspectos mais importantes sobre programao a consistncia, seja ela relacionada aos esquema de atribuio de nome de variveis (abordado em Convenes de atribuio de nome na pgina 769), formatao de cdigo (abordada em Formatando a sintaxe do ActionScript na pgina 799) ou ao padres de codificao e ao posicionamento do cdigo your ActionScript 2.0, que abordado nesta seo. Se o cdigo for organizado e obedecer a padres, ser possvel simplificar significativamente a depurao e a manuteno do mesmo. Para obter mais informaes sobre convenes de codificao, consulte os seguintes tpicos:

Manuteno do cdigo ActionScript em um nico local na pgina 782 Anexando cdigo a objetos na pgina 783 Manipulao do escopo na pgina 784 Estruturando um arquivo de classes na pgina 788 Sobre o uso de funes na pgina 795

Manuteno do cdigo ActionScript em um nico local


Sempre que possvel, voc deve colocar o cdigo ActionScript 2.0 em um nico local, como em um ou mais arquivos externos do ActionScript ou no Quadro 1 da Timeline (quando colocado na Timeline, o cdigo conhecido como script de quadro). Se voc colocar o cdigo ActionScript em um script de quadro, coloque-o no primeiro ou segundo quadro da Timeline, em uma camada chamada Actions, que a primeira ou segunda camada da Timeline. s vezes, voc pode criar duas camadas (uma prtica aceitvel) para o ActionScript a fim de separar as funes. Alguns aplicativos Flash nem sempre colocam todo o cdigo em um nico lugar (em especial, quando voc usa telas ou comportamentos). Apesar dessas raras excees, normalmente possvel colocar todo o cdigo no mesmo local. Veja a seguir as vantagens de colocar o ActionScript em um nico local:

O cdigo pode ser encontrado facilmente em um arquivo de origem potencialmente complexo.

782

Melhores prticas e convenes de codificao para ActionScript 2.0

A depurao do cdigo fcil.

Uma das partes mais difceis da depurao de um arquivo FLA a localizao de todo o cdigo. Depois de localizar todo o cdigo, voc deve descobrir como ele interage com outras partes do cdigo juntamente como o arquivo FLA. Se voc colocar o cdigo em um nico quadro, a depurao ser mais fcil porque ser centralizada, e esses problemas ocorrem com menos freqncia. Para obter informaes sobre com anexar cdigo a objetos (e descentralizar o cdigo), consulte Anexando cdigo a objetos na pgina 783. Para obter informaes sobre comportamentos e cdigo descentralizado, consulte Captulo 3, Melhores prticas para usar comportamentos em Usando o Flash.

Anexando cdigo a objetos


Voc deve evitar a anexao do cdigo ActionScript a objetos (como instncias de botes e de clipes de filme) em um arquivo FLA, mesmo em aplicativos simples e de prottipo. A anexao de cdigo a um objeto significa selecionar uma instncia de clipe de filme, componente ou boto, abrir o editor do ActionScript (painel Actions (Aes) ou janela Script) e adicionar o cdigo ActionScript usando as funes manipuladoras on() ou onClipEvent(). Essa prtica desaconselhvel pelas seguintes razes:

O cdigo ActionScript anexado a objetos so difceis de localizar, ao passo que os arquivos FLA so difceis de editar. O cdigo ActionScript anexado a objetos difcil de depurar. O cdigo ActionScript escrito na Timeline ou em classes mais elegante e mais fcil de criar. O cdigo ActionScript anexado a objetos piora o estilo de codificao. O cdigo ActionScript anexado a objetos fora alunos e leitores a aprender sintaxes adicionais, bem como vrios estilos de codificao que geralmente so inadequados e limitados. Em geral, os usurios tm que reaprender a escrever funes e assim por diante, em uma Timeline posteriormente.

Convenes de codificao do ActionScript

783

Alguns usurios de Flash falam que mais fcil aprender o ActionScript anexando o cdigo a um objeto. Outros dizem que pode ser mais fcil adicionar um cdigo simples ou ensinar o ActionScript ou escrever sobre ele dessa maneira. No entanto, o contraste entre os dois estilos de codificao (cdigo colocado em objetos e scripts de quadro) pode ser confuso para os desenvolvedores aprendendo o ActionScript e deve ser evitado. Alm disso, os usurios que sabem escrever cdigo anexado aos objetos com freqncia tm que reaprender a colocar o cdigo equivalente como script de quadro posteriormente. por isso que a consistncia em todo o processo de aprendizado, por exemplo, aprendendo-se a escrever scripts de quadros, tem suas vantagens. O processo para anexao do cdigo ActionScript a um boto chamado myBtn seria semelhante ao mostrado a seguir. Evite este mtodo:
on (release) { // Do something. }

No entanto, a colocao do cdigo ActionScript equivalente em uma Timeline seria semelhante ao seguinte:
// good code myBtn.onRelease = function() { // Do something. };

Para obter mais informaes sobre a sintaxe do ActionScript, consulte Formatando a sintaxe do ActionScript na pgina 799
N OT A 784

s vezes, o uso de comportamentos e telas envolve a anexao de cdigos a objetos e, portanto, diversas prticas se aplicam quando esses recursos so usados. Para obter mais informaes, consulte Captulo 3, Melhores prticas para usar comportamentos em Usando o Flash.

Manipulao do escopo
O escopo a rea em que a varivel conhecida e pode ser usada em um arquivo SWF, como na Timeline, globalmente em todo um aplicativo ou localmente em uma funo. Em geral, possvel referenciar o escopo de mais de uma forma quando voc escreve cdigo. O uso correto do escopo significa que voc pode criar o cdigo ActionScript de forma mvel e reutilizvel, e no necessrio correr o risco de dividir os aplicativos durante a criao de novos mdulos.

Melhores prticas e convenes de codificao para ActionScript 2.0

importante compreender a diferena entre os escopos raiz e global. O escopo raiz exclusivo para cada arquivo SWF carregado. O escopo global aplica-se a todos os escopos e Timelines dos arquivos SWF. Use o endereamento relativo em vez de referncia a Timelines raiz, pois o endereamento relativo torna o cdigo reutitlizvel e mvel. Para obter mais informaes sobre como manipular o escopo em seus aplicativos, consulte estas sees: Sobre variveis e escopo na pgina 101 Sobre escopo e referncia na pgina 130 Noes bsicas sobre classes e escopo na pgina 299.

Evitando o uso de destinos absolutos (_root)


H vrias maneiras de direcionar instncias que permitem evitar o uso de _root; esses mtodos sero abordados posteriormente nesta seo. Evite usar _root no ActionScript 2.0, pois os arquivos SWF carregados em outros arquivos SWF podem no funcionar corretamente. O identificador _root direciona o arquivo SWF de base que est sendo carregado, e no o arquivo SWF que usa o endereamento relativo em vez de _root. Esse problema limita a portabilidade do cdigo nos arquivos SWF carregados em outros arquivo, em especialmente, em componentes e clipes de filme. Voc pode ajudar a solucionar o problema usando _lockroot, mas somente use _lockroot quando necessrio (por exemplo, ao carregar um arquivo SWF sem ter acesso ao arquivo FLA). Para obter informaes sobre como usar _lockroot, consulte Usando _lockroot na pgina 786. Use a palavra-chave this, this._parent, ou _parent em vez de _root, dependendo de onde esteja localizado o cdigo ActionScript 2.0. Este exemplo mostra o endereamento relativo:
myClip.onRelease = function() { trace(this._parent.myButton._x); };

necessrio definir o escopo de todas as variveis, exceto as que forem parmetros de funo e variveis locais. Sempre que possvel, defina o escopo das variveis em relao a seu caminho atual, usando o endereamento relativo, como a propriedade this. Para obter mais informaes sobre como usar a propriedade this, consulte %{this property}% em ActionScript 2.0 Language Reference.

Convenes de codificao do ActionScript

785

Usando _lockroot
Voc pode usar _lockroot para direcionar o contedo como uma maneira de solucionar os problemas de escopo eventualmente associados ao uso inadequado de _root. Embora isso resolva muitos problemas com aplicativos, considere _lockroot como uma soluo alternativa para os problemas causados pelo uso de _root. Se voc tiver problemas para carregar o contedo em um arquivo SWF ou em uma instncia de componente, tente aplicar _lockroot a um clipe de filme que carregue o contedo. Por exemplo, se voc tiver um clipe de filme chamado myClip que carregue contedo, e ele parar de funcionar aps ser carregado, tente usar o seguinte cdigo, que colocado em uma Timeline:
this._lockroot = true;

Uso da palavra-chave this


Sempre que possvel, use a palavra-chave this como prefixo em vez de omiti-la, mesmo que seu cdigo funcione sem ela. Use a palavra-chave this para saber quando um mtodo ou uma propriedade pertence a uma classe especfica. Por exemplo, para uma funo em uma Timeline, escreva o cdigo ActionScript 2.0 usando o seguinte formato:
circleClip.onPress = function() { this.startDrag(); }; circleClip.onRelease = function() { this.stopDrag(); };

Para uma classe, escreva o cdigo usando o seguinte formato:


class User { private var username:String; private var password:String; function User(username:String, password:String) { this.username = username; this.password = password; } public function get username():String { return this.username; } public function set username(username:String):Void { this.username = username; } }

Se voc adicionar a palavra-chave this nessas situaes, o cdigo ActionScript 2.0 ser muito mais fcil de ler e compreender.

786

Melhores prticas e convenes de codificao para ActionScript 2.0

Sobre o escopo em classes


Ao transportar o cdigo para as classes do ActionScript 2.0, classes, talvez voc precise alterar a maneira como usa a palavra-chave this. Por exemplo, se houver um mtodo de classe que use uma funo de retorno de chamada (como o mtodo onLoad da classe LoadVars), poder ser difcil saber se a palavra-chave this refere-se classe do objeto LoadVars. Nessa situao, talvez seja necessrio criar um ponteiro para a classe atual, como mostra o seguinte exemplo:
class Product { private var m_products_xml:XML; // Constructor // targetXmlStr contains the path to an XML file function Product(targetXmlStr:String) { /* Create a local reference to the current class. Even if you are within the XML's onLoad event handler, you can reference the current class instead of only the XML packet. */ var thisObj:Product = this; // Create a local variable, which is used to load the XML file. var prodXml:XML = new XML(); prodXml.ignoreWhite = true; prodXml.onLoad = function(success:Boolean) { if (success) { /* If the XML successfully loads and parses, set the class's m_products_xml variable to the parsed XML document and call the init function. */ thisObj.m_products_xml = this; thisObj.init(); } else { /* There was an error loading the XML file. */ trace("error loading XML"); } }; // Begin loading the XML document prodXml.load(targetXmlStr); } public function init():Void { // Display the XML packet trace(this.m_products_xml); } }

Como voc est tentando fazer referncia varivel membro privada em um manipulador onLoad, a palavra-chave this realmente se refere instncia prodXml e no classe Product esperada. Por isso, voc deve criar um ponteiro para o arquivo de classes local para que possa fazer referncia direta classe do manipulador onLoad. Para obter mais informaes sobre classes, consulte Noes bsicas sobre classes e escopo na pgina 299. Para obter mais informaes sobre escopo, consulte Manipulao do escopo na pgina 784.

Convenes de codificao do ActionScript

787

Estruturando um arquivo de classes


Crie classes em arquivos ActionScript 2.0 separados, que so importados para um arquivo SWF quando ele compilado. Crie classes em arquivos ActionScript 2.0 separados, que so importados para um arquivo SWF quando um aplicativo compilado. Para criar um arquivo de classes, escreva o cdigo com determinada metodologia e ordenamento. Essa metodologia abordada nas prximas sees. As convenes indicadas a seguir, usadas para a estruturao de um arquivo de classes, mostram como voc pode ordenar partes de uma classe para aumentar a eficincia e melhorar a legibilidade de seu cdigo.
Para estruturar um arquivo de classe, use os seguintes elementos:
1.

Adicione comentrios de documentao que incluam uma descrio geral do cdigo, alm de informaes sobre o autor e a verso. Adicione suas instrues de importao (se aplicvel). Escreva uma declarao de classe ou declarao de interface, da seguinte maneira:
UserClass{...}

2. 3.

4.

Inclua os comentrios necessrios sobre a implementao de classe ou interface. Nesse comentrio, adicione informaes pertinentes toda classe ou interface. Adicione todas as variveis estticas. Escreva as variveis de classe pblica primeiro, seguidas de variveis de classe privada. Adicione variveis de instncia. Escreva primeiro as variveis membro pblicas, seguidas das variveis membro privadas. Adicione a instruo construtora, como a do exemplo abaixo:
public function UserClass(username:String, password:String) {...}

5.

6.

7.

8.

Escreva os mtodos. Agrupe-os por funcionalidade, e no por acessibilidade ou escopo. A organizao dos mtodos dessa maneira ajuda a melhorar a legibilidade e clareza do cdigo.

9.

Escreva os mtodos getter/setter no arquivo de classe.

Diretrizes para a criao de uma classe


Lembre-se das seguintes diretrizes ao criar um arquivo de classe:

Coloque apenas uma declarao em cada linha No coloque vrias declaraes em uma nica linha.

788

Melhores prticas e convenes de codificao para ActionScript 2.0

Por exemplo, formate as declaraes conforme mostrado a seguir:


var prodSkuNum:Number; // Product SKU (identifying) number var prodQuantityNum:Number; // Quantity of product

Esse exemplo mostra uma forma melhor do que colocar as duas declaraes na mesma linha. Coloque essas declaraes no incio de um bloco de cdigo.

Inicialize as variveis locais ao declar-las. As propriedades de uma classe somente devero ser inicializadas na declarao se o inicializador for uma constante de tempo de compilao.

Declare as variveis antes de utiliz-las. Isso inclui os loops. Evite usar declaraes locais que ocultem declaraes de nvel superior. Por exemplo, no declare uma varivel duas vezes, como mostra o seguinte exemplo:
var counterNum:Number = 0; function myMethod() { for (var counterNum:Number = 0; counterNum<=4; counterNum++) { // statements; } }

Esse cdigo declara a mesma varivel dentro de um bloco interno, e essa a prtica que voc deve evitar.

No atribua muitas variveis a um nico valor em uma instruo. Siga essa conveno porque, caso contrrio, o cdigo ser difcil de ler, como mostra o cdigo ActionScript a seguir:
playBtn.onRelease = playBtn.onRollOut = playsound;

ou
class User { private var m_username:String, m_password:String; }

Somente torne pblicos um mtodo ou propriedade se isso for necessrio por algum motivo. Caso contrrio, deixe seus mtodos e propriedades privados. No utilize em excesso as funes getter/setter no arquivo de classe. As funes getter/setter so excelentes para vrias finalidades (consulte Sobre os mtodos getter e setter na pgina 270), no entanto, seu uso excessivo pode indicar que voc poderia melhorar a arquitetura ou a organizao do aplicativo.

Convenes de codificao do ActionScript

789

Defina a maioria das variveis de membro como privadas a menos que haja um bom motivo para torn-las pblicas. Do ponto de vista do design, prefervel tornar as variveis de membro privadas e permitir o acesso a essas variveis somente por meio de um pequeno grupo de funes getter/setter.

Usando este prefixo em arquivos de classe


Use a palavra-chave this como prefixo nas suas classes para mtodos e variveis membro. Embora isso no seja necessrio, mais fcil saber se uma propriedade ou um mtodo pertence a uma classe quando ele tem um prefixo; sem ele, no h como saber se a propriedade ou o mtodo pertence superclasse. Voc tambm pode usar um prefixo de nome de classe para variveis e mtodos, mesmo dentro de uma classe. Isso ajuda a qualificar as referncias feitas por voc. A qualificao de referncia torna o cdigo legvel. Dependendo do ambiente de codificao que voc est usando, os prefixos tambm podem ativar a referncia e a concluso do cdigo. O cdigo a seguir demonstra o prefixo de uma propriedade esttica com um nome de classe:
class Widget { public static var widgetCount:Number = 0; public function Widget() { Widget.widgetCount++; } }
N OT A 790

Voc no precisa adicionar esses prefixos, e alguns desenvolvedores acham que isso desnecessrio. A Macromedia recomenda adicionar a palavra-chave this como prefixo, pois ela pode melhorar a legibilidade e ajudar a escrever um cdigo limpo, fornecendo contexto.

Sobre a inicializao
Para os valores iniciais de variveis, atribua um valor padro ou permita o valor undefined, como mostra o seguinte exemplo de classe. Quando voc inicializa as propriedades inline, a expresso direita de uma atribuio deve ser uma constante de tempo de compilao. Ou seja, a expresso no pode se referir a algo definido durante a execuo. As constantes de tempo de compilao incluem literais de seqncia de caracteres, nmeros, valores booleanos, null e undefined, bem como funes construtoras para as seguintes classes de nvel 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) {

Melhores prticas e convenes de codificao para ActionScript 2.0

this.m_username = username; this.m_password = password; } }

Exclua variveis ou torne-as null quando no precisar mais delas. A definio de variveis como null ainda pode aumentar o desempenho. Esse processo normalmente chamado coleta de lixo. A excluso de variveis ajuda a otimizar o uso da memria durante o tempo de execuo, pois recursos desnecessrios so removidos do arquivo SWF. melhor excluir variveis do que defini-las como null. Para obter mais informaes sobre variveis, consulte Otimizando o cdigo na pgina 798.
NO TA

O Flash Player 8 aperfeioou a coleta de lixo no Flash Player.

Para obter informaes sobre a atribuio de nomes a variveis, consulte Atribuio de nome a variveis na pgina 772. Para obter mais informaes sobre como excluir objetos, consulte %{delete statement}% em ActionScript 2.0 Language Reference. O uso de classes uma das maneiras mais fceis de inicializar o cdigo usando o ActionScript 2.0. Voc pode encapsular toda a inicializao de uma instncia na funo construtora da classe ou abstra-la para um mtodo separado, que chamaria explicitamente aps a criao da varivel, como mostra o seguinte cdigo:
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 cdigo a seguir poderia ser a primeira chamada de funo no aplicativo, e o nico criado para a inicializao. O Quadro 1 de um arquivo FLA que est carregando o XML pode usar um cdigo semelhante ao seguinte ActionScript:
if (init == undefined) { var prodXml:XML = new XML(); prodXml.ignoreWhite = true; prodXml.onLoad = function(success:Boolean) { if (success) {

Convenes de codificao do ActionScript

791

trace("loaded"); } else { trace("error loading XML"); } }; prodXml.load("products.xml"); init = true; }

Usar instrues trace


Use as instrues trace nos documentos para ajud-lo a depurar o cdigo durante a criao do arquivo FLA. Por exemplo, usando a instruo trace e o loop for, voc pode ver os valores das variveis no painel Output (Sada), como seqncias de caracteres, arrays e objetos, como mostra o seguinte exemplo:
var dayArr:Array = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"]; var numOfDays:Number = dayArr.length; for (var i = 0; i<numOfDays; i++) { trace(i+": "+dayArr[i]); }

Isto exibe as seguintes informaes no painel Output:


0: 1: 2: 3: 4: 5: 6: sun mon tue wed thu fri sat

O uso de uma instruo trace uma maneira eficiente de depurar o ActionScript 2.0. Voc pode remover as instrues trace ao publicar um arquivo SWF, o que significa uma pequeno aumento no desempenho da reproduo. Antes de publicar um arquivo SWF, abra Publish Settings (Configuraes de publicao) e selecione Omit Trace Actions (Omitir aes Trace) na guia Flash. Para obter mais informaes sobre como usar trace, consulte %{trace function}% em ActionScript 2.0 Language Reference. A ferramenta Debugger tambm til para a depurao do cdigo ActionScript. Para obter mais informaes, consulte Captulo 18, Depurando aplicativos..

Sobre o prefixo super


Se voc fizer referncia a um mtodo na classe pai, adicione o prefixo super ao mtodo, de modo que outros desenvolvedores saibam de onde o mtodo chamado. O seguinte trecho do ActionScript 2.0 demonstra o ouso do escopo adequado por meio do prefixo super:

792

Melhores prticas e convenes de codificao para ActionScript 2.0

No exemplo a seguir, possvel criar duas classes. Use a palavra-chave super na classe Socks para chamar funes na classe pai (Clothes). Embora as classes Socks e Clothes tenham um mtodo denominado getColor(), o uso de super permite referenciar especificamente os mtodos e as propriedades da classe de base. Crie um novo arquivo AS denominado Clothes.as e insira o seguinte cdigo:
class Clothes { private var color:String; function Clothes(paramColor) { this.color = paramColor; trace("[Clothes] I am the constructor"); } function getColor():String { trace("[Clothes] I am getColor"); return this.color; } function setColor(paramColor:String):Void { this.color = paramColor; trace("[Clothes] I am setColor"); } }

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"); } }

Em seguida, crie um novo arquivo AS ou FLA e insira o seguinte ActionScript no documento:


import Socks; var mySock:Socks = new Socks("maroon"); trace(" -> "+mySock.getColor()); mySock.setColor("Orange"); trace(" -> "+mySock.getColor());

Convenes de codificao do ActionScript

793

O seguinte resultado exibido no painel Output:


[Clothes] [Socks] I [Socks] I [Clothes] -> maroon [Socks] I [Socks] I [Clothes] -> Orange I am the constructor am the constructor am getColor I am getColor am setColor am getColor I am getColor

Se voc esqueceu de colocar a palavra-chave super no mtodo getColor() da classe Socks, o mtodo getColor() poder se chamar repetidamente, o que causar a falha do script to devido a problemas de recorrncia infinita. O painel Output exibir o seguinte erro se voc no usar a palavra-chave super:
[Socks] I am getColor [Socks] I am getColor ... [Socks] I am getColor 256 levels of recursion were exceeded in one action list. This is probably an infinite loop. Further execution of actions has been disabled in this SWF file.

Evitar a instruo with


O uso da instruo with um dos conceitos mais confusos a serem compreendidos pelas pessoas que esto aprendendo o ActionScript 2.0. Considere o seguinte cdigo que usa a instruo with:
this.attachMovie("circleClip", "circle1Clip", 1); with (circle1Clip) { _x = 20; _y = Math.round(Math.random()*20); _alpha = 15; createTextField("labelTxt", 100, 0, 20, 100, 22); labelTxt.text = "Circle 1"; someVariable = true; }

Neste cdigo, voc anexa uma instncia de clipe de filme da biblioteca e modifica suas propriedades usando a instruo with. Quando no especifica o escopo de uma varivel, voc nem sempre sabe onde est definindo as propriedades; portanto, seu cdigo pode fica confuso. No cdigo anterior, voc poderia esperar que someVariable fosse definido no clipe de filme circle1Clip, mas na verdade, foi definido na Timeline principal do arquivo SWF.

794

Melhores prticas e convenes de codificao para ActionScript 2.0

Ser mais fcil acompanhar o que est acontecendo no seu cdigo se voc especificar explicitamente o escopo das variveis, em vez de utilizar a instruo with. O exemplo a seguir mostra um melhor exemplo do ActionScript, embora um pouco mais longo, que especifica o escopo da varivel.
this.attachMovie("circleClip", "circle1Clip", 1); circle1Clip._x = 20; circle1Clip._y = Math.round(Math.random()*20); circle1Clip._alpha = 15; circle1Clip.createTextField("labelTxt", 100, 0, 20, 100, 22); circle1Clip.labelTxt.text = "Circle 1"; circle1Clip.someVariable = true;

Uma exceo a essa regra que quando est trabalhando com uma API de desenho para desenhar formas, voc pode ter vrias chamadas semelhantes para os mesmos mtodos (como lineTo ou curveTo) em virtude da funcionalidade da API do desenho. Por exemplo, ao desenhar um retngulo simples, voc precisa de quatro chamadas separadas para o mtodo lineTo, como mostra o seguinte cdigo:
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 mtodo lineTo ou curveTo com um nome de instncia totalmente qualificado, o cdigo se tornar desordenado rapidamente, dificultando a leitura e depurao.

Sobre o uso de funes


Reutilize blocos de cdigo sempre que possvel. Uma maneira de reutilizar o cdigo consiste em chamar uma funo vrias vezes, em vez de criar um cdigo diferente a cada momento. As funes podem ser trechos genricos de cdigo; portanto, voc pode usar os mesmos blocos de cdigo para fins um pouco diferente em um arquivo SWF. A reutilizao do cdigo permite criar aplicativos eficientes e minimizar o cdigo AtionScript 2.0 a ser escrito, o que reduz o tempo de desenvolvimento. Voc pode criar funes em uma Timeline, em um arquivo de classe ou escrever ActionScript que resida em um componente baseado em cdigo e reutilizlo de diversas formas.

Convenes de codificao do ActionScript

795

Se voc estiver usando o ActionScript 2.0, evite escrever funes em uma Timeline. Ao usar o ActionScript 2.0, coloque as funes em arquivos de classes sempre que possvel, como mostra o seguinte 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); } }

Use esta sintaxe para criar funes:


function myCircle(radius:Number):Number { //... }

Evite usar a seguinte sintaxe, que difcil de ler:


myCircle = function(radius:Number):Number { //... }

O exemplo a seguir coloca as funes em um arquivo de classes. Essa a melhor prtica quando voc opta por usar o ActionScript 2.0, pois ela aumenta a capacidade de reutilizao do cdigo. Para reutilizar as funes em outros aplicativos, voc pode importar a classe existente em vez de reescrever o cdigo desde o incio. Tambm possvel duplicar as funes no novo aplicativo.
class mx.site.Utils { static function randomRange(min:Number, max:Number):Number { if (min>max) { var temp:Number = min; min = max; max = temp; } return (Math.floor(Math.random()*(max-min+1))+min); } static function arrayMin(numArr:Array):Number { if (numArr.length == 0) { return Number.NaN; } numArr.sort(Array.NUMERIC | Array.DESCENDING); var min:Number = Number(numArr.pop()); return min; }

796

Melhores prticas e convenes de codificao para ActionScript 2.0

static function arrayMax(numArr:Array):Number { if (numArr.length == 0) { return undefined; } numArr.sort(Array.NUMERIC); var max:Number = Number(numArr.pop()); return max; } }

Voc pode usar essas funes adicionando o seguinte cdigo 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);

Sobre como interromper a repetio do cdigo


O manipulador de eventos onEnterFrame til porque o Flash pode us-lo para repetir o cdigo na taxa de quadros de um arquivo SWF. Contudo, limite o mximo possvel a repetio usada em um arquivo do Flash de modo que o desempenho no seja prejudicado. Por exemplo, se houver um cdigo que seja repetido sempre que a reproduo entra em um quadro, o processador ficar sobrecarregado. Esse comportamento poder causar problemas de desempenho em computadores que executam o arquivo SWF. Se voc usar o manipulador de eventos onEnterFrame para qualquer tido de animao ou repetio nos arquivos SWF, exclua o manipulador onEnterFrame quando terminar de us-lo. No cdigo ActionScript 2.0 a seguir, interrompa a repetio excluindo o manipulador de eventos onEnterFrame:
circleClip.onEnterFrame = function() { circleClip._alpha -= 5; if (circleClip._alpha<=0) { circleClip.unloadMovie(); delete this.onEnterFrame; trace("deleted onEnterFrame"); } };

Da mesma forma, limite o uso de setInterval e lembre-se de limpar o intervalo quando terminar de us-lo a fim de reduzir os requisitos de processador do arquivo SWF.

Convenes de codificao do ActionScript

797

Otimizao do ActionScript e do Flash Player


Se voc compilar um arquivo SWF que contenha o ActionScript 2.0 com as configuraes de publicao definidas para o Flash Player 6 e o ActionScript 1,0, o cdigo funcionar desde que no use classes do ActionScript 2.0. No h distino entre maisculas e minsculas em relao ao cdigo, somente com o Flash Player. Portanto, se voc compilar o arquivo SWF com a opo Publish Settings (Configuraes de publicao) definidas para o Flash Player 7 ou 8 e o ActionScript 1.0, a distino entre maisculas e minsculas ser imposta pelo Flash. As anotaes de tipos de dados (tipos de dados estritos) so impostas em tempo de compilao para o Flash Player 7 e 8 quando h configuraes de publicao definidas para o ActionScript 2.0. O ActionScript 2.0 compila para o cdigo de bytes ActionScript 1.0 quando voc publica seus aplicativos, portanto, possvel ter como objetivo o Flash Player 6, 7 ou 8 ao trabalhar com o ActionScript 2.0. Para obter mais informaes sobre como otimizar os aplicativos, consulte Otimizando o cdigo.

Otimizando o cdigo
Lembre-se das seguintes diretrizes ao otimizar o cdigo:

Evite chamar uma funo vrias vezes de dentro de um loop. melhor incluir o contedo de uma pequena funo dentro do loop. Use funes nativas quando possvel. Elas so mais rpidas do que as funes definidas pelo usurio. No use o tipo Object (Objeto) demais. As anotaes de tipo de dados devem ser precisas, porque isso melhora o desempenho. Use o tipo Object somente quando no houver uma alternativa razovel.

Evite usar a funo eval() ou o operador de acesso de array. Com freqncia, prefervel e mais eficiente definir a referncia local uma vez. Atribua Array.length a uma varivel antes de um loop. Atribua Array.length a uma varivel antes de um loop para usar como sua condio, 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++) {

798

Melhores prticas e convenes de codificao para ActionScript 2.0

trace(fontArr[i]); }

em vez de:
var fontArr:Array = TextField.getFontList(); for (var i:Number = 0; i < fontArr.length; i++) { trace(fontArr[i]); }

Enfatizar a otimizao de loops e qualquer ao repetida. O Flash Player envia vrios loops de processamento (como aqueles que usam a funo setInterval()).

Adicione a palavra-chave var ao declarar uma varivel No use variveis de classe nem variveis globais quando variveis locais forem suficientes

Formatando a sintaxe do ActionScript


A formatao do cdigo ActionScript 2.0 de uma maneira padronizada essencial para escrever upm cdigo que possa ser mantido, alm de ser mais fcil para que outros desenvolvedores possam entend-lo e modific-lo. Por exemplo, seria extremamente difcil seguir a lgica de um arquivo FLA que no tenha recuo nem comentrios, bem como convenes de atribuio de nome e formatao inconsistentes. Recuando blocos de cdigo (como loops e instrues if ), voc facilita a leitura e depurao do cdigo. Para obter mais informaes sobre como formatar o cdigo, consulte os seguintes tpicos:

Diretrizes gerais de formatao na pgina 800 Escrevendo instrues condicionais na pgina 802 Escrevendo instrues compostas na pgina 804 Escrevendo uma instruo for na pgina 804 Escrevendo instrues while e do..while na pgina 805 Escrevendo instrues return na pgina 805 Escrevendo instrues switch na pgina 805 Escrevendo instrues try..catch e try..catch..finally na pgina 806 Sobre como usar a sintaxe do ouvinte na pgina 806

Formatando a sintaxe do ActionScript

799

Diretrizes gerais de formatao


Quando usa espaos, quebras de linha e recuos de tabulao para adicionar um espao em branco ao cdigo, voc aumenta a legibilidade do cdigo. Os espaos em branco melhoram a legibilidade porque ajudam a mostrar a hierarquia do cdigo. Facilitar o entendimento do ActionScript 2.0 tornando-o mais legvel importante para todos os alunos e para os usurios experientes trabalhando em projetos complexos. A legibilidade importante durante a depurao do cdigo ActionScript, pois muito mais fcil identificar erros quando o cdigo est formatado e espaado corretamente. Voc pode formatar ou escrever uma parte do cdigo ActionScript 2.0 de vrias maneiras. Voc encontrar diferenas na maneira como a sintaxe formatada em vrias linhas do editor do ActionScript (o painel Actions ou a janela Script), bem como onde voc coloca chaves ({}) ou parnteses [()]). Alm disso, recomenda os seguintes pontos de formatao para ajud-lo a melhorar a legibilidade do cdigo ActionScript.

Coloque uma linha em branco entre os pargrafos (mdulos) do ActionScript. Os pargrafos do cdigo ActionScript so grupos de cdigo relacionado logicamente. A incluso de uma linha em branco entre eles ajuda os usurios a ler o cdigo ActionScript e a entender sua lgica.

Use recuos consistentes no cdigo para ajudar a mostrar a hierarquia da estrutura do cdigo. Use o mesmo estilo de recuo em todo o cdigo ActionScript e alinhe as chaves ({}) adequadamente. Chaves alinhadas melhoram a legibilidade do cdigo. Se a sintaxe do ActionScript estiver correta, o Flash recuar automaticamente o cdigo de forma correta quando voc pressionar Enter (Windows) ou Return (Macintosh). Voc tambm pode clicar no boto Auto Format (Formatao automtica) no editor do ActionScript (o painel Actions ou a janela Script) para recuar o cdigo ActionScript se a sintaxe estiver correta.

Use quebras de linha para facilitar a leitura de instrues complexas. Voc pode formatar algumas instrues, como as condicionais, de vrias maneiras. s vezes, a formatao das instrues em vrias linhas, em vez de em uma nica, facilita a leitura do cdigo.

Inclua um espao aps uma palavra-chave seguida por parnteses [()]. O cdigo ActionScript a seguir mostra um exemplo disso:
do { // something } while (condition);

No coloque um espao entre o nome de um mtodo e os parnteses.

800

Melhores prticas e convenes de codificao para ActionScript 2.0

O cdigo ActionScript a seguir mostra um exemplo disso:


function checkLogin():Boolean { // statements; } checkLogin();

ou
printSize("size is " + foo + "\n");

Coloque um espao depois das vrgulas em uma lista de argumentos. O uso de espaos depois de vrgulas facilita a distino entre as chamadas de mtodos e as palavras-chave, como mostra o exemplo a seguir:
function addItems(item1:Number, item2:Number):Number { return (item1 + item2); } var sum:Number = addItems(1, 3);

Use espaos para separar todos os operadores e seus operandos. O uso de espaos facilita a distino entre as chamadas de mtodos e as palavras-chave, como mostra o exemplo a seguir:
//good var sum:Number = 7 + 3; //bad var sum:Number=7+3;

Uma exceo a essa diretriz e o operador ponto (.).

No coloque espaos entre operadores unrios e seus operandos. Por exemplo, incremento (++) e decremento (--), conforme mostrado no exemplo a seguir:
while (d++ = s++) -2, -1, 0

No coloque espaos aps um parntese de abertura e antes de um parntese de fechamento. O cdigo ActionScript a seguir mostra um exemplo disso:
// bad ( "size is " + foo + "\n" ); //good ("size is " + foo + "\n");

Coloque cada instruo em uma linha separada para aumentar a legibilidade do cdigo ActionScript. O cdigo ActionScript a seguir mostra um exemplo disso:
theNum++; // Correct theOtherNum++; // Correct aNum++; anOtherNum++; // Incorrect

Formatando a sintaxe do ActionScript

801

No incorpore atribuies. s vezes, as instrues incorporadas so usadas para melhorar o desempenho em um arquivo SWF em tempo de execuo, mas o cdigo fica muito mais difcil de ler e depurar. O seguinte cdigo ActionScript mostra um exemplo disso (mas lembre-se de evitar a atribuio de nome de caractere nico no cdigo real):
var myNum:Number = (a = b + c) + d;

Atribua variveis como instrues separadas. O seguinte cdigo ActionScript mostra um exemplo disso (mas lembre-se de evitar a atribuio de nome de caractere nico no cdigo real):
var a:Number = b + c; var myNum:Number = a + d;

Quebre uma linha antes de um operador. Quebre uma linha aps uma vrgula. Alinhe a segunda linha com o incio da expresso na linha de cdigo anterior.
N OT A

Voc pode controlar as configuraes de recuo e recuo automtico selecionando Edit (Editar) > Preferences (Preferncias) no Windows ou Flash > Preferences no Macintosh, e selecionando a guia ActionScript.

Escrevendo instrues condicionais


Use as seguintes diretrizes ao escrever instrues condicionais:

Coloque as condies em linhas separadas nas instrues if, else..if e if..else. Use chaves ({}) para instrues if. Formate as chaves como mostram os seguintes exemplos:
// if statement if (condition) { // statements } // if..else statement if (condition) { // statements } else { // statements } // else..if statement if (condition) { // statements } else if (condition) { // statements

802

Melhores prticas e convenes de codificao para ActionScript 2.0

} else { // statements }

Ao escrever instrues complexas, voc deve usar parnteses [()] para agrupar as condies. Se parnteses no forem usados, voc (ou outras pessoas que estejam usando o cdigo ActionScript 2.0) poder encontrar erros de precedncia de operador. Por exemplo, o cdigo a seguir no usa parnteses ao redor das condies:
if (fruit == apple && veggie == leek) {}

O cdigo a seguir usa um formato adequado, delimitando as instrues entre parnteses:


if ((fruit == apple) && (veggie == leek)) {}

Voc pode escrever uma instruo condicional que retorne um valor booleano de duas maneiras. O segundo exemplo prefervel:
if (cartArr.length>0) { return true; } else { return false; }

Compare este exemplo com o anterior:


// better return (cartArr.length > 0);

O segundo trecho mais curto e tem menos expresses para avaliao, alm de ser mais fcil de ler e entender. O exemplo a seguir verifica se a varivel 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 cdigo. Este exemplo prefervel:
if (y>0) { return x/y; } else { return 0; }

A sintaxe if reduzida do primeiro exemplo mostrada como o operador condicional (?:). Ele permite converter instrues if..else simples em uma nica linha de cdigo. Nesse caso, a sintaxe abreviada reduz a legibilidade. Se voc precisa usar operaes condicionais, coloque a condio inicial (antes do ponto de interrogao [?]) entre parnteses para melhorar a legibilidade do cdigo. Voc pode ver um exemplo disso no trecho de cdigo anterior.

Formatando a sintaxe do ActionScript

803

Escrevendo instrues compostas


As instrues compostas contm uma lista de instrues entre chaves ({}). Essas instrues so recuadas a partir da instruo composta. O cdigo ActionScript a seguir mostra um exemplo disso:
if (a == b) { // This code is indented. trace("a == b"); }

Delimite cada instruo entre chaves quando ela fizer parte de uma estrutura de controle (if..else ou for), mesmo que ela contenha somente uma instruo. O exemplo a seguir mostra o cdigo escrito incorretamente:
// bad if (numUsers == 0) trace("no users found.");

Embora esse cdigo seja validado, ele escrito de forma incorreta, pois no tem chaves delimitando as instrues. Nesse caso, se voc adicionar outra instruo aps trace, o cdigo ser executado, quer a varivel numUsers seja igual a 0 ou no:
// bad var numUsers:Number = 5; if (numUsers == 0) trace("no users found."); trace("I will execute");

A execuo do cdigo, apesar da varivel 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 condio, no adicione o redundante ==true ao cdigo, da seguinte maneira:


if (something == true) { // statements }

Se comparado com false, voc pode usar if (something==false) ou if(!something).

Escrevendo uma instruo for


Voc pode escrever a instruo for usando o seguinte formato:
for (init; condition; update) { // statements }

804

Melhores prticas e convenes de codificao para ActionScript 2.0

A estrutura a seguir demonstra a instruo for:


var i:Number; for (var i = 0; i<4; i++) { myClip.duplicateMovieClip("newClip" + i + "Clip", i + 10, {_x:i*100, _y:0}); }

Lembre-se de incluir um espao aps cada expresso em uma instruo for.

Escrevendo instrues while e do..while


Voc pode escrever instrues while usando o seguinte formato:
while (condition) { // statements }

Voc pode escrever instrues do-while usando o seguinte formato:


do { // statements } while (condition);

Escrevendo instrues return


No use parnteses [()]com instrues return que contenham valores. A nica vez que voc deve usar parnteses com instrues return quando elas tornam o valor mais bvio, como mostra a terceira linha do seguinte trecho de cdigo do ActionScript:
return; return myCar.paintColor; // parentheses used to make the return value obvious return ((paintColor)? paintColor: defaultColor);

Escrevendo instrues switch

Todas as instrues switch incluem case padro. O case padro o ltimo em uma instruo switch. O case padro contm uma instruo break que impede um erro de fall-through se outro case for adicionado.

Se o case no tiver uma instruo break, o case falhar (consulte case A no exemplo de cdigo a seguir). A instruo dever incluir um comentrio no lugar da instruo break, como voc poder ver no exemplo a seguir aps case A. Neste exemplo, se a condio corresponder ao case A, os cases A e B sero executados.

Formatando a sintaxe do ActionScript

805

Voc pode escrever instrues switch usando o seguinte formato:


switch (condition) { case A : // statements // falls through case B : // statements break; case Z : // statements break; default : // statements break; }

Escrevendo instrues try..catch e try..catch..finally


Escreva instrues try..catch e try..catch..finally usando os seguintes formatos:
var myErr:Error; // try..catch try { // statements } catch (myErr) { // statements } // try..catch..finally try { // statements } catch (myErr) { // statements } finally { // statements }

Sobre como usar a sintaxe do ouvinte


H vrias maneiras de escrever ouvintes para eventos no Flash 8. Algumas tcnicas comuns so mostradas nos seguintes exemplos de cdigo. O primeiro exemplo mostra uma sintaxe do ouvinte adequadamente formatada, que usa um componente Loader para carregar o contedo em um arquivo SWF. O evento progress inicia quando o contedo carregado, e o evento complete indica quando o carregamento termina.
var boxLdr:mx.controls.Loader; var ldrListener:Object = new Object(); ldrListener.progress = function(evt:Object) {

806

Melhores prticas e convenes de codificao para ActionScript 2.0

trace("loader loading:" + Math.round(evt.target.percentLoaded) + "%"); }; ldrListener.complete = function(evt:Object) { trace("loader complete:" + evt.target._name); }; boxLdr.addEventListener("progress", ldrListener); boxLdr.addEventListener("complete", ldrListener); boxLdr.load("http://www.helpexamples.com/flash/images/image1.jpg");

Uma pequena variao no primeiro exemplo desta seo consiste em usar o mtodo handleEvent, mas essa tcnica um pouco mais complicada. A Macromedia no recomenda essa tcnica porque voc deve usar uma srie de instrues if..else ou uma instruo 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");

Formatando a sintaxe do ActionScript

807

808

Melhores prticas e convenes de codificao para ActionScript 2.0

APNDICE A

Mensagens de erro
O Macromedia Flash Basic 8 e o Macromedia Flash Professional 8 fornecem relatrios avanados de erros durante a compilao quando voc publica no ActionScript 2.0 (padro). A tabela a seguir contm uma lista das mensagens de erro que podem ser geradas pelo compilador do Flash:
Nmero do Texto da mensagem erro
1093 1094 1095 1096 1097 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 Era esperado um nome de classe. esperado um nome de classe base aps a palavra-chave extends. Um atributo de membro foi usado de modo incorreto. No possvel repetir o nome de membro mais de uma vez. Todas as funes de membros devem ter nomes. Essa instruo no permitida na definio de classe. J foi definida uma classe ou interface com esse nome. Tipos incompatveis. No existe uma classe com o nome <NomeDaClasse>. No existe uma propriedade com o nome <nomeDaPropriedade>. Tentativa de uma chamada de funo em uma no-funo. Tipos incompatveis em uma instruo de atribuio: encontrado [lhs-type] onde [rhs-type] requerido. O membro privado e no pode ser acessado. No so permitidas declaraes de variveis em interfaces. No so permitidas declaraes de eventos em interfaces. No so permitidas declaraes getter/setter (apanhadoras/definidoras) em interfaces. No so permitidos membros privados em interfaces.

809

Nmero do Texto da mensagem erro


1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 No so permitidos corpos de funes em interfaces. Uma classe no pode estender a si mesma. Uma interface no pode estender a si mesma. No h interfaces definidas com esse nome. Uma classe no pode estender uma interface. Uma interface no pode estender uma classe. esperado um nome de interface aps a palavra-chave implements. Uma classe no pode implementar outra classe, somente interfaces. A classe deve implementar o mtodo nomeDoMtodo a partir da interface nomeDaInterface. A implementao de um mtodo de interface deve ser um mtodo e no uma propriedade. Uma classe no pode estender a mesma interface mais de uma vez. A implementao do mtodo de interface no corresponde sua definio. Esta construo s est disponvel no ActionScript 1.0. Esta construo s est disponvel no ActionScript 2.0. No so permitidos membros estticos em interfaces. A expresso retornada deve corresponder ao tipo de retorno da funo. Esta funo requer uma instruo return. Atributo usado fora da classe. Uma funo com tipo de retorno Void no pode retornar um valor. A clusula extends deve vir antes da clusula implements. esperado um identificador de tipo aps :. As interfaces devem usar a palavra-chave extends, e no implements. Uma classe no pode estender mais do que uma classe. Uma interface no pode estender mais do que uma interface. No existe um mtodo com o nome <nomeDoMtodo>. Esta instruo no permitida na definio de uma interface. Uma funo set exige exatamente um parmetro. Uma funo get no exige parmetros.

810

Mensagens de erro

Nmero do Texto da mensagem erro


1139 1140 1141 S possvel definir classes em scripts externos de classes do ActionScript 2.0. Os scripts de classes do ActionScript 2.0 s podem definir construes de classes ou de interfaces. 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 no consegue compilar uma classe porque o nome completo de uma classe existente parte do nome da classe em conflito. Por exemplo, a compilao da classe mx.com.util gerar o erro 1141 se a classe mx.com for uma classe compilada.) A classe ou interface <Nome da Classe ou Interface> no pde ser carregada. As interfaces s podem ser definidas em scripts externos de classes do ActionScript 2.0. No possvel acessar variveis de instncia em funes estticas. No possvel aninhar definies de classes e interfaces. A propriedade em questo no tem o atributo estatic. Esta chamada para super no corresponde ao superconstrutor. Somente o atributo public permitido para mtodos de interface. No possvel usar a palavra-chave como uma diretiva. Voc deve exportar o filme como Flash 7 para usar esta ao. Voc deve exportar o filme como Flash 7 para usar esta expresso. Esta clusula de exceo est colocada de modo incorreto. Uma classe deve ter somente um construtor. Um construtor no pode retornar um valor. Um construtor no pode especificar um tipo de retorno. Uma varivel no pode ser do tipo Void. Um parmetro de funo no pode ser do tipo Void. S possvel acessar membros estticos diretamente atravs de classes. Vrias interfaces implementadas contm o mesmo mtodo com tipos diferentes. J existe uma classe ou interface definida com esse nome.

1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160

811

Nmero do Texto da mensagem erro


1161 1162 1163 1164 1165 1166 No possvel excluir classes, interfaces e tipos internos. No existem classes com esse nome. A palavra-chave <palavra-chave> reservada para o ActionScript 2.0 e no pode ser usada aqui. A definio do atributo personalizado no foi concluda. S possvel definir uma classe ou interface por arquivo .as do ActionScript 2.0. A classe em compilao, <A.b>, no coincide com a classe que foi importada, <A.B>. (Esse erro ocorre quando um nome de classe utiliza maisculas e minsculas diferentes daquelas utilizadas em uma classe importada. Por exemplo, a compilao da classe mx.com.util gerar o erro 1166 se a instruo import mx.Com aparecer no arquivo util.as.) Insira o nome da classe. O nome da classe informado contm um erro de sintaxe. O nome da interface informado contm um erro de sintaxe. O nome da classe base informado contm um erro de sintaxe. O nome da interface base informado contm um erro de sintaxe. Insira o nome da interface. Insira o nome da classe ou da interface. O nome da classe ou interface informado contm um erro de sintaxe. varivel no acessvel a partir desse escopo. Foram encontradas diversas ocorrncias do atributo get/set/private/public/ static. Um atributo de classe foi usado de modo incorreto. No possvel usar funes e variveis de instncia para inicializar variveis estticas. Foram descobertas circularidades durante a execuo entre as seguintes classes: <lista de classes definidas pelo usurio>. Esse erro durante a execuo indica que suas classes personalizadas fazem referncias entre si de forma errada. O Flash Player identificado no momento no oferece suporte depurao.

1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179

1180

812

Mensagens de erro

Nmero do Texto da mensagem erro


1181 1182 1183 1184 1185 1186 1187 1188 1189 O Flash Player identificado no momento no oferece suporte ao evento releaseOutside. O Flash Player identificado no momento no oferece suporte ao evento dragOver. O Flash Player identificado no momento no oferece suporte ao evento dragOut. O Flash Player identificado no momento no oferece suporte a aes de arrastar. O Flash Player identificado no momento no oferece suporte ao loadMovie. O Flash Player identificado no momento no oferece suporte ao getURL. O Flash Player designado no momento no oferece suporte ao FSCommand. No so permitidas instrues de importao nas definies de classe ou interface. No possvel 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 compilao da classe util gerar o erro 1189 se a instruo import mx.util aparecer no arquivo util.as.) No possvel importar a classe <A.B> porque o nome da folha j est resolvido para uma classe previamente importada <C.B>. (Por exemplo, a compilao de import jv.util gerar o erro 1190 se a instruo import mx.util tambm aparecer no arquivo AS.) S possvel inicializar as variveis de instncia de uma classe para expresses de constantes durante a compilao. Funes de membros de classes no podem ter o mesmo nome de uma funo construtora de superclasse. O nome desta classe, <NomeDaClasse>, est em conflito com o nome de outra classe que foi carregada. O superconstrutor deve ser chamado primeiro no corpo do construtor. O identificador <nomeDaClasse> no ser resolvido para o objeto interno <NomeDaClasse> durante a execuo. A classe <A.B.NomeDaClasse> precisar ser definida em um arquivo cujo caminho relativo seja <A.B>.

1190

1191 1192 1193 1194 1195 1196

813

Nmero do Texto da mensagem erro


1197 1198 O caractere curinga * foi usado de modo incorreto no nome da classe <NomeDaClasse>. O uso de maisculas/minsculas diferente na funo de membro <nomedaclasse> em relao ao nome da classe que est sendo definida, <NomeDaClasse>; a funo no ser tratada como o construtor de classe durante a execuo. O nico tipo permitido para um iterador de repetio for-in String. Uma funo definidora no pode retornar um valor. Os nicos atributos permitidos para funes construtoras so public e private. O arquivo 'toplevel.as', necessrio para fazer a verificao de tipo no ActionScript 2.0, no foi encontrado. Certifique-se de que o diretrio '$(LocalData)/Classes' est listado no caminho de classe global das preferncias do ActionScript. A ramificao entre <spanStart> e <spanEnd>> ultrapassa o intervalo de 32K. No foi encontrada nenhuma classe nem pacote com o nome '<nomePacote>' no pacote '<NomePacote>'. O Flash Player identificado no momento no oferece suporte ao FSCommand2. A funo de membro '<nomeFuno>' tem mais de 32K. A funo annima da linha <nmeroLinha> ultrapassa o intervalo de 32K. O cdigo da linha <nmeroLinha> ultrapassa o intervalo de 32K. O nome de pacote '<NomePacote>' no pode ser usado como nome de um mtodo. O nome de pacote '<NomePacote>' tambm no pode ser usado como nome de uma propriedade. O arquivo ASO da classe '<NomeDaClasse>' no pde ser criado. Certifiquese 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. Esse tipo de aspas no permitido no ActionScript. Altere-o para aspas duplas (retas) padro.

1199 1200 1201 1202

1203 1204 1205 1206 1207 1208 1210 1211 1212

1213

814

Mensagens de erro

APNDICE B

Operadores Flash 4 obsoletos


A tabela a seguir lista os operadores somente do Flash 4 que ficaram obsoletos no ActionScript 2.0. No use esses operadores a menos que voc esteja publicando no Flash Player 4 e anterior.
Operador
not

B
Associatividade
Direita para esquerda Esquerda para direita Esquerda para direita

Description (Descrio)
NOT lgico AND lgico OR lgico (Flash 4)

and

or

add

Concatenao de seqncia de caracteres (antes Esquerda para &) direita Instncia de Menor que (verso de seqncia de caracteres) Menor que ou igual a (verso de seqncia de caracteres) Maior que (verso de seqncia de caracteres) Maior que ou igual a (verso de seqncia de caracteres) Igual (verso de seqncia de caracteres) Diferente (verso de seqncia de caracteres) Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita Esquerda para direita

instanceof

lt

le

gt

ge

eq

ne

815

816

Operadores Flash 4 obsoletos

APNDICE C

Teclas do teclado e valores de cdigos de teclas


As tabelas a seguir listam todas as teclas de um teclado padro e os valores de cdigos de teclas correspondentes e os valores de cdigos de teclas ASCII usados para identificar as teclas no ActionScript.

Letras de A a Z e nmeros padro de 0 a 9 na pgina 818 Teclas do teclado numrico na pgina 820 Teclas de funo na pgina 821 Outras teclas na pgina 822

possvel utilizar constantes de teclas para interceptar o comportamento interno dos pressionamentos de teclas. Para obter mais informaes sobre o manipulador on(), consulte %{on handler}% em ActionScript 2.0 Language Reference. Para capturar valores de cdigos de teclas e valores de cdigos de teclas ASCII utilizando um arquivo SWF e pressionamentos de teclas, voc pode usar o seguinte cdigo do ActionScript:
var keyListener:Object = new Object(); keyListener.onKeyDown = function() { trace("DOWN -> Code: " + Key.getCode() + "\tACSII: " + Key.getAscii() + "\tKey: " + chr(Key.getAscii())); }; Key.addListener(keyListener);

Para obter mais informaes sobre a classe Key, consulte %{Key}% em ActionScript 2.0 Language Reference. Para interceptar teclas ao testar um arquivo SWF no ambiente de criao (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 nmeros padro de 0 a 9


A tabela a seguir lista as teclas de um teclado padro, com as letras de A a Z e os nmeros de 0 a 9, e os valores de cdigos de teclas correspondentes usados para identificar as teclas no ActionScript:
Tecla alfabtica ou numrica
A B C D E F G H I J K L M N O P Q R S T U V W X Y

Cdigo da tecla
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

Cdigo da tecla ASCII


65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

818

Teclas do teclado e valores de cdigos de teclas

Tecla alfabtica ou numrica


Z 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r

Cdigo da tecla
90 48 49 50 51 52 53 54 55 56 57 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82

Cdigo da tecla ASCII


90 48 49 50 51 52 53 54 55 56 57 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

819

Tecla alfabtica ou numrica


s t u v w x y z

Cdigo da tecla
83 84 85 86 87 88 89 90

Cdigo da tecla ASCII


115 116 117 118 119 120 121 122

Teclas do teclado numrico


A tabela a seguir lista as teclas de um teclado numrico e os valores de cdigos de teclas correspondentes usados para identificar as teclas no ActionScript:
Tecla do teclado numrico
0 do teclado numrico 1 do teclado numrico 2 do teclado numrico 3 do teclado numrico 4 do teclado numrico 5 do teclado numrico 6 do teclado numrico 7 do teclado numrico 8 do teclado numrico 9 do teclado numrico Multiplicar Somar Enter Subtrair

Cdigo da tecla
96 97 98 99 100 101 102 103 104 105 106 107 13 109

Cdigo da tecla ASCII


48 49 50 51 52 53 54 55 56 57 42 43 13 45

820

Teclas do teclado e valores de cdigos de teclas

Tecla do teclado numrico


Decimal Dividir

Cdigo da tecla
110 111

Cdigo da tecla ASCII


46 47

Teclas de funo
A tabela a seguir lista as teclas de funo em um teclado padro e os valores de cdigos de teclas correspondentes usados para identificar as teclas no ActionScript:
Tecla de funo
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10

Cdigo da tecla
112 113 114 115 116 117 118 119 120 Esta tecla reservada pelo sistema e no pode ser usada no ActionScript. 122 123 124 125 126

Cdigo da tecla ASCII


0 0 0 0 0 0 0 0 0 Esta tecla reservada pelo sistema e no pode ser usada no ActionScript. 0 0 0 0 0

F11 F12 F13 F14 F15

821

Outras teclas
A tabela a seguir lista as teclas de um teclado padro que no so letras, nmeros, teclas do teclado numrico nem teclas de funo, e os valores de cdigos de teclas correspondentes usados para identificar as teclas no ActionScript:
Tecla
Backspace Tab Enter Shift Control Caps Lock Esc Barra de espaos Page Up Page Down End Home Seta para Esquerda Seta para Cima Seta para Direita Seta para Baixo Insert Delete Num Lock ScrLk Pause/Break ;: =+ -_ /? `~

Cdigo da tecla
8 9 13 16 17 20 27 32 33 34 35 36 37 38 39 40 45 46 144 145 19 186 187 189 191 192

Cdigo da tecla ASCII


8 9 13 0 0 0 27 32 0 0 0 0 0 0 0 0 0 127 0 0 0 59 61 45 47 96

822

Teclas do teclado e valores de cdigos de teclas

Tecla
[{ \| ]} "' , . /

Cdigo da tecla
219 220 221 222 188 190 191

Cdigo da tecla ASCII


91 92 93 39 44 46 47

Para obter valores de cdigos de teclas e valores ASCII adicionais, use o ActionScript no incio deste apndice e pressione a tecla desejada para obter o cdigo da tecla.

823

824

Teclas do teclado e valores de cdigos de teclas

APNDICE D

Criando scripts para verses anteriores do Flash Player


O ActionScript sofreu modificaes considerveis a cada verso das ferramentas de criao do Macromedia Flash e do Flash Player. Ao criar contedo para o Macromedia Flash Player 8, voc aproveitar todo o potencial do ActionScript. Voc ainda poder usar o Flash 8 para criar contedo para verses anteriores do Flash Player, mas no poder usar todos os elementos do ActionScript. Este captulo fornece diretrizes para ajud-lo a criar scripts sintaticamente corretos para a verso do Flash Player desejada.
NO TA

Consulte as pesquisas relativas penetrao da verso do Flash Player no site da Macromedia na Web, em www.macromedia.com/software/player_census/flashplayer/.

Sobre a especificao de verses anteriores do Flash Player


Durante a criao de scripts, use as informaes de Availability (Disponibilidade) de cada elemento em ActionScript 2.0 Language Reference (Referncia da linguagem ActionScript 2.0) para determinar se o elemento que voc deseja usar suportado pela verso do Flash Player especificada. Para determinar quais elementos voc pode usar, exiba a caixa de ferramentas Actions (Aes); os elementos no suportados na verso especificada sero exibidos em amarelo. Se estiver criando contedo para o Flash Player 6, 7 ou 8, use o ActionScript 2.0, que contm diversos recursos importantes no disponveis no ActionScript 1.0, como o aprimoramento de erros do compilador e recursos mais robustos de programao orientada a objeto. Para especificar a verso do exibidor e do ActionScript a ser usada na publicao de um documento, selecione File (Arquivo) > Publish Settings (Configuraes de publicao) e escolha as opes na guia Flash. Consulte a prxima seo se precisar trabalhar com o Flash Player 4.

825

Usando o Flash 8 para criar contedo para o Flash Player 4


Para usar o Flash 8 na criao de contedo para o Flash Player 4, especifique Flash Player 4 na guia Flash da caixa de dilogo Publish Settings (File > Publish Settings). O ActionScript do Flash Player 4 possui apenas um tipo de dados primitivo bsico que usado para a manipulao de nmeros e de seqncias de caracteres. Ao criar um aplicativo para o Flash Player 4, utilize os operadores obsoletos de seqncia de caracteres localizados na categoria Deprecated (Obsoletos) > Operators (Operadores) da caixa de ferramentas do ActionScript. possvel usar os seguintes recursos do Flash 8 nas publicaes para Flash Player 4:

O operador de acesso de objetos e arrays ([]) O operador ponto (.) Operadores lgicos, operadores de atribuio e operadores de pr-incremento e psincremento/decremento. O operador de mdulo (%) e todos os mtodos e propriedades da classe Math.

Os elementos de linguagem a seguir no tm suporte nativo do Flash Player 4. O Flash 8 os exporta como aproximaes de sries, criando resultados menos precisos numericamente. Alm disso, devido incluso de aproximaes de sries no arquivo SWF, esses elementos de linguagem precisam de mais espao nos arquivos SWF do Flash Player 4 do que nos arquivos SWF do Flash Player 5 ou verses posteriores.

As aes for, while, do while, break e continue As aes print() e printAsBitmap() A ao switch

Para obter informaes adicionais, consulte Sobre a especificao de verses anteriores do Flash Player na pgina 825.

Usando o Flash 8 para abrir arquivos do Flash 4


O ActionScript do Flash 4 tinha apenas um tipo de dados verdadeiro: seqncia de caracteres. Ele usava diferentes tipos de operadores em expresses para indicar se o valor devia ser tratado como uma seqncia de caracteres ou um nmero. Nas verses subseqentes do Flash, possvel usar um conjunto de operadores em todos os tipos de dados. Quando voc usa o Flash 5 ou posterior para abrir um arquivo criado no Flash 4, o Flash converte automaticamente as expresses do ActionScript para torn-las compatveis com a nova sintaxe. O Flash faz as seguintes converses de operadores e tipos de dados:

826

Criando scripts para verses anteriores do Flash Player

O operador = no Flash 4 era usado para igualdade numrica. No Flash 5 e verses posteriores, == o operador de igualdade e = o operador de atribuio. Os operadores = em arquivos do Flash 4 so convertidos automaticamente em ==. O Flash executa automaticamente as converses de tipo para garantir o comportamento esperado dos operadores. Devido introduo de vrios tipos de dados, os seguintes operadores tm novos significados:
+, ==, !=, <>, <, >, >=, <=

No ActionScript do Flash 4, esses operadores eram sempre operadores numricos. No Flash 5 e verses posteriores, eles se comportam de maneira diferente, dependendo dos tipos de dados dos operandos. Para evitar diferenas semnticas em arquivos importados, a funo Number() inserida delimitando todos os operandos desses operadores. (Os nmeros constantes j so bvios, portanto, eles no so includos em Number().) Para obter mais informaes sobre esses operadores, consulte a tabela de operadores em Sobre associatividade e precedncia de operadores na pgina 188 e Operadores Flash 4 obsoletos na pgina 815.

No Flash 4, a seqncia de escape \n gerava um caractere de retorno de carro (ASCII 13). No Flash 5 e verses posteriores, para seguir o padro ECMA-262, \n gera um caractere de alimentao de linha (ASCII 10). Uma seqncia \n nos arquivos FLA do Flash 4 convertida automaticamente em \r. O operador & no Flash 4 era usado para adio de seqncias de caracteres. No Flash 5 e verses posteriores, & o operador AND bit a bit. O operador de adio de seqncias de caracteres chama-se agora add. Todos os operadores & nos arquivos do Flash 4 so automaticamente convertidos em operadores add. Muitas funes no Flash 4 no exigiam parnteses, por exemplo, Get Timer , Set Variable, Stop e Play. Para criar uma sintaxe consistente, a funo getTimer e todas as aes agora exigem parnteses [()]. Esses parnteses so adicionados automaticamente durante a converso. No Flash 5 e verses posteriores, quando a funo getProperty executada em um clipe de filme no existente, ela retorna o valor undefined, em vez de 0. A instruo undefined == 0 false no ActionScript aps o Flash 4 (no Flash 4, undefined == 1). No Flash 5 e verses posteriores, solucione esse problema ao converter arquivos do Flash 4, inserindo funes Number() nas comparaes de igualdade. No exemplo a seguir, Number() fora a converso de undefined em 0 para que a comparao tenha xito:

Usando o Flash 8 para criar contedo para o Flash Player 4

827

getProperty("clip", _width) == 0 Number(getProperty("clip", _width)) == Number(0)


N OT A 828

Se alguma palavra-chave do Flash 5 ou posterior tiver sido usada como nome de varivel no ActionScript do Flash 4, a sintaxe retornar um erro quando for compilada no Flash 8. Para solucionar esse problema, renomeie as variveis em todos os locais. Para obter mais informaes, consulte Sobre palavras reservadas na pgina 147 e Sobre a atribuio de nomes a variveis na pgina 96.

Usando a sintaxe de barra


A sintaxe de barra (/) foi usada no Flash 3 e 4 para indicar o caminho de destino de um clipe de filme ou de uma varivel. Nesse tipo de sintaxe, barras so usadas no lugar de pontos; alm disso, as variveis devem ser precedidas de dois-pontos, como mostra o exemplo a seguir:
myMovieClip/childMovieClip:myVariable

Para escrever o mesmo caminho de destino em sintaxe de ponto, que suportada pelo Flash Player 5 e verses posteriores, use esta sintaxe:
myMovieClip.childMovieClip.myVariable

A sintaxe de barra era mais utilizada com a ao tellTarget, cujo uso tambm no mais recomendado. A ao with agora mais usada por ser mais compatvel com a sintaxe de ponto. Para obter mais informaes, consulte %{funo tellTarget}% e %{instruo with}% em ActionScript 2.0 Language Reference.

Criando scripts para verses anteriores do Flash Player

APNDICE E

Programao orientada a objeto com o ActionScript 1.0


As informaes deste apndice vm da documentao do Macromedia Flash MX e explicam como usar o modelo de objetos do ActionScript 1.0 para criar scripts. Elas foram includas 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 no est pronto para migrar para o ActionScript 2.0, use este apndice para localizar ou verificar as informaes necessrias durante a criao de scripts.

Se voc nunca usou o ActionScript para criar scripts orientados a objeto e no precisa ter como alvo o Flash Player 5, no use as informaes deste apndice, pois a criao de scripts orientados a objeto com o ActionScript 1.0 est obsoleta. Em vez disso, para obter informaes sobre como usar o ActionScript 2.0, consulte Captulo 7, Classes, na pgina 239. Este captulo contm as seguintes sees:
Sobre o ActionScript 1.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830 Criando um objeto personalizado no ActionScript 1.0. . . . . . . . . . . . . . . . . . . . . . . . 831 Atribuindo mtodos a um objeto personalizado no ActionScript 1.0 . . . . . . . . . . .832 Definindo mtodos manipuladores de eventos no ActionScript 1.0 . . . . . . . . . . . .834 Criando herana 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

Alguns exemplos deste apndice usam o mtodo Object.registerClass(). Esse mtodo s suportado no Flash Player 6 e verses posteriores; no use esse mtodo se estiver utilizando o Flash Player 5.

829

Sobre o ActionScript 1.0


N OT A 830

Vrios usurios do Flash podem obter grandes benefcios utilizando o ActionScript 2.0, especialmente com aplicativos complexos. Para obter informaes sobre como usar o ActionScript 2.0, consulte Captulo 7, Classes, na pgina 239.

ActionScript uma linguagem de programao orientada a objeto. A programao orientada a objeto usa objetos, ou estruturas de dados, para agrupar as propriedades e os mtodos que controlam o comportamento ou a aparncia do objeto. Os objetos permitem organizar e reutilizar o cdigo. Depois de definir um objeto, possvel fazer referncia a ele pelo nome, sem precisar redefini-lo a cada utilizao. Uma classe uma categoria genrica de objetos. A classe define uma srie de objetos que tm propriedades comuns e podem ser controlados da mesma maneira. As propriedades so atributos que definem um objeto, como tamanho, posio, cor, transparncia etc. As propriedades so definidas para uma classe e os valores das propriedades so definidos para os diferentes objetos da classe. Os mtodos so funes que podem definir ou recuperar as propriedades de um objeto. Por exemplo, voc pode definir um mtodo para calcular o tamanho de um objeto. Assim como as propriedades, os mtodos so definidos para uma classe de objetos e, em seguida, chamados para os diferentes objetos da classe. O ActionScript possui diversas classes internas, incluindo as classes MovieClip e Sound, entre outras. Tambm possvel criar classes personalizadas para definir categorias de objetos para os aplicativos. Os objetos no ActionScript podem ser meros recipientes de dados ou podem ser representados graficamente no Stage (Palco) como clipes de filmes, botes ou campos de texto. Todos os clipes de filmes so instncias da classe interna MovieClip, e todos os botes so instncias da classe interna Button. Cada instncia de clipe de filme contm todas as propriedades (por exemplo, _height, _rotation, _totalframes) e todos os mtodos (por exemplo, gotoAndPlay(), loadMovie(), startDrag()) da classe MovieClip. Para definir uma classe, crie uma funo especial denominada funo construtora. (Classes internas tm funes construtoras internas.) Por exemplo, se voc quiser informaes sobre um ciclista no aplicativo, poder criar uma funo construtora, Biker(), com as propriedades time e distance e o mtodo 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;}; }

Programao orientada a objeto com o ActionScript 1.0

Neste exemplo, criada uma funo que requer duas informaes ou parmetros: t e d. Quando a funo for chamada para criar novas instncias do objeto, passe para ela os parmetros. O cdigo a seguir cria instncias do objeto Biker chamadas emma e hamish e apresenta a velocidade da instncia emma, utilizando o mtodo getSpeed() do ActionScript anterior:
emma = new Biker(30, 5); hamish = new Biker(40, 5); trace(emma.getSpeed()); // traces 6

Em scripts orientados a objeto, as classes podem receber propriedades e mtodos umas das outras de acordo com uma ordem especfica. Esse processo chamado de herana. A herana pode ser usada para estender ou redefinir as propriedades e os mtodos de uma classe. Uma classe que herda propriedades e mtodos de outra classe chamada de subclasse. Uma classe que passa propriedades e mtodos para outra classe chamada de superclasse. Uma classe pode ser uma subclasse e uma superclasse ao mesmo tempo. Um objeto um tipo de dados complexo que pode conter ou no propriedades e mtodos. Cada propriedade, como uma varivel, possui um nome e um valor. As propriedades so anexadas ao objeto e contm valores que podem ser alterados e recuperados. Esses valores podem ser um dos seguintes tipos de dados: String, Number, Boolean, Object, MovieClip ou indefinido. As propriedades a seguir so de vrios tipos de dados:
customer.name = "Jane Doe"; customer.age = 30; customer.member = true; customer.account.currentRecord = 609; customer.mcInstanceName._visible = true;

A propriedade de um objeto tambm pode ser um objeto. Na linha 4 do exemplo anterior, account uma propriedade do objeto customer, e currentRecord uma propriedade do objeto account. O tipo de dados da propriedade currentRecord Number.

Criando um objeto personalizado no ActionScript 1.0


NO T A

Vrios usurios do Flash podem obter grandes benefcios utilizando o ActionScript 2.0, especialmente com aplicativos complexos. Para obter informaes sobre como usar o ActionScript 2.0, consulte Captulo 7, Classes, na pgina 239.

Criando um objeto personalizado no ActionScript 1.0

831

Para criar um objeto personalizado, defina uma funo construtora. Uma funo construtora recebe sempre o mesmo nome do tipo de objeto que cria. Voc pode usar a palavra-chave this dentro do corpo da funo construtora para fazer referncia ao objeto que a construtora cria; quando uma funo construtora for chamada, o Flash passar this para a funo como um parmetro oculto. Por exemplo, o cdigo a seguir uma funo construtora que cria um crculo com a propriedade radius:
function Circle(radius) { this.radius = radius; }

Depois de definir a funo construtora, crie uma instncia do objeto. Use o operador new antes do nome da funo construtora e atribua um nome de varivel nova instncia. Por exemplo, o cdigo a seguir usa o operador new para criar um objeto Circle com um raio de 5 e atribui-lo varivel myCircle:
myCircle = new Circle(5);
NO TA 832 N OT A

Um objeto tem o mesmo escopo da varivel qual ele atribudo.

Atribuindo mtodos a um objeto personalizado no ActionScript 1.0


Vrios usurios do Flash podem obter grandes benefcios utilizando o ActionScript 2.0, especialmente com aplicativos complexos. Para obter informaes sobre como usar o ActionScript 2.0, consulte Captulo 7, Classes, na pgina 239.

possvel definir os mtodos de um objeto dentro da funo construtora do objeto. Entretanto, esta tcnica no recomendada porque define o mtodo sempre que a funo construtora utilizada. O exemplo a seguir cria os mtodos getArea() e getDiameter(): e apresenta a rea e o dimetro da instncia construda myCircle com um raio definido como 55:
function Circle(radius) { this.radius = radius; this.getArea = function(){ return Math.PI * this.radius * this.radius; }; this.getDiameter = function() { return 2 * this.radius; }; } var myCircle = new Circle(55);

Programao orientada a objeto com o ActionScript 1.0

trace(myCircle.getArea()); trace(myCircle.getDiameter());

Toda funo construtora tem uma propriedade prototype, criada automaticamente quando a funo definida. A propriedade prototype indica os valores de propriedade padro para objetos criados com essa funo. Cada nova instncia de um objeto tem uma propriedade __proto__ que faz referncia propriedade prototype da funo construtora que a criou. Portanto, se voc atribuir mtodos propriedade prototype de um objeto, eles ficaro disponveis para qualquer instncia recm-criada desse objeto. recomendvel atribuir um mtodo propriedade prototype da funo construtora porque ela existe em um local e serve de referncia para novas instncias do objeto (ou classe). Voc pode usar as propriedades prototype e __proto__ para estender objetos para que o cdigo possa ser reutilizado de uma forma orientada a objeto. Para obter mais informaes, consulte Criando herana no ActionScript 1.0 na pgina 836. O procedimento a seguir mostra como atribuir um mtodo getArea() a um objeto Circle personalizado.
Para atribuir um mtodo a um objeto personalizado:
1.

Defina a funo construtora Circle():


function Circle(radius) { this.radius = radius; }

2.

Defina o mtodo getArea() do objeto Circle. O mtodo getArea() calcular a rea do crculo. No exemplo a seguir, voc pode usar um literal de funo para definir o mtodo getArea() e atribuir a propriedade getArea ao objeto prottipo do crculo:
Circle.prototype.getArea = function () { return Math.PI * this.radius * this.radius; };

3.

O exemplo a seguir cria uma instncia do objeto Circle:


var myCircle = new Circle(4);

4.

Chame o mtodo getArea() do novo objeto myCircle utilizando o seguinte cdigo:


var myCircleArea = myCircle.getArea(); trace(myCircleArea); // traces 50.265...

O ActionScript procura o mtodo getArea() no objeto myCircle. Como o objeto no possui um mtodo getArea(), feita uma pesquisa em seu objeto prottipo Circle.prototype para encontrar getArea(). O ActionScript o localiza e chama, e apresenta myCircleArea.

Atribuindo mtodos a um objeto personalizado no ActionScript 1.0

833

Definindo mtodos manipuladores de eventos no ActionScript 1.0


NO T A

Vrios usurios do Flash podem obter grandes benefcios utilizando o ActionScript 2.0, especialmente com aplicativos complexos. Para obter informaes sobre como usar o ActionScript 2.0, consulte Captulo 7, Classes, na pgina 239.

Voc pode criar uma classe do ActionScript para clipes de filme e definir os mtodos manipuladores de eventos no objeto prottipo dessa nova classe. Definir os mtodos no prottipo objeto faz todas as instncias desse smbolo responderem da mesma forma a esses eventos. Voc tambm pode adicionar mtodos manipuladores de eventos onClipEvent() ou on() a uma instncia individual para fornecer instrues exclusivas que so executadas apenas quando o evento da instncia ocorre. Os mtodos onClipEvent() e on() no substituem o mtodo manipulador de evento. Os dois eventos fazem com que seus scripts sejam executados. No entanto, se definir os mtodos manipuladores de eventos no objeto prottipo e tambm definir um mtodo manipulador de evento para uma instncia especfica, a definio da instncia substituir a definio do prottipo.
Para definir um mtodo manipulador de evento no objeto prottipo de um objeto:
1.

Crie um smbolo de clipe de filme e defina o identificador de vinculao como theID, selecionando o smbolo no painel Library (Biblioteca) e selecionando Linkage (Vinculao) no menu pop-up Library. No painel Actions (Aes) (Window [Janelas]> Actions), use a instruo function para definir uma nova classe, como mostra o seguinte exemplo:
// define uma classe function myClipClass() {}

2.

Essa nova classe atribuda a todas as instncias de clipe de filme adicionadas ao aplicativo pela linha de tempo ou pelos mtodos attachMovie() ou duplicateMovieClip(). Para que esses clipes de filme tenham acesso aos mtodos e propriedades do objeto MovieClip interno, faa com que a nova classe herde tudo da classe MovieClip.
3.

Insira cdigos como no seguinte exemplo:


// herda da classe MovieClip myClipClass.prototype = new MovieClip();

Agora a classe myClipClass herdar todas as propriedades e mtodos da classe MovieClip.


4.

Insira um cdigo, como este do exemplo, para definir mtodos manipuladores de eventos para a nova classe:

834

Programao orientada a objeto com o ActionScript 1.0

// define mtodos manipuladores de eventos para classe myClipClass myClipClass.prototype.onLoad = function() {trace("movie clip loaded");} myClipClass.prototype.onEnterFrame = function() {trace("movie clip entered frame");} 5.

Selecione Window > Library (Biblioteca) para abrir o painel Library se ele ainda no estiver aberto. Selecione os smbolos que deseja associar nova classe e escolha Linkage (Vinculao) no menu pop-up Library. Na caixa de dilogo Linkage Properties (Propriedades de vinculao), selecione Export for ActionScript (Exportar para ActionScript). Insira um identificador de vinculao na caixa Identifier (Identificador). O identificador de vinculao deve ser o mesmo para todos os smbolos que deseja associar nova classe. No exemplo do myClipClass, o identificador theID.

6.

7.

8.

9.

Insira o cdigo no painel Actions (Aes), como no seguinte exemplo:


// registra classe Object.registerClass("theID", myClipClass); this.attachMovie("theID","myName",1);

Esta etapa registra o smbolo cujo identificador de vinculao theID com a classe myClipClass . Todas as instncias de myClipClass possuem mtodos manipuladores de eventos que se comportam como foram definidos na etapa 4. Eles tambm se comportam como todas as instncias da classe MovieClip, j que a nova classe foi definida para herdar tudo da classe MovieClip na etapa 3. O cdigo completo mostrado no seguinte exemplo:
function myClipClass(){} myClipClass.prototype = new MovieClip(); myClipClass.prototype.onLoad = function(){ trace("movie clip loaded"); } myClipClass.prototype.onPress = function(){ trace("pressed"); } myClipClass.prototype.onEnterFrame = function(){ trace("movie clip entered frame"); } myClipClass.prototype.myfunction = function(){ trace("myfunction called"); }

Definindo mtodos manipuladores de eventos no ActionScript 1.0

835

Object.registerClass("myclipID",myClipClass); this.attachMovie("myclipID","clipName",3);

Criando herana no ActionScript 1.0


NO TA 836

Vrios usurios do Flash podem obter grandes benefcios utilizando o ActionScript 2.0, especialmente com aplicativos complexos. Para obter informaes sobre como usar o ActionScript 2.0, consulte Captulo 7, Classes, na pgina 239.

Herana uma forma de organizar, estender e reutilizar a funcionalidade. Subclasses herdam mtodos e propriedades de superclasses e adicionam seus prprios mtodos e propriedades especializados. Tomando como exemplo o mundo real, Bike seria uma superclasse e MountainBike e Tricycle seriam subclasses da superclasse. Ambas as subclasses contm, ou herdam, os mtodos e propriedades da superclasse (por exemplo, wheels). Cada subclasse tambm tem seus prprios mtodos e propriedades que estendem a superclasse (por exemplo, a subclasse MountainBike teria uma propriedade gears). Voc pode usar os elementos prototype e __proto__ para criar herana no ActionScript. Todas as funes construtoras tm uma propriedade prototype que criada automaticamente quando a funo definida. A propriedade prototype indica os valores de propriedade padro para objetos criados com essa funo. Voc pode usar a propriedade prototype para atribuir propriedades e mtodos a uma classe. Para obter mais informaes, consulte Atribuindo mtodos a um objeto personalizado no ActionScript 1.0 na pgina 832. Todas as instncias de uma classe possuem uma propriedade __proto__ que informa de que objeto recebem herana. Quando uma funo construtora usada para criar um objeto, a propriedade __proto__ definida para fazer referncia propriedade prototype de sua funo construtora. A herana prossegue de acordo com uma hierarquia limitada. Quando voc chama o mtodo ou a propriedade de um objeto, o ActionScript verifica se esse elemento existe no objeto. Se ele no existir, o ActionScript procurar na propriedade __proto__ pela informao (myObject.__proto__). Se a propriedade no for uma propriedade do objeto__proto__ do objeto, o ActionScript examinar myObject.__proto__.__proto__ e assim por diante. O exemplo a seguir define a funo construtora Bike():
function Bike(length, color) { this.length = length; this.color = color; this.pos = 0; }

O cdigo a seguir adiciona o mtodo roll() classe Bike.


Bike.prototype.roll = function() {return this.pos += 20;};

Programao orientada a objeto com o ActionScript 1.0

Em seguida, possvel rastrear a posio da classe Bike com o seguinte cdigo:


var myBike = new Bike(55, "blue"); trace(myBike.roll()); // traces 20. trace(myBike.roll()); // traces 40.

Em vez de adicionar roll() classe MountainBike e classe Tricycle, crie a classe MountainBike com Bike como superclasse, como mostra o seguinte exemplo:
MountainBike.prototype = new Bike();

Agora possvel chamar o mtodo roll() de MountainBike, como no exemplo a seguir:


var myKona = new MountainBike(20, "teal"); trace(myKona.roll()); // traces 20

Os clipes de filme no herdam uns dos outros. Para criar herana com clipes de filme, use Object.registerClass() para atribuir a clipes de filme uma classe diferente de MovieClip.

Adicionando propriedades getter/setter a objetos no ActionScript 1.0


N OT A

Vrios usurios do Flash podem obter grandes benefcios utilizando o ActionScript 2.0, especialmente com aplicativos complexos. Para obter informaes sobre como usar o ActionScript 2.0, consulte Captulo 7, Classes, na pgina 239.

possvel criar propriedades getter/setter (apanhadoras/definidoras) para um objeto usando o mtodo Object.addProperty(). Uma funo getter no possui nenhum parmetro. Seu valor de retorno pode ser de qualquer tipo. Seu tipo pode ser alterado entre as chamadas. O valor de retorno tratado como o valor atual da propriedade. Uma funo definidora utiliza um parmetro, que o novo valor da propriedade. Por exemplo, se a propriedade x for atribuda pela instruo x = 1, a funo definidora receber o parmetro 1 do tipo Number. O valor de retorno da funo definidora ignorado. Quando o Flash l uma propriedade getter/setter, chama a funo getter e o valor de retorno da funo torna-se um valor de prop. Quando o Flash grava uma propriedade getter/setter, ele chama a funo setter e passa a ela o novo valor como um parmetro. Se j houver uma propriedade com o mesmo nome, a nova propriedade a substituir.

Adicionando propriedades getter/setter a objetos no ActionScript 1.0

837

possvel adicionar propriedades getter/setter aos objetos prottipo. Se voc adicionar uma propriedade getter/setter a um objeto prottipo, todas as instncias de objeto que herdam o objeto prottipo tambm herdaro essa propriedade. Voc pode adicionar uma propriedade getter/setter em um nico local, o objeto prottipo, e fazer com que ela seja propagada para todas as instncias de uma classe (semelhante adio de mtodos a objetos prottipo). Se uma funo getter/setter for chamada para uma propriedade getter/setter em um objeto prottipo herdado, a referncia passada a essa funo o objeto referenciado originalmente e no o objeto prottipo. O comando Debug (Depurar) > List Variables (Listar variveis) em modo de teste suporta as propriedades getter/setter adicionadas aos objetos usando Object.addProperty(). As propriedades adicionadas a um objeto desse modo aparecem com outras propriedades do objeto no painel Output (Sada). As propriedades getter/setter so identificadas no painel Output com o prefixo [getter/setter]. Para obter mais informaes sobre o comando List Variables, consulte Usando o painel Output na pgina 759.

Usando as propriedades do objeto Function no ActionScript 1.0


N OT A 838 N O TA

Vrios usurios do Flash podem obter grandes benefcios utilizando o ActionScript 2.0, especialmente com aplicativos complexos. Para obter informaes sobre como usar o ActionScript 2.0, consulte Captulo 7, Classes, na pgina 239.

Voc pode especificar o objeto ao qual a funo aplicada e os valores dos parmetros passados para a funo usando os mtodos call() e apply() do objeto Function. Toda funo em ActionScript representada por um objeto Function para que todas as funes ofeream suporte a call() e apply(). Quando voc cria uma classe personalizada usando uma funo construtora ou quando define mtodos para uma classe personalizada usando uma funo, pode chamar call() e apply() para a funo.

Chamando uma funo usando o mtodo Function.call() no ActionScript 1.0


Vrios usurios do Flash podem obter grandes benefcios utilizando o ActionScript 2.0, especialmente com aplicativos complexos. Para obter informaes sobre como usar o ActionScript 2.0, consulte Captulo 7, Classes, na pgina 239.

O mtodo Function.call() chama a funo representada por um objeto Function.

Programao orientada a objeto com o ActionScript 1.0

Em quase todos os casos, o operador de chamada de funo (()) pode ser usado no lugar do mtodo call(). O operador de chamada de funo cria um cdigo conciso e de fcil leitura. O mtodo call() til principalmente quando o parmetro this da chamada de funo precisa ser explicitamente controlado. Normalmente, se uma funo chamada como um mtodo de um objeto, no corpo da funo, this definido como myObject, conforme indicado no exemplo a seguir:
myObject.myMethod(1, 2, 3);

Em algumas situaes, possvel que voc queira que this aponte para algum outro lugar, como no caso, por exemplo, de ser necessrio chamar uma funo como um mtodo de um objeto, mas ela no estiver realmente armazenada como um mtodo desse objeto, como indicado a seguir:
myObject.myMethod.call(myOtherObject, 1, 2, 3);

Voc pode passar o valor null para o parmetro esteObjeto para chamar uma funo como uma funo regular e no como um mtodo de um objeto. Por exemplo, as seguintes chamadas de funo so equivalentes:
Math.sin(Math.PI / 4) Math.sin.call(null, Math.PI / 4)

Para chamar uma funo usando o mtodo Function.call():

Use a seguinte sintaxe:


myFunction.call(thisObject, parameter1, ..., parameterN)

O mtodo requer os seguintes parmetros:


O parmetro thisObject especifica o valor de this no corpo da funo. Os parmetros parameter1..., parameterN especificam os parmetros a serem passados para myFunction. Voc pode especificar zero ou mais parmetros.

Especificando o objeto ao qual uma funo aplicada usando Function.apply() no ActionScript 1.0
N O TA

Vrios usurios do Flash podem obter grandes benefcios utilizando o ActionScript 2.0, especialmente com aplicativos complexos. Para obter informaes sobre como usar o ActionScript 2.0, consulte Captulo 7, Classes, na pgina 239.

O mtodo Function.apply() especifica o valor de this para ser usado em qualquer funo chamada pelo ActionScript. Esse mtodo tambm especifica os parmetros a serem passados a qualquer funo chamada.

Usando as propriedades do objeto Function no ActionScript 1.0

839

Os parmetros so especificados como um objeto Array. Em geral, isso til quando o nmero de parmetros a serem passados s conhecido quando o script realmente executado. Para obter mais informaes, consulte %{apply (Function.apply method)}% em ActionScript 2.0 Language Reference.
Para especificar o objeto ao qual uma funo aplicada usando Function.apply():

Use a seguinte sintaxe:


myFunction.apply(thisObject, argumentsObject)

O mtodo requer os seguintes parmetros:


O parmetro thisObject especifica o objeto ao qual myFunction aplicada. O parmetro argumentsObject define qualquer array cujos elementos so passados para myFunction como parmetros.

840

Programao orientada a objeto com o ActionScript 1.0

APNDICE F

Terminologia
Como em todas as linguagens de script, o ActionScript usa sua prpria terminologia. O Macromedia Flash tambm utiliza uma terminologia exclusiva. A lista apresentada a seguir fornece uma introduo aos termos importantes do ActionScript e aos termos do Flash referentes programao com o ActionScript e que so exclusivos para trabalhar no ambiente de criao do Flash.
Editor do ActionScript

o editor de cdigo no painel Actions e na janela Script O editor do ActionScript formado por vrios recursos, como a formatao automtica, mostrando caracteres ocultos e codificando com cores partes dos scripts. (Consulte tambm: janela Script, painel Actions). um painel no ambiente de criao do Flash, onde voc escreve o

Painel Actions (Aes)

cdigo do ActionScript.
Funo annima uma funo sem nome que faz referncia a si prpria; voc faz referncia

funo annima ao cri-la. Para obter informaes e um exemplo, consulte Criando funes annimas e de retorno de chamada na pgina 220.
Serrilhado refere-se ao texto serrilhado que no utiliza variaes de cor para suavizar as bordas

dentadas, ao contrrio do texto sem serrilhado (consulte tambm 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 paream menos dentadas. A opo AntiAliasing (Eliminao de serrilhado) no Flash torna o texto mais legvel ao alinhar os contornos do texto nas fronteiras dos pixels e eficiente para renderizar fontes menores com nitidez. Arrays

so objetos cujas propriedades so identificadas por nmeros que representam suas posies na estrutura. Basicamente, um array uma lista de itens.

Ambiente de criao a rea de trabalho do Flash, incluindo todos os elementos da interface

de usurio. Voc cria arquivos FLA ou arquivos de script (na janela Script) usando o ambiente de criao.

841

Grficos de bitmap(ou grficos de varredura) geralmente so imagens foto-realsticas ou grficos com um grande volume de detalhes. Cada pixel (ou bit) da imagem contm 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 grfico, diferente do bitmap, o vetorial. Booleano

um valor true (verdadeiro) ou false (falso).

Armazenamento em cache refere-se a informaes 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 possvel exibi-la novamente sem fazer o download dos dados da imagem.
Funes de retorno de chamada

so funes annimas associadas a um determinado evento. Uma funo chama uma funo de retorno de chamada quando ocorre um evento especfico, como, por exemplo, aps um carregamento (onLoad()) ou uma animao (onMotionFinished()). Para obter mais informaes e exemplos, consulte Criando funes annimas e de retorno de chamada na pgina 220. so letras, numerais e pontuao combinados para formar seqncias de caracteres. s vezes so chamados glifos.

Caracteres

Classes so 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 no em um script escrito no painel Actions (Aes). Caminho de classe

refere-se lista de pastas na qual o Flash pesquisa definies de classe ou de interface. Quando voc cria um arquivo de classe, precisa salvar o arquivo em um dos diretrios especificados no caminho de classe ou em um subdiretrio dentro dele. Os caminhos de classe existem no nvel global, do aplicativo e do documento. o mesmo significado: ela indica a tecla Tab em um teclado. Constantes so teis para comparar valores.

Constantes so elementos que no se alteram. Por exemplo, a constante Key.TAB sempre tem

Funes construtoras (ou

construtores) so funes utilizadas para definir (inicializar) as propriedades e os mtodos de uma classe. Por definio, construtores so funes em uma definio de classe que tm o mesmo nome da classe. Por exemplo, o cdigo abaixo define uma classe Circle (Crculo) e implementa uma funo 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 tambm usado quando voc cria (instancia) um objeto com base em uma classe especfica. As instrues a seguir so chamadas das funes construtoras relativas classe Array interna e classe Circle (Crculo) personalizada:
var my_array:Array = new Array(); var my_circle:Circle = new Circle(9); Tipos de dados descrevem que tipos de informaes um elemento do ActionScript ou varivel pode conter. Os tipos de dados internos do ActionScript so String (Seqncia de caracteres), Number (Nmero), Boolean (Booleano), Object (Objeto), MovieClip (Clipe de filme), Function (Funo), null (nulo) e undefined (indefinido). Sobre tipos de dados na pgina 76Para obter mais informaes, consulte . Fontes de dispositivo so fontes especiais no Flash que no so incorporadas em um arquivo SWF do Flash. Em vez disso, o Flash Player usa a fonte disponvel no computador local mais semelhante fonte do dispositivo. Como os contornos de fontes no so incorporados, o tamanho de um arquivo SWF menor do que quando so usados contornos de fontes incorporados. Entretanto, como as fontes de dispositivo no so incorporadas, o texto criado com elas parece diferente do esperado em sistemas de computadores que no possuem uma fonte instalada correspondente fonte do dispositivo. O Flash contm trs fontes de dispositivo: _sans (semelhante Helvetica e Arial), _serif (semelhante Times Roman) e _typewriter (semelhante Courier). Sintaxe de ponto

refere-se ao uso de um operador ponto (.) (sintaxe de ponto) para acessar propriedades ou mtodos que pertencem a um objeto ou instncia no Stage (Palco) que utilize o ActionScript. O operador ponto tambm utilizado para identificar o caminho de destino para uma instncia (como um clipe de filme), varivel, funo ou objeto. Uma expresso com sintaxe de ponto comea com o nome do objeto ou clipe de filme seguido de um ponto e termina com o elemento a ser especificado.

durante a reproduo de um arquivo SWF. Por exemplo, so gerados eventos diferentes quando um clipe de filme carregado, quando a reproduo entra em um quadro, quando o usurio clica em um boto ou clipe de filme, ou quando digita no teclado.

Eventos ocorrem

843

Manipuladores de eventos so eventos especiais gerados quando o usurio clica com o mouse ou quando os dados terminam de ser carregados. Existem dois tipos de manipuladores de eventos do ActionScript: mtodos manipuladores de eventos e ouvintes de eventos. (Existem tambm dois manipuladores de eventos, %{on handler}% e %{onClipEvent handler}%, que voc pode atribuir diretamente a botes e clipes de filme.) Na caixa de ferramentas Actions, cada objeto do ActionScript com mtodos 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 so includos nas duas subcategorias. Para obter mais informaes sobre gerenciamento de eventos, consulte Manipulando eventos na pgina 347.

so combinaes legais de smbolos do ActionScript que representam um valor. Uma expresso consiste em operadores e operandos. Por exemplo, na expresso x + 2, x e 2 so operandos e + um operador.
Expresses Recipiente do Flash Player

refere-se ao sistema que contm o aplicativo do Flash, como o aplicativo desktop ou navegador. possvel adicionar o ActionScript e o JavaScript para facilitar a comunicao entre o recipiente do Flash Player e o arquivo do SWF.

FlashType refere-se tecnologia avanada de renderizao de fontes do Flash 8. Por exemplo,

Alias Text for Readability (Texto serrilhado para legibilidade) utiliza a tecnologia de renderizao FlashType, o mesmo no ocorrendo com Alias Text for Animation (Texto serrilhado para animao). Para obter informaes, consulteSobre a renderizao de fontes e texto sem serrilhado na pgina 430.
Scrips de quadros Funes

so blocos de cdigo adicionados a um quadro em uma linha de tempo.

so blocos de cdigo reutilizveis que podem receber parmetros e retornar um valor. Sobre funes e mtodos na pgina 213Para obter mais informaes, consulte .
Literais de funo so funes sem nome declaradas em uma expresso em vez de em uma instruo. Os literais so teis quando necessrio usar uma funo temporariamente ou usar uma funo no cdigo no lugar de uma expresso. 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 criao do Flash algumas vezes chamada IDE.
Identificadores so nomes usados para indicar uma varivel, uma propriedade, um objeto, uma funo ou um mtodo. O primeiro caractere deve ser uma letra, um sublinhado (_) ou um cifro ($). Cada caractere seguinte deve ser uma letra, um nmero, um sublinhado ou um cifro. Por exemplo, firstName o nome de uma varivel.

844

Terminologia

Instncias so objetos que contm todas as propriedades e mtodos de determinada classe. Por exemplo, todos os arrays so instncias da classe Array; portanto, voc pode usar quaisquer mtodos ou propriedades dessa classe com qualquer instncia de um array. Nomes de instncias so nomes exclusivos que permitem fazer referncia a instncias que voc criou ou instncias de clipes de filme e de botes no Stage (Palco). Por exemplo, no cdigo a seguir, "names" e studentName so nomes de instncias de dois objetos, um array e uma seqncia de caracteres: var names:Array = new Array(); var studentName:String = new String();

Use o inspetor Properties (Propriedades) para atribuir nome a instncias no Stage (Palco). Por exemplo, um smbolo principal na biblioteca pode ser chamado de counter, e as duas instncias desse smbolo no arquivo SWF podem ter os nomes de instnciasscorePlayer1_mc e scorePlayer2_mc. O cdigo a seguir define uma varivel chamada score dentro de cada instncia de clipe de filme por meio de nomes de instncias:
this.scorePlayer1_mc.score = 0; this.scorePlayer2_mc.score = 0;

Voc pode usar atribuio estrita de tipos de dados ao criar instncias para que referncias de cdigo apaream medida que voc digita o cdigo.
Palavras-chave so palavras reservadas que tm significado especial. Por exemplo, var uma palavra-chave usada para declarar variveis locais. No possvel usar uma palavra-chave como um identificador. Por exemplo, var no um nome de varivel legal. Para obter uma lista de palavras-chave, consulte Sobre palavras-chave na pgina 146 e Sobre palavras reservadas na pgina 147. Literais representam valores que possuem um tipo especfico, como literais numricos ou literais de seqncias de caracteres. Os literais no so armazenados em uma varivel. Um literal um valor que aparece diretamente no cdigo e um valor constante (inaltervel) dentro dos documentos do Flash. Consulte tambm literal de funo e literal de seqncia de caracteres. Mtodos so funes associadas a uma classe. Por exemplo, sortOn() um mtodo interno associado classe Array. Voc tambm pode criar funes que funcionem como mtodos, para objetos com base em classes internas ou objetos com base nas classes criadas por voc. Por exemplo, no cdigo abaixo, clear() torna-se um mtodo de um objeto controller j definido: function reset(){ this.x_pos = 0; this.y_pos = 0; }

845

controller.clear = reset; controller.clear();

Os exemplos a seguir mostram como criar os mtodos de uma classe:


// ActionScript 1.0 - exemplo A = new Object(); A.prototype.myMethod = function() { trace("myMethod"); } // ActionScript 2.0 - exemplo class B { function myMethod() { trace("myMethod"); } }

um tipo de funo criada geralmente no cdigo do ActionScript para executar todos os tipos de aes. Para obter informaes e um exemplo, consulte Criando funes com nome na pgina 219.
Cdigo de objeto

Funo com nome

a linguagem ActionScript anexada a instncias. Para adicionar cdigo de objeto, selecione uma instncia no Stage (Palco) e depois crie o cdigo no painel Actions (Aes). No recomendvel anexar cdigo a objetos no Stage. Para obter informaes sobre as melhores prticas, consulte Melhores prticas e convenes de codificao para ActionScript 2.0 na pgina 767.

Objetos so colees de propriedades e mtodos; cada objeto tem seu prprio nome e uma instncia de uma classe especfica. Objetos internos so predefinidos na linguagem ActionScript. Por exemplo, a classe interna Date fornece informaes sobre o relgio do sistema.

so termos que calculam um novo valor de um ou mais valores. Por exemplo, o operador de adio (+) soma dois ou mais valores para produzir um novo valor. Os valores manipulados pelos operadores so denominados operandos.
Operadores Parmetros (tambm denominados argumentos) so espaos reservados que permitem passar valores para funes. Por exemplo, a funo welcome() a seguir usa os dois valores que recebe nos parmetros firstName e hobby: function welcome(firstName:String, hobby:String):String { var welcomeText:String = "Hello, " + firstName + ". I see you enjoy " + hobby +"."; return welcomeText; } Pacotes so diretrios que contm um ou mais arquivos de classes e residem em um diretrio

especfico do caminho da classe (consulte Sobre pacotes na pgina 242).

846

Terminologia

Scripts presos permitem prender vrios scripts de vrios objetos e trabalhar simultaneamente com eles no painel Actions (Aes). Esse recurso funciona melhor com o navegador Script.

gradualmente construdas 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 so atributos que definem um objeto. Por exemplo, length uma propriedade de todos os arrays que especifica o nmero de elementos do array. Sinais de pontuao

Imagens JPEG progressivas so

so caracteres especiais que ajudam a formar o cdigo do ActionScript. H vrios sinais de pontuao de linguagem no Flash. Os tipos mais comuns de sinais de pontuao so ponto-e-vrgula (;), dois-pontos (:), parnteses [()] e chaves ({}). Cada um desses sinais de pontuao tem um significado especial na linguagem do Flash e ajuda a definir tipos de dados, concluir instrues ou estruturar o ActionScript.

Script Assist um novo modo assistido no painel Actions (Aes). O Script Assist facilita a criao de scripts sem necessidade de conhecimento detalhado de ActionScript. Ele ajuda a criar scripts por meio da seleo de itens da caixa de ferramentas Actions no painel Actions e fornece uma interface com campos de texto, botes de opo e caixas de seleo para as variveis corretas e outros elementos de linguagem de script. Esse recurso semelhante ao modo normal de edies anteriores da ferramenta de criao do Flash.

um painel do painel Actions (Aes) ou da janela Script, e o local onde digitado o cdigo do ActionScript.
Janela Script

Painel Script

um ambiente de edio de cdigos onde possvel 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.

Instrues so elementos de linguagem que executam ou especificam uma ao. Por exemplo,

a instruo return retorna um resultado como um valor da funo na qual executada. A instruo if avalia uma condio para determinar a prxima ao que deve ser executada. A instruo switch cria uma estrutura ramificada para as instrues do ActionScript.
String

um tipo de dados. Consulte Sobre seqncias de caracteres e a classe String na pgina 477 para obter mais informaes.

uma seqncia de caracteres delimitados por aspas retas. Os prprios caracteres so um valor de dados, e no uma referncia aos dados. Um literal de seqncia de caracteres no um objeto String (Seqncia de caracteres). Para obter mais informaes, consulte Sobre seqncias de caracteres e a classe String na pgina 477.
Literal de seqncia de caracteres

847

Superfcie um clipe de filme, cujo sinalizador de cache de bitmap est ativo. Para obter informaes sobre cache de bitmap, consulte Armazenando um clipe de filme em cache na pgina 393. Sintaxe refere-se gramtica e ortografia da linguagem de programao utilizada. O compilador no compreende sintaxe incorreta; portanto, voc ver erros ou avisos exibidos no painel Output (Sada) ao tentar testar o documento no ambiente de teste. Assim, a sintaxe uma coleo de regras e diretrizes que ajudam a formar uma linguagem ActionScript correta.

so endereos hierrquicos de nomes de instncias de clipes de filme, variveis e objetos em um arquivo SWF. Voc pode dar um nome a uma instncia 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 ao em um clipe de filme, ou para obter ou definir o valor de uma varivel ou propriedade. Por exemplo, a seguinte instruo o caminho de destino da propriedade volume do objeto chamado stereoControl:
Caminhos de destino stereoControl.volume Texto equivale a uma ou mais seqncias de caracteres que podem ser exibidas em um campo de texto ou dentro de um componente de interface de usurio. Campos de texto so elementos visuais do Stage (Palco) que permitem exibir o texto para um

usurio e que podem ser criados usando a ferramenta Text (Texto) ou usando o cdigo do ActionScript. O Flash permite definir campos de texto como editveis (somente leitura), formatar como HTML, ativar suporte com vrias linhas, mascarar senhas ou aplicar uma folha de estilos CSS ao texto formatado como HTML.
Formatao de texto

pode ser aplicada a um campo de texto ou a determinados caracteres dentro de um campo de texto. Alguns exemplos de opes de formatao de texto que podem ser aplicadas ao texto so: alinhamento, recuos, negrito, cor, tamanho de fonte, larguras de margens, itlicos e espaamento entre letras.

so aquelas que no pertencem a nenhuma classe (algumas vezes chamadas de funes predefinidas ou internas), o que significa que podem ser chamadas sem um construtor. Exemplos de funes internas da linguagem ActionScript de alto nvel so trace() e setInterval();.
Funes de alto nvel Funes definidas pelo usurio

so aquelas criadas para serem usadas em aplicativos, em contraposio s funes de classes internas que executam funes predefinidas. Voc mesmo atribui um nome s funes e adiciona instrues ao bloco de funo.

848

Terminologia

Variveis so identificadores que contm valores de qualquer tipo de dados. possvel criar, alterar e atualizar variveis. 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 so variveis: var x:Number = 5; var name:String = "Lolo"; var c_color:Color = new Color(mcinstanceName);

Para obter mais informaes sobre variveis, consulte Sobre variveis na pgina 91.
Grficos vetoriais descrevem as imagens atravs de linhas e curvas, denominadas vetores, que tambm incluem propriedades de cor e posio. Cada vetor utiliza clculos matemticos, em vez de bits, para descrever a forma, o que permite seu dimensionamento sem deteriorao da qualidade. Um outro tipo de grfico o bitmap, representado por pontos ou pixels.

849

850

Terminologia

ndice

Smbolos
\" 487 \ 487 \b 487 \f 487 \n 487 \r 487 \t 487 \unnnn 487 \xnn 487 _lockroot, usando 786 _root, escopo 130

A
aes assncronas 664 aes, padres de codificao 782 Actions (Aes), painel Actions (Aes), caixa de ferramentas 37 codificao em 39 definida 841 menu pop-up 42 Navegador Script 37 Script, painel 38 sobre 36, 37 ActionScript comparando verses 73 configuraes de publicao 66 criando pontos de incio com 645 editando preferncias 44 Flash Player 798 formatao 53 sobre 71, 72 ActionScript 2,0 atribuindo a classe ActionScript 2.0 a clipes de filme 399

ActionScript 2.0 mensagens de erro do compilador 809 ActiveX, controles 696 ADFs 433, 436 ambiente de criao 841 anexando sons 601 animao brilho 553 com filtro de brilho 526 criando uma barra de progresso 654 filtros 559 taxa de quadros 499, 521 animao com script API de desenho 581 aplicando panormica a imagens 506 classes Tween e TransitionManager 509 criando uma barra de progresso 654 e classe Tween 559 e filtro de embaamento 559 e filtros 559 interpolao de brilho 504 movendo imagens 506 movendo objetos 505 sobre 498 animao, smbolos e 80 animaes contnuas 522 executadas continuamente 523 antiAliasType, propriedade 433, 437, 440 API de desenho desenhando crculos 572 desenhando curvas 569 desenhando formas especficas 567, 570 desenhando linhas, curvas e formas 568 desenhando retngulos 570 desenhando retngulos arredondados 571 desenhando tringulos 569, 572

851

e estilos de linha 574 linhas e preenchimentos 606 preenchimentos de gradiente complexos 573 sobre 567 API do aplicativo de desenho barra de progresso 666 usando 666 API External sobre 696 usando 697 aplicativos da Web, conexo contnua 690 argumentos Consulte parmetros definio 846 em funes com nome 220 armazenamento de bitmap em cache armazenando um clipe de filme em cache 393 ativando 389 definida 390 e mscaras de canal alfa 398 opaqueBackground, propriedade 390 quando evitar 393 quando usar 392 scrollRect 390 sobre 389 superfcies 389 vantagens e desvantagens 391 arquitetura baseada em componentes, definida 369 arquivo de classe diretrizes para organizao 788 estruturando 788 arquivos ASO 298 excluindo 299 usando 298 arquivos de classe externa usando os caminhos de classe para localizar 255 arquivos de configurao 69 arquivos de diretivas definida 736 devem receber o nome crossdomain.xml 737 Consulte tambm segurana arquivos de exemplo, sobre 15 arquivos do Flash 4, abrindo com o Flash 8 826 arquivos FLV Consulte tambmvdeo arquivos SWF carregados identificando 129 removendo 373 arquivos XML, atualizando para instalao do Flash 8 10

arquivos, carregando 674 arrastando clipes de filme 377 array associativo, sobre 181 array indexado 173, 178 arrays adicionando e removendo elementos 177 analogia 172 array associativo 182 array associativo usando o construtor Array 184 array associativo usando Object 183 associativos 181 atribuindo valores a 95 criando 95 e classe Object 185 e mtodo sortOn() 235 elementos de 172 exemplos de 172, 174 indexado 178 iterando uma matriz 180 matriz 179 modificando 172, 175 para criar objeto 115 passar por referncia 100 referncia e localizao de tamanho 176 sintaxe abreviada 172 sobre 172 usando 173 usando a sintaxe abreviada para criar 95 ASCII, definio 477 ASCII, valores 596 outras teclas 822 teclas de funo 821 teclas do teclado 818 teclas do teclado numrico 820 aspas, em seqncias de caracteres 84 associatividade de operadores 188 associatividade e precedncia de operadores 188 atenuao com cdigo 518 definindo 510 sobre 516 ativar a depurao remota 749 atribuio de nome, convenes 769 atribuio estrita de tipos de dados 91 atribuio forte de tipos de dados 86, 91 atribuindo nomes a classes e objetos, melhores prticas 776 atribuindo nomes a interfaces, melhores prticas 778 atribuindo nomes a pacotes, melhores prticas 777

852

ndice

B
balano (som), controlando 603 barra de progresso criando com cdigo 654 e API de desenho 666 para o carregamento de dados 666 bitmap grficos 842 texto 432 BitmapData, classe aplicando filtros a 532 com filtro de mapa de deslocamento 563 efeito de rudo 562 sobre 561 usando 562 Boolean tipo de dados 79 booleano valores 842 Bounce, classe de atenuao 516

C
cache de bitmap e filtros 530 sobre 508 cache, definio 842 cacheAsBitmap, propriedade 390 caixa de ferramentas Actions (Aes), itens em amarelo na 54 caixa de mensagem, exibindo 694 caminho de classe definida 255 excluir diretrio de 257 global 257 modificando 68 nvel de documento 257 pesquisar ordem de 258 sobre 68, 74 caminho de destino definio 848 e instncias aninhadas 127 e referenciando uma instncia 126 e sintaxe de ponto 125 inserindo 65, 131 usando 225 usando o boto 131 caminhos relativos 130

campo de distncia de exemplo de forma adaptvel (ADF) 433 campos de distncia de exemplo de forma adaptvel 436 campos de texto alterando dimenses 413 alterando posio 412 aplicando cascading style sheets 452 carregando texto 415 carregando variveis em 415 controlando mdia incorporada 473 criando dinamicamente durante a execuo 408, 410 definio 848 definindo a espessura 427 dynamic 405 e texto HTML 454 especificando dimenses de imagem 473 evitando conflitos de nome de varivel 410 exibindo propriedades para depurao 763 fazendo o texto fluir em torno de imagens incorporadas 461, 465 formatao 444 formatando com cascading style sheets 447 HTML, formatao 408 incorporando arquivos SWF ou de imagem 470 incorporando clipes de filme em 471 incorporando imagens clicveis em 474 manipulando 411 nomes de instncias 409 nomes de instncias e de variveis comparados 409 preenchendo com texto externo 417 propriedades padro 446 sobre 405 Consulte tambmTextField, classe; TextFormat, classe; e TextField.StyleSheet, classe capturando pressionamentos de teclas 596 caractere de alimentao de formulrio 487 caractere de aspas duplas 487 caractere de aspas duplas, em seqncias de caracteres 486 caractere de aspas simples 487 caractere de aspas simples, em seqncias de caracteres 486 caractere de barra invertida 487 caractere de escape 487 caractere de nova linha (newline) 487 caractere de tabulao 487 caracteres adicionando e removendo incorporados 420

ndice

853

definio 842 caracteres especiais 84 caracteres incorporados adicionando e removendo 420 usando com campos de texto 421 carregamento exibindo arquivos XML 419 mdia externa 620 carregando dados do servidor 110 variveis 111 cascading style sheets aplicando a campos de texto 452 aplicando classes de estilo 454 atribuindo estilos a marcas HTML internas 454 carregamento 450 combinando estilos 453 definindo estilos no ActionScript 451 e a classe TextField.StyleSheet 449 exemplo com marcas HTML 455 exemplo com marcas XML 458 formatando texto com 447 propriedades suportadas 448 usando para definir novas marcas 458 chamando mtodos 80 Character Embedding (Incorporao de caracteres), caixa de dilogo usando 425 chaves, verificando pares correspondentes 59 classe BitmapData usando 631 classe ExternalInterface sobre 696 usando 697 classe FileReference criando um aplicativo 676 e mtodo download() 675 e segurana 675 sobre 674 Classe LoadVars usando 670 verificando o status HTTP 672 Classe NetStream e manipulador onMetaData 650 classe NetStream usando o manipulador onMetaData 650 classe XML, mtodos 684 classes acessando propriedades internas 313 atribuio de nome a arquivos de classe 280

atribuindo a clipes de filme 399 atribuindo a uma instncia no Flash 295 atribuindo um escopo 787 caminhos de classe 255 chamada de mtodos de objetos internos 314 classes flash.display 308 classes flash.external 309 classes flash.filters 309 classes flash.geom 310 classes flash.net 311 classes flash.text 311 classes mx.lang 311 classes System e TextField 312 como plantas arquitetnicas 243 como tipos de dados 240 comparadas a interfaces 332 compilador resolvendo referncias 258 compilando e exportando 296 controlando o acesso de membros 288 criando dinmicas 274 criando e empacotando 281 criando mtodos e propriedades 285 criando personalizadas 249 criando um arquivo de classes 259 criando um exemplo personalizado 278 criando uma instncia de 294 criando uma nova instncia de classe interna 313 criando uma subclasse 322 definida 313 documentao 290 e arquivos ASO 298 e escopo 277, 299 e funes construtoras 283 e herana 319 e polimorfismo 327 e variveis de instncia 288 em comparao com pacotes 243 encapsulamento 276 excluindo classes internas 315 exemplo de herana 322 importando 254 importando e empacotando 292 inicializando propriedades durante a execuo 401 instanciamento 240 internas e de nvel superior 302 melhores prticas para criao 279 membros de classe 265 membros estticos de classes internas 315 mtodos e propriedades 260 mtodos getter/setter 270

854

ndice

nvel superior 304 organizando em pacotes 242 pr-carregando 316 propriedades de 262 propriedades e mtodos estticos 264 propriedades e mtodos privados 263 propriedades e mtodos pblicos, privados e estticos 262 resolvendo referncias de classe 258 sobre internas 241 substituindo mtodos e propriedades 324 superclasse 321 trabalhando com internas 312 trabalhando com personalizadas 252 usando classes personalizadas no Flash 291 usando mtodos getter/setter 271 vantagem de usar 241 Consulte tambm classes internas classes dinmicas 274 clipes de filme adicionando parmetros 383 ajustando cor 599 alterando cor e brilho 502 alterando propriedades durante a reproduo 376 alterando propriedades no Debugger 753 anexando a smbolo no Stage (Palco) 381 anexando manipuladores on() e onClipEvent() 356 aninhados definidos 369 aplicar filtro de brilho 526 arrastando 377 ativando com teclado 598 atribuindo estados de boto a 361 atribuindo uma classe personalizada a 295 background 396 carregando arquivos MP3 em 626 carregando arquivos SWF e JPEG em 621 chamando mtodos 371 chamando vrios mtodos 372 compartilhando 381 controlando 370 criadas dinamicamente, referenciando 128 criando durante a execuo 378 criando subclasses 399 criando uma instncia vazia 379 detectando colises 604 determinando profundidade de 387 determinando prxima profundidade disponvel 386 duplicando 381 e instruo with 372

_root, propriedade 374 efeitos de fade com cdigo 500 excluindo 381 executando repetio em filhos 164 filho, definido 369 funes 371 gerenciando profundidade 385 incorporando em campos de texto 470 inicializando propriedades durante a execuo 401 iniciando e parando 591 listando objetos 761 listando variveis 762 mtodos e funes comparadas 370 mtodos, listados 371 mtodos, usando para desenhar formas 567 nome de instncia definida 369 pai, definido 369 propriedade filtros 550 propriedades 376 propriedades, inicializando durante a execuo 401 removendo 381 tipo de dados 80 usando como mscaras 397 Consulte tambm SWF, arquivos clipes de filme aninhados definidos 369 clipes de filme pai 369 clone(), mtodo sobre 560 usando 561 codificao de caracteres 477 codificando texto 61 cdigo etapas, copiando e colando 13 exibindo nmeros de linha 55, 56 formatao 53, 54 percorrendo as linhas 757 quebra automtica de linha 55, 56 selecionando uma linha 755 cdigo de objeto, definio 846 cdigos de teclas ASCII obtendo 596 outras teclas 822 teclado numrico 820 teclas alfabticas e numricas 818 teclas de funo 821 coleta de lixo 791 colises, detectando 604 entre clipes de filme 605 entre um clipe de filme e um ponto no Stage (Palco) 604

ndice

855

com instruo 794 comentrios dentro de classes 142 desordenados 139 e sinalizao da sintaxe por cores 140 em arquivos de classe 290 escrevendo em arquivos de classe 781 finais 142 linha nica 140 melhores prticas 780 sobre 139 vrias linhas 140 comparao, operadores 200 compartilhando fontes sobre 429 componente FLVPlayback buscar ponto de incio 648, 649 buscar uma durao especificada 647 criando pontos de incio para trabalhar com 645 e o mtodo seek() 647 e pontos de incio 644 usando pontos de incio com 645 componentes de texto 405 componentes, convenes de codificao 778 comportamento da transio Zoom 511 comportamentos sobre 65 transio Zoom 511 comunicando com o Flash Player 692 concatenando seqncias de caracteres 84 condies escrita 151 condies, sobre 151 conexes de soquete script de exemplo 691 sobre 690 configuraes de publicao ActionScript 66 escolhendo a verso do Flash Player 74 modificando 67 modificando o caminho de classe 68 Conjunto de caracteres universais (UCS - Universal Character Set) 478 conjuntos de caracteres criando conjunto personalizado 426 conjuntos de caracteres personalizados, criando 425, 426 constantes definio 842 melhores prticas 775

sobre 143 usando 144 contadores, repetindo ao com 162, 163 contornos de fontes 436 controles do teclado e Test Movie 746 para ativar clipes de filmes 598 convenes de atribuio de nome 769 Booleanas 775 classes e objetos 776 funes e mtodos 775 interfaces 778 pacotes 242, 777 variveis 51, 772 convenes de codificao ActionScript 782 componentes 778 convenes tipogrficas 13 convertendo objetos 116 convertendo tipos de dados 76 cores na caixa de ferramentas Actions (Aes) 54 valores, definindo 599 criando objetos 313 criando seqncias de caracteres 486 CSM sobre 433 sobre parmetros 433 CSS. Consulte cascading style sheets cursores, criando personalizados 594 CustomFormatter, classe sobre 613 usando 613

D
dados definio 75 e variveis 75 organizando em objetos 114 sobre 75 dados carregados, verificando 665 dados externos 663, 707 acesso entre SWFs de domnios diferentes 734, 738 e mensagens 692 e objeto LoadVars 670 e objeto XMLSocket 690 e scripts de servidor 668 e XML 683

856

ndice

enviando e carregando 664 recursos de segurana 727 verificando o carregamento 664 data barra de carregamento e progresso 666 vinculando com componentes 607 de rolagem e cache de bitmap 508 Debug Player 745 Debugger ativar a depurao remota 749 botes no 758 definindo pontos de interrupo 755 Flash Debug Player 745 guia Properties 753 Lista de observao 752 selecionando no menu de contexto 750 usando 745 variveis 750 Delegate, classe sobre 366 usando 366 depurando 745 com instruo trace 764 de um local remoto 748 Debug Player 745 listando objetos 761 listando variveis 762 mensagens de erro do compilador 809 propriedades de campo de texto 763 usando o painel Output 759 desempenho cache de bitmap 508 e filtros 533 e taxa de quadros 499 desenhando com cdigo 567 detectando colises 604 dicas de ferramenta. Consulte referncias de cdigo dimensionamento em 9 trechos ativando 585 noes bsicas 583 propriedade scale9Grid 585 sobre 583 usando 585 distino entre maisculas e minsculas e verso do Flash Player 123 sobre 122 do..while, loops 170 documentao PDF, onde encontrar 15

documentao, recursos adicionais 17 DOM (Document Object Model, Modelo de objetos de documentos) XML 683 drawingAPI com classes Tween e TransitionManager 581 duplicando clipes de filme 381

E
edio do ActionScript exibindo caracteres ocultos 57 ferramenta Find (Localizar) 58 importando e exportando scripts 60 nmeros de linha 55 prender scripts 63 quebra automtica de linha 55 realce de sintaxe 54 referncias de cdigo 51 teclas de atalho de Escape 56 verificar sintaxe 59 editor de mtodo de entrada sobre 482 usando 482 Editor do ActionScript 841 efeito de rudo 562 efeitos aplicando panormica a uma imagem 506 brilho 552 brilho e cor 502 efeitos de fade 500 escala de cinza 503 interpolao de brilho 504 modos de mistura 565 rudo 562 efeitos de fade em objetos 500 efeitos. Consulte filtros elementos, de um array 172 eliminao de serrilhado personalizada definio 432 encapsulamento sobre 248 usando 276 endereos IP arquivos de diretivas 737 segurana 728 enviando informaes em formato XML 664 formato de cdigo URL 664 para arquivos remotos 664

ndice

857

via TCP/IP 664 equilbrio da pontuao, verificando 59 erro de falta de memria 533 Escape, teclas de atalho de 56 escopo em classes 787 melhores prticas 784 sobre 130 this, palavra-chave 365 escrevendo o ActionScript com instruo 794 prefixo super 792 trace 792 escrevendo sintaxe e instrues ouvinte 806 return 805 switch 805 especificao ECMA-262 121 estilos linha 574 trao e acabamento 574 estilos de acabamento definindo 575 sobre 574 estilos de acabamento, definindo 574 estilos de linha alfa 577 capsStyle e jointStyle 578 cor 577 dimensionando 578 e API de desenho 574 espessura 576 estilos de trao e acabamento 574 miterLimit 581 parmetros 576 pixelHinting 577 sobre 574 estilos de trao 574 estilos, trao e acabamento 574 evento do usurio 347 eventos definio 843 definidos 347 e clipes de filme 399 transmitindo 360 exibidores antigos, especificando 825 exportando scripts e codificao de idioma 61 expresses definio 844 manipulando valores em 185

expresses condicionais 160 Extensible Markup Language. Consulte XML

F
filho clipes de filme, definidos 369 n 683 filtro de brilho animar 526 sobre 542 usando 542 filtro de brilho gradiente sobre 543 usando 543 filtro de chanfro sobre 545 usando 545 filtro de chanfro gradiente aplicando 551 aplicando a um clipe de filme 551 array de cores 548 array de propores 548 distribuio de cores 548 e preenchimento 547 e preenchimento do clipe de filme 550 e propriedade strength 547 e propriedades blurX e blurY 547 e propriedades knockout e type 547 e realce 550 sobre 547 usando 549 valor de proporo e ngulo 550 filtro de convoluo sobre 554 sobre a aplicao 554 usando 555 filtro de embaamento animado com a classe Tween 559 sobre 536 usando e animando 536 filtro de mapa de deslocamento aplicando a uma imagem 563 com classe BitmapData 563 sobre 556 usando 556 filtro de matriz de cores sobre 552 usando 503, 552

858

ndice

filtro de sombreamento animando 540 aplicando a uma imagem transparente 541 e mtodo clone() 560 sobre 538 usando 538 filtros ajustando propriedades 558 alterando o nvel de brilho 553 animando 559 aplicando a instncias 532 array 558 definindo 526 e ActionScript 534 e desempenho 533 e erro de falta de memria 533 e manipulao de erros 533 e transparncia 534 e uso da memria 533 filtro de brilho 526 girando e inclinando 531 girando, inclinando e dimensionando 532 manipulando com cdigo 557 modificando propriedades 530 noes bsicas sobre pacotes 528 obtendo e definindo 530 rudo 562 Flash 8, recursos novos e alterados do ActionScript 19 Flash Player classes, sobre 303 comunicando com 692 configuraes de publicao 74 dimensionando arquivo SWF para 693 e ActionScript 798 exibio normal de menu 693 exibindo em tela cheia 693 exibindo ou esmaecendo o menu de contexto 693 mtodos 696 obtendo a verso mais recente 765 padres de codificao 798 verso de depurao 746 Flash Player 4 criando contedo para 826 Flash Player 7 novo modelo de segurana 729, 736, 742 portando scripts existentes 708 Flash Player 8 elementos de linguagem novos e alterados 22 elementos de linguagem obsoletos 28

recursos novos e alterados do editor do ActionScript 28 Flash Player, recipiente definio 844 Flash Video Consulte vdeo FlashType sobre 430 suporte ao Flash Player 430 FlashVars sobre 415 usando para exibir texto 416 FlashVars, propriedade sobre 415 FLV, arquivos carregando arquivos externos durante a execuo 635 configurando o servidor para FLV 652 criando uma barra de progresso 659 criando uma faixa FLV 636 e Macintosh 653 metadados 650 navegando com cdigo 647 pontos de incio 640, 641 pr-carregando 639 pr-carregando vdeo externo 639 trabalhando com pontos de incio 643 vdeo externo 633 folhas de estilos. Consulte cascading style sheets fontes adicionando e removendo 420 compartilhando 429 definio 420 sobre 420 valores-limite 436 fontes de dispositivo definio 432, 843 mascarando 398 fontes incorporadas incorporando um smbolo de fonte 423 usando com a classe TextField 427 for, loops 166 exemplo 180 for..in, loops 167 formatao de texto definio 848 sobre 439 formatadores personalizados sobre 612 usando 612

ndice

859

formatando cdigo 53, 54 formatando texto usando 440 formato de cdigo URL, enviando informaes 664 formato MIME, padro 669 fscommand(), funo comandos e argumentos 693 comunicando com o Director 695 usando 692 funo bloco de funo 219 funo annima criando 220 definida 841 usando 222 funo loadMovie() 665 funo loadVariables() 665 funes aninhadas 234 assncronos 664 atribuindo nome 226 bloco de funo 220 chamando funes de nvel superior 218 como caixa preta 214 comparando com nome e annimas 228 constructor 830 construtoras 223 converso 76 criando e chamando 227 criando funes annimas 220 criando funes com nome 219 definio 844 definindo 224 definindo globais e de timeline 224 em comparao com mtodos 236 em um arquivo de classe 229 especificando e chamando funes definidas pelo usurio 225 exemplo 846 formato padro para funes com nome 219 internas e de nvel superior 217 literal de funo 222 melhores prticas 795 nvel superior 216 para controlar clipes de filme 371 passando parmetros para 231 personalizadas 213 retornando valores de 233 retorno de chamada 221 reutilizando 227

sintaxe de funo com nome 214 sobre 213 tipos de 215 usando no Flash 227 usando uma funo com nome 219 usando variveis em 230 funes com nome 220 funes com nomes definio 846 funes construtoras criando 223 definio 842 exemplo 830 funes de converso e tipos de dados 76 funes de nvel superior definio 848 funes de retorno de chamada criando 221 definio 842 funes definidas pelo usurio criando 225 definio 848 funes internas 217 funes personalizadas 213

G
getAscii(), mtodo 596 getURL(), mtodo 592 global, variveis 102 glyphRange, n, sobre 425 grficos vetoriais 849

H
herana e programao orientada a objeto (OOP) 247 e subclasses 320 exemplo 322 sobre 319 hitTest(), mtodo 604 HTML atribuindo estilos a marcas internas 454 campo de texto 408 exemplo de uso com estilos 455 marcas entre aspas 462 marcas suportadas 462 usando a marca <img> para fazer o texto fluir 461, 465, 470

860

ndice

usando cascading style sheets para definir marcas 458 usando em campos de texto 461 HTTP, protocolo com mtodos do ActionScript 664 comunicando com scripts de servidor 668 HTTPS, protocolo 664

I
cones acima do painel Script 40 no Debugger 758 IDE (Integrated Development Environment, Ambiente de desenvolvimento integrado), definio 844 identificadores definidos 844 idiomas, usando vrios em scripts 61 igualdade, operadores 200 imagem em escala de cinza 503 imagem JPEG progressiva, definio 847 imagens aplicando modos de mistura 565 carregando em clipes de filme 375 Consulte tambm mdia externa incorporando em campos de texto 470 IME (Input Method Editor, Editor de mtodo de entrada) sobre 482 usando 482 import sobre a instruo 528 usando caractere curinga 529 vrias classes de um pacote 528 importando arquivos de classe 254 scripts e codificao de idioma 61 indo para um URL 592 informaes, transferindo entre arquivos SWF 664 inicializao, escrevendo o ActionScript 790 inicializando propriedades de clipe de filme 401 instanciamento de objetos 313 definida 240 instncias 500 aninhadas, referenciando 127 aplicando filtros a 532 definio 845 definida 313 dinmicas, referenciando 128

e programao orientada a objeto (OOP) 246 referenciando 126 instruo return 805 instruo try..catch..finally, escrevendo 158, 806 instrues compostas 150 compostos 804 condicionais 152 condicional 802 definio 120, 847 diretrizes para escrever 149 for 804 if 152 if..else 153 if..else if 154 importando 245 instrues trace 764 sobre 149 switch 156 try..catch..finally 158, 806 while e do while 805 with 794 instrues compostas 150 escrevendo 804 instrues condicionais escrevendo 802 instrues for, escrevendo 804 instrues if..else if, escrevendo 154 instrues if..else, escrevendo 153 instrues switch convenes 805 usando 156 instrues trace, escrevendo o ActionScript 792 interatividade em arquivos SWF criando 589 tcnicas para 593 interfaces atribuindo nome 334 criando 335 criando como tipo de dados 337 definindo e implementando 334 e programao orientada a objeto (OOP) 247 exemplo 340 exemplo de interface complexa 342 noes bsicas de herana e 339 sobre 331 interpolaes adicionando com comportamentos 511 adicionando com o ActionScript 513 interrompendo (percorrendo) cdigo 757

ndice

861

interrompendo clipes de filme 591

usando 162 while 169

J
janela Script codificao em 39 opes de menu 42 sobre 36, 38 JavaScript e ActionScript 121 e Netscape 695 enviando mensagens para 694 instruo alert 764 padro internacional 121 JPEG, arquivos carregando em clipes de filme 375, 621 incorporando em campos de texto 470

M
Macromedia Director, comunicando com 695 manipulao de erros e filtros 533 manipuladores. Consulte manipuladores de eventos manipulando nmeros 82 marcas de ID3 630 mscaras 397 e fontes de dispositivo 398 e mscaras de canal alfa 398 escrevendo scripts para criar 581 traos ignorados 397, 567 mscaras de canal alfa 398 matrizes sobre 178 usando um loop for 180 matrizes, sobre 178 MediaPlayback, componente usando pontos de incio com 646 melhores prticas atribuindo nome a variveis 772 Booleanas, atribuindo nomes 775 classes e objetos, atribuindo nomes 776 comentrios 780 comentrios em classes 781 convenes de codificao 769 escopo 784 funes 795 funes e mtodos, atribuindo nomes 775 interfaces, atribuindo nomes 778 nomes a constantes, atribuindo 775 pacotes, atribuindo nomes 777 membros (mtodos e propriedades) pblicos, privados e estticos 262 membros de classe 246, 315 sobre 246 membros estticos 315 membros estticos. Consulte membros de classe mensagens de erro 809 metadados sobre 650 usando 650 mtodos assncronos 664 atribuindo nome 237 de objetos, chamando 314

L
layout de texto 439 liberando scripts no painel Actions (Aes) 64 linhas 574 Linkage Properties (Propriedades de vinculao), caixa de dilogo 381, 399 List Objects (Listar Objetos), comando 761 List Variables (Listar Variveis), comando 762 literais de funo definio 844 literais, definio 845 literal de array 178 literal de funo redefinindo 223 sobre 222 literal de objeto 184 literal de seqncia de caracteres 847 LiveDocs, sobre 16 LoadVars, classe carregando variveis de arquivo de texto 418 usando para exibir texto 417 Locale, classe sobre 480 usando 480 loops aninhados 171 criando e terminando 165 do..while 170 for 166 for..in 167

862

ndice

definio 845 definida 235 e arrays 235 em comparao com funes 236 para controlar clipes de filme 371 private 263 pblicos 262 sobre 213, 235 static 264 tipos de 215 mtodos de desenho Consulte tambm API de desenho mtodos getter sobre 270 usando 271 mtodos manipuladores de eventos anexao a objetos 359 anexando a botes ou clipes de filme 355 atribuindo funes a 350 definio 844 definidos 347 definidos por classes do ActionScript 348 e manipuladores on() e onClipEvent() 355 escopo 362 no ActionScript 2.0 365 verificando dados XML 665 mtodos setter sobre 270 usando 271 mdia externa 619 carregando arquivos MP3 657 carregando arquivos SWF e de imagem 655 carregando arquivos SWF e JPEG 621 carregando imagens e arquivos SWF 621 componente ProgressBar 624 criando animaes da barra de progresso 654 e a timeline raiz 625 motivos para usar 619 MP3, arquivos 626 pr-carregando 639, 654 reproduzindo arquivos FLV 633 sobre o carregamento 620 modelo de evento para manipuladores on() e onClipEvent() 355 para mtodos manipuladores de eventos 349 para ouvintes de eventos 351 modo Script Assist sobre 62 modos de mistura aplicando 565

sobre 564 modos de mistura.Consulte modos de mistura modulao de trao contnua 433 mouse, ponteiro do. Consulte cursores MovieClip, classe ajustando a propriedade filters 558 e propriedade scale9Grid 585 mtodos de desenho 567 propriedade blendMode 564 propriedade filters 530 moviename_DoFSCommand, funo 694 MP3, arquivos carregamento 626, 627 carregando em clipes de filme 626 criando uma barra de progresso 657 lendo marcas de ID3 630 marcas de ID3 630 pr-carregando 628, 639

N
navegao controlando 589 indo para quadro ou cena 591 Navegador Script 37 Netscape, mtodos JavaScript suportados 695 nveis carregando 373 nveis, identificando a profundidade 129 nome totalmente qualificado definindo 528 usando 528 nomes de domnio e segurana 728 nomes de instncia e caminhos de destino 125 nomes de instncias comparados com nomes de variveis 409 definio 845 definida 369 ns 683 null, tipo de dados 81 nmeros de linha em cdigo, exibindo 55, 56 nmeros, manipulando com mtodos 82

O
objeto LoadVars, criando 670 objeto transmissor 351 objeto XMLSocket

ndice

863

loadPolicyFile 740 mtodos 691 usando 690 verificando dados 665 objetos acessando propriedades 313 chamando mtodos 314 criando 95, 114, 313 criando no Flash 114 definio 846 efeito fade-out 500 executando repetio em filhos de 164 organizando dados em arrays 115 padres de codificao 783 tipo de dados 83 objetos ouvintes 351 cancelando o registro 352 obtendo a posio do ponteiro do mouse 595 obtendo informaes de arquivos remotos 664 on() e onClipEvent(), manipuladores 355 anexando a clipes de filme 356 escopo 362 onEnterFrame, e taxa de quadros 499 opaqueBackground, propriedade definida 390 usando 396 opo Pin Script (Prender script) no painel Actions (Aes) 64 opes de renderizao de texto 432 opes de sinalizao da sintaxe por cores, definindo no painel Actions (Aes) 55 operador condicional 160 operadores aditivos 198 associatividade 188 combinando com valores 185 comparao 193 condicionais 160, 200, 210 de atribuio 187, 204 de atribuio, usando 204 de igualdade 200 de ponto e acesso de array 194 definio 846 deslocamento bit a bit 207 expresses matemticas 185 lgicos 205, 206 lgicos bit a bit 208 manipulando valores 187 multiplicativos 197 numricos 198

obsoletos 815 operandos 186 ps-fixados 196 precedncia e associatividade 188 relacionais 200 relacionais e de igualdade 200 sobre 185 unrios 197 usando com seqncias de caracteres 192 usando no Flash 210 operadores de acesso de array, verificando pares correspondentes 59 operadores Flash 4 obsoletos 815 operadores relacionais 200 operandos 186 ordem de execuo (operador) associatividade de operadores 188 precedncia de operadores 188 ordem de operao 567 organizao de scripts anexao a objetos 783 convenes de codificao 782 organizando scripts ActionScript 1.0 e ActionScript 2.0 73 origens externas, conectando o Flash com 663, 707 Output (Sada), painel 759 contedo, copiando 760 e instruo trace 764 exibindo 760 List Objects (Listar Objetos), comando 761 List Variables (Listar Variveis), comando 762 opes 760 ouvintes de eventos 351 classes que podem transmitir 351 escopo 362

P
pacotes atribuindo nome 242 definio 846 em comparao com classes 243 importando 245 sobre 242 trabalhando com 244, 528 padro de design Singleton 267 padres de design encapsulamento 276 Singleton 267

864

ndice

palavra-chave extends 321 sintaxe 321 sobre 321 palavra-chave interface 333 palavras reservadas Consulte tambm palavras-chave lista 147 nomes de classe interna 148 outras recomendaes 149 palavras reservadas futuras 148 sobre 147 palavras-chave _root 131 definio 845 extends 321 interface 333 lista 147 sobre 143 this 130 usando 146 parmetros 219, 846 parnteses, verificando pares correspondentes 59 percorrendo as linhas de cdigo 757 polimorfismo sobre 249 usando 327 ponteiro. Consulte cursores ponto de registro e imagens carregadas 375 pontos de incio criando 645 exibindo 643 navegao, evento e ActionScript 641 rastreando 641 trabalhando com 643 usando 640 pontos de interrupo definindo no Debugger 755 e arquivos externos 755 sobre 755 XML, arquivo 756 pontos de interrupo, definindo e removendo na janela Script 755 no painel Actions (Aes) 755 pontos finais 611 posio do mouse, obtendo 595 prticas recomendadas ActionScript 1 e ActionScript 2.0 73 preferncia Default Encoding 61 prefixo super 792 prefixos, super 792

prendendo scripts definio 847 na Timeline 63 prendendo um script 64 pressionamentos de teclas, capturando 596 profundidade definida 385 determinando instncia em 387 determinando para clipes de filme 387 determinando prxima disponvel 386 gerenciando 385 programao orientada a objeto 246 Programao orientada a objeto (OOP) criando classes personalizadas 249 design 276 e encapsulamento 248 e herana 247 e interfaces 247 e objetos 246 e polimorfismo 249 instncias e membros de classe 246 sobre 240, 246 Programao orientada a objeto. Consulte Programao orientada a objeto (OOP) projetores, executando aplicativos em 693 Properties, guia do Debugger 753 propriedade FlashVars usando 109 propriedades de clipes de filme 376 de objetos, acessando 313 definio 847 inicializando durante a execuo 401 private 263 public 262 static 264 propriedades de objetos atribuindo valores a 313

Q
quebra automtica de linha em cdigo, ativando 55, 56

R
propriedade _root e clipes de filme carregados 374 recuo no cdigo, ativando 54 recursos adicionais 14

ndice

865

recursos on-line 17 referncia e escopo 130 referenciando contedo carregado 128 referncias de cdigo 47 ativando 47, 51, 53 especificando configuraes para 48 exibindo manualmente 50 sobre 47 usando 48 removendo arquivos SWF carregados 373 clipes de filme 381 renderizao de fontes mtodos 431 opes 432 sobre 430 repetindo aes, usando loops 162 repetindo instrues 162, 163 reproduzindo clipes de filme 591 RGBA (RGB com alfa) 552 rolagem texto 475

S
scale-9 sobre 583 scale-9. Consulte dimensionamento em 9 trechos Script Assist, modo definio 847 Script, janela definio 847 sobre o arquivo XML de pontos de interrupo 756 Script, painel botes acima 40 definio 847 scripts atalhos de teclado para scripts presos 64 corrigindo problemas de exibio de texto 61 criando para manipular eventos 35 depurando 745 eventos de clipe 33 eventos de teclado 33 importando e exportando 61 onde criar 31 organizando cdigos 34 portando para o Flash Player 7 708

prendendo no lugar 63 scripts de quadro 33 sobre eventos 32 testando 745 scripts de quadro sobre 33 scripts de quadros definio 844 scripts do servidor criando 680 formato XML 685 linguagens 664 scrollRect, propriedade 390 segurana acesso a dados entre domnios 734 compatibilidade do Flash Player 708 e arquivos de diretivas 736 e portando scripts para o Flash Player 7 729, 736, 742 entre domnios 727 loadPolicyFile 738, 740 sem serrilhado definio 841 para animao e legibilidade 432 senhas e depurao remota 748 seqncias de caracteres 84 analisando 488 comparando 488 comparando com outros tipos de dados 490 convertendo e concatenando 491 convertendo maisculas/minsculas 492 criando 486 criando um array de subseqncias de caracteres 493 definio 478, 847 determinando o comprimento 488 encontrando a posio do caractere 495 encontrando a subseqncia de caracteres 494 examinando caracteres 489 forando comparaes de tipos 491 repetindo em 489 retornando subseqncias de caracteres 494 sobre 477 usando 486 seqncias de caracteres. Consulte seqncias de caracteres seqncias de escape 84 serrilhado, definio 841 Servidor Web IIS 6.0 653 servidores, abrindo conexo contnua 690

866

ndice

setInterval e taxa de quadros 499 usando 501 setRGB, mtodo 599 smbolos de fonte, incorporando 423 sintaxe de barra 131 distino entre maisculas e minsculas 123, 124 verificando 59 sintaxe de barra no suportada no ActionScript 2.0 131 sobre 131 usando 828 sintaxe de ponto (notao de ponto) 125 sintaxe do ouvinte 806 sintaxe ps-dois-pontos, definio 87 sistema evento, definido 347 requisitos, para o ActionScript 2.0 9 sites depurando 748 remotos, comunicando com 664 remotos, conexo contnua 690 solucionando problemas. Consulte depurando sons anexando Timeline 601 Consulte tambm mdia externa controlando 601 controle de balano 603 Stage (Palco), anexando smbolos a 381 String, classe concat(), mtodo 493 e mtodos substr() and substring() 494 length, propriedade 488, 491 mtodo charAt() 489 mtodo toString() 491 sobre 477, 485 split(), mtodo 493 toLowerCase() e toUpperCase(), mtodos 492 Strings (Seqncias de caracteres), painel 479 subclasses criando 321 criando para clipes de filme 399 exemplo 322 subclasses, sobre 320 superclasse 321 superfcies cache de bitmap 848 definida 389 SWF, arquivos

carregando e descarregando 373 carregando em clipes de filme 621 controlando no Flash Player 696 criando controles de som 601 escalando para o Flash Player 693 incorporando em campos de texto 470 indo para quadro ou cena 591 inserindo em pgina da Web 592 mantendo o tamanho original 693 transferindo informaes entre 664 Consulte tambm clipes de filme

T
tabelas de fontes criando 437 definindo 436 valores-limite 436 taxa de quadros com a classe Tween 521 e onEnterFrame 499 escolhendo 499 sobre 499 TCP/IP, conexo com objeto XMLSocket 691 enviando informaes 664 tecla Tab e Test Movie 746 teclado atalhos para scripts presos 64 valores de cdigos de teclas ASCII 818 teclado numrico, valores de cdigos de teclas ASCII 820 teclas de funo, valores de cdigos de teclas ASCII 821 tempo de compilao, definido 13 tempo de execuo, definido 13 terminologia, ActionScript 841 Test Movie e controles do teclado 746 e Unicode 746 testando. Consulte depurando TextField, classe criando texto de rolagem 475 usando 406 TextField, mtodos, usando 427 TextField.StyleSheet, classe 447 criando estilos de texto 451 e cascading style sheets 449 e propriedade TextField.styleSheet 447, 452

ndice

867

TextFormat, classe sobre 439 usando 444 texto atribuindo a campo de texto durante a execuo 407 carregando e exibindo 416, 417, 419 codificando 61 definio 848 rolagem 475 terminologia 403 usando a marca <img> para fazer o texto fluir em torno das imagens 465 Consulte tambm campos de texto texto de entrada 405 texto dinmico 405 texto esttico 405 texto sem serrilhado criando tabela 437 definio, propriedade 440 definindo a propriedade antiAliasType 433 espessura 440 limitaes 431 modificando definio e espessura 440 sobre 430 suporte 431 suporte ao Flash Player 430 usando 433 valor avanado 433 valor normal 433 this, palavra-chave 130, 617 como prefixo 790 e escopo 130 em classes 277 escopo 277 usando 786 tipo de dados complexo (valor de dados) 77 tipo de dados MovieClip, definio 80 tipo de dados primitivo (valor de dados) 77 tipo de dados Void 85 tipo MIME 652 tipos de ajustes grade, usando 442 tipos de dados anotaes 91 atribuindo 87 atribuindo automaticamente 85 bsicos 76 Boolean 79 complexos 77 convertendo 76

definio 76, 843 determinando o tipo 90 e valores 245 MovieClip 80 null 81 Number 82 Object 83 primitivos 77 String 84 undefined 85 void 85 traos definindo estilos 574 definindo parmetros 576 transferindo variveis entre filme e servidor 670 transies adicionando com comportamentos 511 adicionando com o ActionScript 513 definindo 512 Transition, classe animando o nvel de brilho 553 TransitionManager, classe com a classe Tween 524 com API de desenho 581 e atenuao 510 sobre 509 usando 513 transparncia, e mscaras 398 Tween, classe animando filtros de embaamento 559 animando o nvel de brilho 553 com a classe TransitionManager 524 com API de desenho 581 definindo a durao de quadros 520 e atenuao 510 efeitos de fade em objetos com 519 importando 518 manipulador de eventos onMotionFinished 523 mtodo continueTo() 522, 524 mtodo yoyo() 523, 524 para ativar a animao concluda 521 propriedade _alpha 524 sobre 509, 517 usando 513, 518

U
UCS (Universal Character Set, Conjunto de caracteres universais), definio 478

868

ndice

undefined, tipo de dados 85 Unicode cdigo de caracteres 477 definio 478 e o comando Test Movie 746 suporte 61 UTF-16, padro de codificao 478 UTF-8 (Unicode) 61, 478

V
valores e tipos de dados 245 manipulando em expresses 185 Variables (Variveis), guia do Debugger 750 variveis alterando o valor 94 atribuindo nome 51 atribuindo valores 93 carregando 106, 110 carregando do arquivo de texto externo 418 carregando em campos de texto 415 codificadas em URL 106 comparando indefinidas e definidas 98 convertendo em XML 685 declarando 93 definio 91, 849 definindo atravs de um caminho 129 diretrizes e regras de atribuio de nome 96 e escopo 101 e guia Debugger Variables (Variveis do depurador) 750 e lista de observao do Debugger 752 e operadores 96 enviando para URL 592 evitando conflitos de nome 410 instncia 288 locais 104 modificando no Debugger 751 passando de HTML 416 passando por referncia 100 passando valores de uma seqncia de caracteres de URL 106 timeline 103 transferindo entre clipe de filme e servidor 670 usando 99 usando em um aplicativo 97 usando em um projeto 111 usando FlashVars para passar 109

valores padro 93 variveis de URL, sobre 106 variveis globais 102 varivel de timeline, sobre 103 varivel local, sobre 104 vrios idiomas, usando em scripts 61 verificao de tipo definio 89 dinmica 90 exemplo 89 verificando dados carregados 665 sintaxe e pontuao 59 vdeo adicionando a funcionalidade de busca 647 buscar ponto de incio 648, 649 buscar uma durao especificada 647 configurando o servidor para FLV 652 criando arquivos FLV 633 criando um objeto de vdeo 634 criando uma barra de progresso para carregar FLV 659 criando uma faixa 636 e Macintosh 653 metadados 650 navegando em um arquivo FLV 647 pontos de incio 640 pr-carregando 639 rastreando pontos de incio 641 reproduzindo arquivos FLV durante a execuo 635 sobre 632 sobre arquivos FLV externos 633 trabalhando com pontos de incio 643 usando o manipulador onMetaData 650 Vdeo FLV. Consulte vdeo vdeo, alternativa para importao 633 View Options (Opes de exibio), menu pop-up 55, 56, 57 vinculao convenes de codificao 778 identificador 381, 399 vinculao de dados durante a execuo com CheckBox 611 criando uma vinculao bidirecional 610 sobre 607 vinculao de dados, com o ActionScript 607 vinculaes criando com o ActionScript 608 criando uma vinculao bidirecional 610 criando uma vinculao unidirecional 608

ndice

869

vinculando clipes de filme 381 vinculando componentes com o ActionScript 615 volume, criando controle deslizante 602

W
Watch (Observao), guia do Debugger 752 while, loops 169

X
XLIFF, arquivos 480 XML 683 carregando e exibindo texto 419 converso de variveis de exemplo 684 DOM 683 em scripts do servidor 685 enviando informaes com mtodos XML 664 enviando informaes via soquete TCP/IP 664 exemplo de uso com estilos 458 hierarquia 683 XML Localization Interchange File Format (XLIFF) 480

870

ndice

Você também pode gostar