Exemplo de clipe de filme: RuntimeAssetsExplorer

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

A funcionalidade Exportar para ActionScript pode ser especialmente vantajosa para bibliotecas que podem ser úteis em mais de um projeto. Se o Flash Player ou o AIR executar um arquivo SWF, os símbolos exportados para o ActionScript ficarão disponíveis para qualquer arquivo SWF dentro da mesma caixa de proteção de segurança que o SWF que o carregar. Dessa forma, um único documento Flash pode gerar um arquivo SWF exclusivamente designado para manter ativos gráficos. Essa técnica é especialmente útil para projetos grandes nos quais os designers que lidam com ativos visuais podem trabalhar em paralelo com os desenvolvedores que criam um arquivo SWF "empacotador" que carrega o arquivo SWF de ativos gráficos em tempo de execução. Você pode usar esse método para manter uma série de arquivos de versão nos quais os ativos gráficos não dependem do progresso do desenvolvimento de programação.

O aplicativo RuntimeAssetsExplorer carrega qualquer arquivo SWF que for uma subclasse de RuntimeAsset e permite navegar pelos ativos disponíveis desse arquivo SWF. O exemplo ilustra o seguinte:

  • Carregamento de um arquivo SWF externo usando Loader.load()

  • Criação dinâmica de um símbolo de biblioteca exportado para o ActionScript

  • Controle do ActionScript de reprodução de MovieClip

Antes de começar, observe que cada arquivo SWF a ser executado no Flash Player deve estar localizado na mesma caixa de proteção de segurança. Para obter mais informações, consulte Caixas de proteção de segurança .

Para obter os arquivos de aplicativos dessa amostra, efetue o download de Amostras do Flash Professional . Os arquivos de aplicativo RuntimeAssetsExplorer podem ser encontrados na pasta Samples/RuntimeAssetsExplorer. O aplicativo consiste nos seguintes arquivos:

Arquivo

Descrição

RuntimeAssetsExample.mxml

ou

RuntimeAssetsExample.fla

A interface do usuário do aplicativo para Flex (MXML) ou Flash (FLA).

RuntimeAssetsExample.as

Classe de documento para o aplicativo Flash (FLA).

GeometricAssets.as

Uma classe de exemplo que implementa a interface RuntimeAsset.

GeometricAssets.fla

Um arquivo FLA vinculado à classe GeometricAssets (a classe de documento do FLA) contendo símbolos que são exportados para o ActionScript.

com/example/programmingas3/runtimeassetexplorer/RuntimeLibrary.as

Uma interface que define os métodos necessários esperados de todos os arquivos SWF de ativos de tempo de execução que serão carregados no contêiner do explorador.

com/example/programmingas3/runtimeassetexplorer/AnimatingBox.as

A classe do símbolo de biblioteca na forma de uma caixa de rotação.

com/example/programmingas3/runtimeassetexplorer/AnimatingStar.as

A classe do símbolo de biblioteca na forma de uma estrela de rotação.

Estabelecimento de uma interface de biblioteca de tempo de execução

Para que o explorador interaja adequadamente com uma biblioteca SWF, a estrutura das bibliotecas de ativos de tempo de execução deve ser formalizada. Faremos isso criando uma interface, que é semelhante a uma classe pois trata-se de um projeto de métodos que demarca uma estrutura esperada, mas, diferentemente de uma classe, não inclui nenhum corpo de método. A interface fornece um meio de comunicação ente a biblioteca de tempo de execução e o explorador. Cada SWF de ativos de tempo de execução que for carregado em nosso navegador implementará essa interface. Para obter informações sobre interfaces e como elas podem ser úteis, consulte Interfaces em Aprendizado do ActionScript 3.0 .

A interface RuntimeLibrary será bem simples: precisamos apenas de uma função que forneça ao explorador uma matriz de caminhos de classe para os símbolos a serem exportados e disponibilizados na biblioteca de tempo de execução. Para esse fim, a interface possui um único método: getAssets() .

package com.example.programmingas3.runtimeassetexplorer 
{ 
    public interface RuntimeLibrary 
    { 
        function getAssets():Array; 
    } 
}

Criação do arquivo SWF da biblioteca de ativos

Ao definir a interface RuntimeLibrary, é possível criar vários arquivos SWF de biblioteca de ativos que podem ser carregados em outro arquivo SWF. A criação de uma biblioteca SWF individual de ativos envolve quatro tarefas:

  • Criação de uma classe para o arquivo SWF da biblioteca de ativos

  • Criação de classes para ativos individuais contidos na biblioteca

  • Criação dos ativos gráficos em si

  • Associação de elementos gráficos a classes e publicação do SWF da biblioteca

