GUILHERME G.G. (137 pts)

LUIZ AVANCI (51 pts)

JOÃO NETO (78 pts)

NILTON BICALHO (61 pts)

ILVA RUDEV (90 pts)

EDUARDO WALMOTT (226 pts)

SYDNEY GANHO (60 pts)

DAAFY (55 pts)

IRAPUAN MARTINEZ (45 pts)

RICARDO TAKAHASHI (180 pts)

DENIS CARAVALHO (85 pts)

JOTA LAGO (40 pts)
Treinamento PontoFlash de Flash e ActionScript

Como se faz para que um botão de um filme de flash torne uma layer feita no dreamweaver visível ou invisível?

Como fazer um ponteiro como o do jogo da Fortuna, que faz N giros e depois para?

Como faço pra colocar múltiplas senhas e múltiplos usuários num FlashMovie?

Problemas com actions condicionais.

Como validar campos de um formulário com javascript?

Como trabalhar com o onLoad em arquivos externos no MX?

Tenho uma variável que só abre na timeline principal, dentro do MovieClip não.

Como faço para definir a cor de um objeto digitando um código hexadecimal num campo de texto?

Como faço um stop and play no som.

Quero colocar a data escrita por extenso em português no flash?

Como criar um sitema de senha e login usando apenas o Flash?

Como faço para trocar imagens bitmaps sem ter que abrir o FLA?

Dá pra fazer um CD com uma animação em sincronia com um som?

Como faço para contar o tempo de duração de uma corrida num labirinto?
Objeto Array

Alterar a parência dos componentes do FlashMX.

Sistema de busca utilizando Flash + ASP.

Imagem Pixel a Pixel no PhotoShop.

Envio de um arquivo SWF por e-mail

Local Shared Objects segunda parte.

Texto difuso

Preloader com máscara

Quando usar vetor ou bitmap?

Turbine seu Fireworks

Frases randômicas

Número randômicos sem repetições no Flash 4.
Slicemenu

Motioncomflip

Slide desk

Lace

Cmponente Radio Button

Random block

Sound_control

3d zoom

Trocaalphadofundo

Fakeload

Starshiner

Super menu
HOME | TUTORIAIS
Entendendo como funciona um preloader. Terceira parte.
por Ricardo Takahashi

1 / 2 / 3

 

Dicas rápidas:

Preloader para arquivos externos

 

onClipEvent (load) {
   _parent.alvo.loadMovie("arquivo.swf");
   _parent.stop();
}

onClipEvent (enterFrame) {
   totalBytes = _parent.alvo.getBytesTotal();
   if (totalBytes>0) {
   bytesLoaded = _parent.alvo.getBytesLoaded();
      if (bytesLoaded == totalBytes) {
         _parent.play();
      }
   }
}

A lógica aplicada aqui é bem simples: Ao invés de se pegar o total de bytes do movie externo no evento load do movieclip, nós o fazemos no evento enterframe. O erro do pessoal está justamente aqui: muitas costumam copiar-colar os códigos, mas não sabem exatamente como eles funcionam. Checar o total de bytes de um filme no evento load é quase que padrão para todo mundo, porém para arquivos externos isso não pode ser feito, pois o flash executa um bloco de informações muito rápido e antes que ele receba a informação de bytes, ele já passa para o próximo bloco de instruções. Então ao se verificar o tamanho de bytes de um arquivo externo, ele sempre resultará em 0.

    Outro dia até brinquei falando que isso era o cúmulo da velocidade: "Trancar a gaveta com a chave dentro". Mas essa é a verdade!!!

    Voltando ao código... repare que além de fazer a verificação das duas variáveis (bytesLoaded e bytesTotal) eu ainda faço uma verificação de condicional (if) para verificar se o valor de totalBytes é maior que 0 (zero), se for, significa que o preloader já tem as informações necessárias para fazer o carregamento.

    Para se aplicar isso em loadMovie para _levels apenas substitua o "_parent.alvo" por "_levelX", onde X é o número do level.

Preloader de multiplos arquivos simultaneamente

Outra dúvida comum do pessoal, mas fácil de ser contornada. Com base no exemplo anterior, basta adicionar mais algumas variáveis para verificação. Simples! =))

 

onClipEvent (load) {
   _parent.alvo1.loadMovie("arquivo1.swf");
   _parent.alvo2.loadMovie("arquivo2.swf");
   _level2.loadMovie("arquivo3.swf");
   _parent.stop();
}

onClipEvent (load) {
   partBytes1 = _parent.alvo1.getBytesTotal();
   partBytes2 = _parent.alvo2.getBytesTotal();
   partBytes3 = _level2.getBytesTotal();
   if (partBytes1>0 && partBytes2>0 && partBytes3>0) {
      bytesLd1 = _parent.alvo1.getBytesLoaded();
      bytesLd2 = _parent.alvo2.getBytesLoaded();
      bytesLd3 = _level2.getBytesLoaded();
      totalBytes = partBytes1+partBytes2+partBytes3;
      bytesLoaded = bytesLd1+bytesLd2+bytesLd3;
      if (bytesLoaded == totalBytes) {
         _parent.play();
      }
   }
}

 Mesma explicação para o exemplo anterior, ressaltando apenas a soma das variáveis para verificação do carregamento total ou parcial dos arquivos.

Nota: Para ambos os exemplos, caso você queira parar a execução do arquivo externo, basta inserir um stop() na primeira verificação de condicional direcionando para o alvo. Por exemplo, para parar a execução do filme carregado no movieclip alvo, basta adicionar _parent.alvo.stop(). Não se esqueça de adicionar um play depois para poder executar o filme!!!

  Preloader com arquivos sendo exportados na biblioteca do flash

