A partir de um arquivo SWF de Flash, você pode carregar outros arquivos SWF externos como ativos. Existem várias razões para carregar arquivos SWF externos:

  • Uma vez que um projeto pode ser separado em vários filmes, os arquivos SWF individuais são menores. Arquivos menores são carregados com mais rapidez e gerenciam a memória com mais eficiência.  
  • Eles permitem que você carregue somente o conteúdo necessário com base no que o usuário faz no filme.
  • Vários arquivos SWF podem ser reproduzidos sucessivamente sem que o navegador precise carregar outra página HTML. A página não tem a pausa ou a atualização associadas ao carregamento.
  • Isso oferece mais flexibilidade quanto à organização dos ativos do projeto.
  • Pode ser criada uma interface de usuário complexa que não dependa de um único arquivo SWF. Muitos arquivos SWF podem ser combinados para criar a interface. A combinação de arquivos SWF simplifica a edição, porque um arquivo SWF individual menor pode ser revisado sem afetar as outras partes da interface.
  • Vários autores podem colaborar no mesmo projeto trabalhando em arquivos FLA separados.

Colocar conteúdo em um arquivo SWF separado é semelhante a colocar conteúdo em seu próprio símbolo de clipe de filme. A diferença é que o conteúdo existe fora do arquivo SWF principal. Você também pode carregar arquivos de imagem, como JPG, PNG, GIF.

Para carregar um arquivo SWF externo de outro arquivo SWF, use um dos seguintes:

  • A classe Loader do ActionScript 3.0
  • O comando loadMovie do ActionScript 2.0
  • A classe MovieClipLoader do ActionScript 2.0

Usar a classe Loader do ActionScript 3.0

A classe Loader no ActionScript 3.0 é uma subclasse de DisplayObject usada para carregar e exibir conteúdo externo. Para carregar o arquivo SWF, você usa o método carregar da classe. O método carregar tem um parâmetro obrigatório, uma ocorrência URLRequest que contém o endereço URL do conteúdo a ser carregado.

O exemplo de código a seguir cria uma ocorrência Loader e carrega um arquivo SWF externo chamado "myExternalMovie.swf."

var myLoader:Loader = new Loader();                     // create a new instance of the Loader class
var url:URLRequest = new URLRequest("ExternalSWF.swf"); // in this case both SWFs are in the same folder 
myLoader.load(url);                                     // load the SWF file
addChild(myLoader);                                     // add that instance to the display list, adding it to the Stage at 0,0

// (optional)
myLoader.x = 10;                                        // move the loaded SWF 10 pixels to the right (from the left edge)   
myLoader.y = 175;                                       // move the loaded SWF 175 pixels down from the top

// (optional) load a second external SWF file
var my2ndLoader:Loader = new Loader();
var url2:URLRequest = new URLRequest("ExternalSWF2.swf");
my2ndLoader.load(url2);
addChild(my2ndLoader);                                  // optionally, you could put the 2nd SWF beneath 
                                                        // the 1st by using addChildAt(my2ndLoader, 1);
                                                        // displacing the 1st SWF from position 1 to 2 in the display list

// (optional) scaling of the 2nd SWF file
my2ndLoader.scaleX = 2;                                 // scale the SWF horizontally by 200%
my2ndLoader.scaleY = 2;                                 // scale the SWF vertically by 200%

O URL do arquivo SWF que está sendo carregado pode ser relativo ou absoluto. Consulte Caminhos relativos, abaixo, para obter mais informações sobre como o Flash Player manipula URLs. Para obter mais informações sobre a classe Loader , consulte Loader na Referência de linguagem ActionScript da plataforma.

Referências a raiz, quando disponíveis, sempre refletem o objeto de exibição superior na parte da estrutura em árvore da lista de exibições representado por esse arquivo SWF. (Para imagens, raiz faz referência ao objeto Bitmap.)

Observação: no ActionScript 3.0, não há equivalente à propriedade _lockroot ou _level do ActionScript 2.0. Consulte Fundamentos da programação de exibição no Guia do desenvolvedor do ActionScript 3.0.

Usar o comando loadMovie do ActionScript 2.0

O comando loadMovie carrega um arquivo SWF externo ou imagem em um MovieClip ou outro nível do filme pai no ActionScript 2.0.

