Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brunobispo

[Artigo] Event.COMPLETE ou Event.INIT?

Recommended Posts

Vejo alguma confusão nos desenvolvedores a respeito destes eventos. Alguns pensam que fazem exatamente a mesma coisa, outros pensam que o uso de um apresentaria mais desempenho que do outro. Já posso adiantar que são eventos diferentes para propósitos diferentes.

 

Primeiro, um trecho da descrição de cada evento na referência da Adobe. Estas descrições são referentes à classe LoaderInfo, responsável por transmitir as informações dos arquivos carregados através da classe Loader.

 

Event.COMPLETE

 

Despachado'>http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/flash/display/LoaderInfo.html#event:complete"]Despachado quando os dados foram carregados com êxito. Em outras palavras, ele será despachado quando todo o conteúdo tiver sido baixado e o carregamento estiver finalizado. O evento complete é sempre despachado após o evento init. O evento init é despachado quando o objeto está pronto para acesso, embora o conteúdo ainda esteja sendo baixado.

 

Event.INIT

 

Enviado'>http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/flash/display/LoaderInfo.html#event:init"]Enviado quando as propriedades e os métodos de um arquivo SWF carregado estão acessíveis e prontos para uso. O conteúdo, entretanto, ainda pode estar sendo baixado. Um objeto LoaderInfo despacha o evento init quando existem as seguintes condições:

  • Todas as propriedades e métodos associados ao objeto carregado e ao objeto LoaderInfo estão acessíveis.
  • Os construtores para todos os objetos-filho foram concluídos.
  • Todos os códigos ActionScript do primeiro quadro da linha de tempo principal do SWF carregado foram executados.
Por exemplo, um Event.INIT é despachado quando o primeiro quadro de um filme ou animação é carregado. O filme fica acessível e pode ser adicionado à lista de exibição. No entanto, o filme completo pode levar mais tempo para ser baixado. O Event.COMPLETE é despachado somente quando o filme todo está carregado.

O evento init sempre precede o evento complete.

 

Normalmente, quando você faz um filme e quer que ele tenha um preloader, você põe seu preloader no primeiro frame e também o método stop(). Você põe stop() porque se não o filme irá continuar executando mesmo se não estiver completamente carregado. Ou seja, os frames que vão sendo carregados, vão sendo exibidos. Isso é stream.

 

Na verdade, o conceito é bastante simples: Se você quisesse carregar este filme em um outro swf e quisesse que ele só fosse exibido quando estivesse completamente carregado sem nem deixar seu preloader aparecer, usaria Event.COMPLETE; Caso quisesse que o filme aparecesse logo que o primeiro frame for carregado e exibir de lá seu preloader fazendo o carregamento, usaria Event.INIT.

 

Alguem pode dizer "Ah, mas eu uso Event.COMPLETE e faço meu próprio preloader no filme pai para mostrar o porcentagem de carregamento dos filmes filhos e funciona". Está correto. Afinal, você já está mostrando um outro preloader e só quer que seu filme filho apareça quando estiver totalmente carregado. Se você usasse Event.INIT nesse caso, ficaria com dois preloaders aparecendo.

 

Quando vamos carregar arquivos de qualquer outro tipo (que não SWF), este eventos não fazem a menor diferença. Ambos são chamados em sequência. Apesar da Adobe dizer que o Event.COMPLETE é disparado sempre após Event.INIT, já que não se trata de um filme, não significa que um evento vai lhe trazer mais desempenho que outro. A Adobe apenas teve o luxo de fazer disparar Event.INIT mesmo não se tratando de um SWF. Sendo assim, pelo simples fato lógico de que dois eventos não poderiam ser executados no exato mesmo instante (dã! afinal só se executa um método por vez), um é executado logo em seguida do outro.

 

Conclusão

 

  • Se você está carregando imagens, PDFs, TXTs, etc., Event.INIT para você será exatamente igual Event.COMPLETE;
  • Se você estiver carregando SWFs e quiser um evento que seja disparado quando seu primeiro frame é carregado, você deve usar Event.INIT para isso;
  • Se você estiver carregando SWFs e quiser um evento que seja disparado quando ele estiver completamente carregado, use Event.COMPLETE.

Fiz um exemplo do carregamento de um SWF e coloquei online aqui e para baixar aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi brunobispo.

O link para download está ok, mas o arquivo RAR está com O KB, mensagem de formato desconhecido ou danificado.

Você merece o meu respeito pela forma como compartilha o conhecimento que possui.

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi brunobispo.

O link para download está ok, mas o arquivo RAR está com O KB, mensagem de formato desconhecido ou danificado.

Você merece o meu respeito pela forma como compartilha o conhecimento que possui.

Um abraço.

 

Obrigado por avisar, Elektra. Já arrumei o link.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.