SYDNEY GANHO (60 pts)

FLASHGURU (155 pts)

RICARDO TEIXEIRA (40 pts)

GUILHERME G.G. (137 pts)

ÉMERSON ROCHA (85 pts)

MARCOS JOSÉ PINTO (44 pts)

RODRIGO AMARAL (56 pts)

LUIZ HERRERA (117 pts)

SÁVIO PONTE (39 pts)

DEMIS BUCCI (50 pts)

DEN IVANOV (260 pts)

GÉRIO (93 pts)
Treinamento PontoFlash de Flash e ActionScript

Estou tentando aplicar uma ação a um botão para fazer desaparecer um movieclip e quando clicar novamente ele mostrar o movie.

Como faço um stop and play no som.

Preciso enviar um formulário integrando Flash e ASP.

Na prática, qual a vantagem de usar o prototype?

Preciso fazer com que o Flash capture 2 teclas pressionadas ao mesmo tempo.

Arredondando números com casas decimais.

Movies carregados com load movie online se tornam lentos.

Vídeo no Flash.

Exempo de formulário de email interagindo Flash e ASP.

Como, num tweeningMotion, fazer o filme parar num frame com uma label?

É possível usar campos dinâmicos em uma máscara?

Como carregar uma imagem com LoadImage do MX numa determinada posição?

Quero inserir um swf dentro de uma apresentação do PowerPoint.

Gostaria que um .exe abrisse em tela cheia. Queria colocar um autorun também.
Como criar um site totalmente dinâmico em Flash MX

Entendendo como funciona um preloader - Segunda parte

Editor de banco de dados (PHP-MySql) orientado a Objetos (OOP)

Movimento por meio de actionscript

Load Movie no FlashMX (swf, jpg e mp3).

Fireworks, o patinho feio da Macromedia.

Configurando texto via actionscript.

Betinhocarreiro e Dysney.

Gradiente variável

Menu arrastável, estilo Windows.

Jogo de colorir.

Objeto Movieclip - Endereçamento (primeira parte)
3d bounce

Trilha

Lights many

Bolhas de sabão

Espiral

Menu abre pasta

HTML edit

Luz

Toca fita

Intro animada

Bspline1

Raio_x
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..