O comando loadMovie tem duas formas diferentes:

  • Método MovieClip.loadMovie: o método MovieClip é usado para carregar conteúdo externo em uma ocorrência de clipe de filme específicas.
  • Função loadMovie global: a função loadMovie global pode ser usada para carregar conteúdo em filmes ou níveis. A versão global também tem duas variantes, loadMovie e loadMovieNum. A primeira variação carrega conteúdo em filmes ou níveis e a segunda (loadMovieNum) carrega especificamente em níveis.

MovieClip.loadMovie

Ao carregar conteúdo externo em ocorrências de clipe de filme, a Adobe recomenda o uso da versão do método MovieClip de loadMovie. Essa versão é chamada diretamente do clipe de filme no qual o conteúdo será carregado e o URL do conteúdo será passado.

myMovieClipInstance.loadMovie("myExternalMovie.swf");  // here only the filename is given, indicating the SWF file 
                                                       // is in the same folder as the parent SWF.

O URL do conteúdo a ser carregado pode ser relativo ou absoluto. Para obter mais informações sobre como o Flash player manipula URLs, consulte Caminhos relativos, abaixo.

Quando carregado, o conteúdo é exibido dentro do clipe de filme do recipiente. O local e outras propriedades básicas do clipe de filme do recipiente são retidos. Contudo, quaisquer propriedades personalizadas ou funções definidas dentro do clipe de filme do recipiente não estão mais presentes. O novo conteúdo substitui todo conteúdo anterior (incluindo manipuladores de código e evento, como onRelease). Assim, nenhuma tentativa de usar um manipulador de evento onLoad para o clipe de filme funcionará. Nesse caso, use a classe MovieClipLoader (consulte abaixo). Para obter mais informações sobre MovieClip.loadMovie, consulte MovieClip.loadMovie na Referência de linguagem do ActionScript 2.0.

loadMovie e loadMovieNum globais

O comando loadMovie também existe como uma função global. Essa função tem dois parâmetros obrigatórios, o URL do conteúdo externo e o destino no qual o conteúdo é carregado. O parâmetro de destino pode ser uma seqüência de caracteres ou uma referência. As linhas a seguir são equivalentes a carregar "myExternalMovie.swf" na ocorrência de clipe de filme chamada myContainer:

loadMovie("myExternalMovie.swf", myContainer);    // the target myContainer is an object reference
loadMovie("myExternalMovie.swf", "myContainer");  // the target "myContainer" is a string

loadMovie também pode carregar conteúdo em diferentes níveis do Flash player. Níveis no Flash player são como camadas de player. Vários filmes podem ser reproduzidos na mesma ocorrência do Flash player sem estarem aninhados um dentro do outro. Cada nível representa uma raiz única em que filmes podem ser reproduzidos independentemente de filmes em outros níveis (não é necessário usar _lockroot).

Você pode fazer referências a níveis em ActionScript usando _level seguido de um número que representa o número do nível. O primeiro filme carregado no Flash Player está em _level0. Mais níveis podem ser adicionados sobre esse nível. A chamada a seguir de loadMovie carrega "myExternalMovie.swf" no nível 1 sobre o filme atual em reprodução do player.

loadMovie("myExternalMovie.swf", "_level1");

Uma variação da função loadMovie global é loadMovieNum. Este método é exatamente igual a loadMovie, exceto que somente tem níveis como destino, e por número, não por nome. Para carregar um arquivo SWF externo no nível 1 (_level1), por exemplo, use o seguinte:

loadMovieNum("myExternalMovie.swf", 1);

Ao carregar em níveis, a Adobe recomenda usar loadMovieNum sobre loadMovie. Para obter mais informações, consulte loadMovie global na Referência de linguagem do ActionScript 2.0.

Use _lockroot para impedir _root conflitos

Ao carregar um filme externo em outro filme, a referência _root do clipe de filme carregado muda da linha de tempo principal para a linha de tempo do filme que o carregou. Em outras palavras,  _root sempre faz referência à linha de tempo superior na hierarquia. Se você não desejar que _root faça referência à linha de tempo superior, defina a propriedade de _lockroot da linha de tempo principal do clipe de filme carregado como verdadeiro. Essa propriedade informa todos os filhos da linha de tempo que, ao fazerem referência a _root, façam referência a essa linha de tempo.