Na verdade você não consegue fazer isso, porém, pode utilizar um técnica bem simples para driblar esse problema.

    Antes de explicar isso, gostaria de falar sobre uma das minhas "teorias" para se contornar esse problema:

    "Eu recebi alguns emails de pessoas que estavam tendo este tipo de problema, como fazer o preloader funcionar quando você tinha objetos sendo exportados na biblioteca. Claro que pintou uma super "teoria" (que depois de racicionar mais, vi que eu tava falando um monta de besteira!!!)

    Bom, minha idéia era que, se todos os objetos que estão na biblioteca são carregados antes de qualquer (qualquer coisa mesmo) outro item do filme, você poderia criar um movieclip "preloader" dentro de outro movieclip, para que, ao ser carregado, ele executasse o loader do filme. Claro que em teoria isso é "brilhante" porém, para anexar o movieclip no stage era preciso utilizar AS para tal. Porém, o AS deveria ficar no frame 1. Aí estava o problema... Para executar o maldito frame 1 ele teria que carregar todos os outros itens primeiro.

    Que burrice a minha!!! Até peço desculpas para o pessoal que me perguntou sobre isso e eu passei essa informação!!!

    Agora voltando ao que interessa: Eu pensei em duas soluções para o caso (uma para o Flash 5 e outra para o MX - que se você contar bem podem ser até 3, pois o do flash 5 também funciona no MX :)) !!!).

Flash 5

Como o flash 5 não permite escolher se você quer exportar o filme no primeiro frame ou não, você pode simplesmente utilizar o código para carregamento de arquivos múltiplos (mostrados aqui neste tutorial) para ter esse valor.
    Ao invés de você exportar esses objetos no seu filme principal, você apenas precisa escolher a opção de importar (na opção "Linkage") o objeto de outro arquivo swf (Uma sugestão minha: biblioteca.swf). No código do preloader você utiliza duas variáveis, uma pegando o valor de bytes (total e recebidos) do filme principal e outro do filme externo (biblioteca.swf).

    Eis uma ilustração prática disso que eu falei:

 

onClipEvent(load){
     _level99.loadMovie("biblioteca.swf");
    _parent.stop ();
}

onClipEvent
(enterFrame) {
    partBytes = _level99.getBytesTotal();

    if (partBytes> 0) {
        bytesLd = _level99.getBYtesLoaded();
        totalBytes = partBytes + _parent.getBytesTotal();
        bytesLoaded = bytesLd + _parent.getBYtesLoaded();
        if (bytesLoaded == totalBytes) _parent.play();
    }
}

Se pintar dúvidas como exportar/ compartilhar objetos entre swf's, abra o flash e pressione F1!!!

Flash MX

Além da opção anterior, no flash MX você utilizar algo mais simples:

    Na opção de exportar no primeiro frame ou não, basta não selecionar a opção "export in first frame". No seu filme flash a única alteração que você vai precisar fazer é abrir um novo frame no seu filme. Uma boa dica seria deixar: no primeiro frame o preloader, no segundo frame os itens da biblioteca que você vai utilizar dinamicamente e do terceiro frame em diante você começa seu filme.

    Ah! Claro, no seu preloader, ao invés de dar um play() quando estiver tudo carregado, você precisa direcionar para o frame (gotoAndPlay ou gotoAndStop) após o frame que contém os objetos.

Considerações finais

Acredito que agora você poderá montar seu próprio preloader. Porém, algumas coisas importantes devem ser ressaltadas.

    1. Esse nosso tutorial foi desenvolvido todo ele dentro de um movieclip. Porém, nada impede que você o faça na timeline principal.
    Basta alterar o código do preloader. Veja um exemplo:

1° frame
total = getBytesTotal();

2° Frame
loaded = getBytesLoaded();

3° Frame
(total == loaded) ? play() : gotoAndPlay(2)

As outras opções seguem esse mesmo exemplo. Não é mais necessário utilizar _parent ou _root, pois a função getBytesTotal() e getBytesLoaded() vai retornar os bytes da timeline as quais estão subordinados.

    2. Você deve ter em mente que o preloader é a primeira coisa que vai aparecer no seu site, portanto, não adianta criar um preloader cheio de animações e efeitos e deixá-lo "pesado", pois o carregamento dessas animações se fará de forma gradual e poderá causar um péssimo efeito visual. Além de causar aquele "vazio" antes do preloader começar.

    3. Para alterar comando if com uma única linha, caso você sinta a necessidade de adicionar outros comandos na mesma condicional, basta adicionar o { e iniciar uma nova linha, finalizando sempre o bloco com o sinal }.

    Ex.: if (a > b) {
              // faça isso
              // depois aquilo
          }

    4. Caso você venha a utilizar esse preloader com objetos exportados na biblioteca, tenha em mente que os nomes (identificadores) do objeto precisam ser idênticos ou do contrário isso não vai funcionar!

    5. Os comandos e exemplos para downloads apresentados aqui se referem a flash 5.

clique aqui e pegue o exemplo do preloader completo.

Caso você tenha alguma dúvida em relação a este tutorial, entre em contato com o autor.

 



Devido à reformulação implementada no site, pode ser que você encontre alguns links quebrados. Por favor, ajude-nos a corrigir eventuais problemas nos informando links quebrados
1 comentário


Comentário de Derick
| 30/12/2010 - 17:21 |


show d+.. muito bem explicado..! meu agradecimentos..