Criação de uma classe para implementar a interface RuntimeLibrary

Em seguida, criaremos a classe GeometricAssets que implementará a interface RuntimeLibrary. Ela será a classe de documento do FLA. O código para essa classe é muito semelhante à interface RuntimeLibrary; a diferença entre eles é que, na definição da classe, o método getAssets() possui um corpo de método.

package 
{ 
    import flash.display.Sprite; 
    import com.example.programmingas3.runtimeassetexplorer.RuntimeLibrary; 
     
    public class GeometricAssets extends Sprite implements RuntimeLibrary  
    { 
        public function GeometricAssets() { 
             
        } 
        public function getAssets():Array { 
            return [ "com.example.programmingas3.runtimeassetexplorer.AnimatingBox", 
                     "com.example.programmingas3.runtimeassetexplorer.AnimatingStar" ];     
        } 
    } 
}

Se fôssemos criar uma segunda biblioteca de tempo de execução, criaríamos outro FLA com base em outra classe (por exemplo, AnimationAssets) que fornece sua própria implementação de getAssets() .

Criação de classes para cada ativo MovieClip

Para este exemplo, iremos apenas estender a classe MovieClip sem adicionar nenhuma funcionalidade aos ativos personalizados. O seguinte código para AnimatingStar é análogo ao de AnimatingBox:

package com.example.programmingas3.runtimeassetexplorer 
{ 
    import flash.display.MovieClip; 
     
    public class AnimatingStar extends MovieClip 
    { 
        public function AnimatingStar() { 
        } 
    } 
}

Publicação da biblioteca

Agora, iremos conectar os ativos baseados no MovieClip à nova classe, criando um novo FLA e inserindo GeometricAssets no campo Classe do documento do Inspetor de propriedades. Para fins deste exemplo, criaremos duas formas básicas que suam uma interpolação de linha de tempo para fazer uma rotação no sentido horário em 360 quadros. Os símbolos animatingBox e animatingStar são definidos para Exportar para ActionScript e o campo Classe é definido com os respectivos caminhos de classe especificados na implementação de getAssets() . A classe base padrão de flash.display.MovieClip permanece, pois desejamos subclassificar os métodos MovieClip padrão.

Depois de definir as configurações de exportação do símbolo, publique o FLA. Agora, sua primeira biblioteca de tempo de execução está pronta. Se esse arquivo SWF fosse carregado em outro arquivo SWF AVM2, os símbolos AnimatingBox e AnimatingStar ficariam disponíveis para o arquivo SWF.

Carregamento da biblioteca em outro arquivo SWF

A última questão funcional a ser resolvida é a interface do usuário para o explorador de ativos. Neste exemplo, o caminho para a biblioteca de tempo de execução é codificado como uma variável chamada ASSETS_PATH . Se preferir, você pode usar a classe FileReference, por exemplo, para criar uma interface que navegue para um arquivo SWF específico do seu disco rígido.

Quando a biblioteca de tempo de execução é carregada com êxito, o Flash Player chama o método runtimeAssetsLoadComplete() :

private function runtimeAssetsLoadComplete(event:Event):void 
{ 
    var rl:* = event.target.content; 
    var assetList:Array = rl.getAssets(); 
    populateDropdown(assetList); 
    stage.frameRate = 60; 
}

Nesse método, a variável rl representa o arquivo SWF carregado. O código chama o método getAssets() do arquivo SWF carregado, obtendo uma lista de ativos que estão disponíveis e os usa para preencher um componente ComboBox com uma lista de ativos disponíveis, chamando o método populateDropDown() . Esse método por sua vez armazena o caminho de classe completo de cada ativo. Ao ser clicado, o botão Adicionar da interface do usuário dispara o método addAsset() :

private function addAsset():void 
{ 
    var className:String = assetNameCbo.selectedItem.data; 
    var AssetClass:Class = getDefinitionByName(className) as Class; 
    var mc:MovieClip = new AssetClass(); 
    ... 
}

que obtém o caminho de classe do ativo atualmente selecionado no ComboBox ( assetNameCbo.selectedItem.data ) e usa a função getDefinitionByName() (do pacote flash.utils) para obter uma referência real para a classe do ativo a fim de criar uma nova ocorrência desse ativo.