this._lockroot = true;     // add this code in the main timeline of the SWF file that will be loaded into another SWF

Observação: a propriedade de _lockroot está disponível somente ao publicar em Flash Player 7 ou posterior.

 Usar a classe MovieClipLoader do ActionScript 2.0

A classe MovieClipLoader no ActionScript 2.0 foi projetada para tornar mais fácil o processo de carregamento de conteúdo externo em ocorrências de MovieClip. Como mencionado anteriormente, variáveis e funções definidas em clipes de filme são removidas quando um novo conteúdo é carregado nesses clipes de filme. Retornos de chamada como onLoad não são possíveis. Contudo, MovieClipLoader contorna essa restrição ao funcionar como substituto desses eventos. Você cria ocorrências separadas de MovieClipLoader para gerenciar o carregamento de conteúdo em outro clipe de filme. Assim, não ocorre a limpeza de variáveis ou funções dentro desse clipe de filme.

Ao carregar conteúdo em um clipe de filme através da classe MovieClipLoader, primeiro crie uma nova ocorrência da classe. Em seguida use loadClip para carregar conteúdo em um clipe de filme de destino. No exemplo a seguir, o novo conteúdo está sendo carregado no clipe de filme myContainer.

var myLoader:MovieClipLoader = new MovieClipLoader();
myLoader.loadClip("myExternalMovie.swf", myContainer);

Se desejar saber se o conteúdo foi carregado, use um manipulador de evento onLoadInit com a ocorrência de MovieClipLoader.

var myLoader:MovieClipLoader = new MovieClipLoader(); 
myLoader.addListener(this); 
myLoader.loadClip("myExternalMovie.swf", myContainer); 

function onLoadInit(mc:MovieClip) 
    { 
        trace("content has been loaded into "+mc); 
    }

Quando desejar ter mais controle sobre as informações relacionadas ao carregamento de conteúdo em um clipe de filme, use a classe MovieClipLoader de MovieClip.loadMovie. (Por exemplo, use esse manipulador de evento quando desejar poder verificar o andamento do carregamento.) Para obter mais informações sobre a classe MovieClipLoader, consulte MovieClipLoader na Referência de linguagem do ActionScript 2.0.

Observação:  a classe MovieClipLoader somente está disponível ao publicar no Flash Player 7 ou posterior.

 Usar caminhos relativos para carregar conteúdo

O uso de caminhos relativos com Loader e loadMovie pode ser confuso. Uma vez que a linha de tempo de qualquer arquivo SWF ou clipe de filme pode executar uma ação loadMovie, pergunte-se: "a qual linha de tempo o filme que está sendo carregado é relativo"? É relativo à linha de tempo principal em _level0? Ou à linha de tempo que executou a ação de carregamento do filme? A resposta é simples: filmes carregados são sempre relativos à linha de tempo que os carregou. Para uma discussão sobre caminhos relativos, que é relevante também para o carregamento de arquivos SWF externos, consulte URLs relativas não referenciadas corretamente | Flash (tn_04157).

Considerações de taxa de quadros

Na maioria dos casos, um filme carregado herda a taxa de quadros do filme pai. Por exemplo, um arquivo SWF cuja taxa de quadros é 12 qps é reproduzido a 24 qps quando carregado em um filme cuja taxa de quadros é 24 qps. A única exceção é se o filme que está sendo carregado contém um som na linha de tempo cuja sincronização está definida como "stream". Somente nesse caso o filme principal herda a taxa de quadros do filme carregado para garantir a reprodução correta desse som.

Observação: ActionScript 3.0 permite a alteração dinâmica da taxa de quadros usando a propriedade Stage.frameRate.

Palavras-chave: Flash Player, carregar filme; ActionScript; redigir script; níveis; avisar ao destino; variáveis: destino; instância; SWF; loadMovie; tn_14190

Esta obra está licenciada sob uma licença não adaptada da Creative Commons Attribution-Noncommercial-Share Alike 3.0  As publicações do Twitter™ e do Facebook não são cobertas pelos termos do Creative Commons.

Avisos legais   |   Política de privacidade online