19 de dezembro de 2007

Criar Preloader Simples [ActionScript]

Novamente mais um post aqui!!

Como estou trabalhando em um site feito em puro ActionScript vi que é essencial um Preloader e por isso nosso post vai ser a respeito..!
Vamos aprender a fazer um Preloader ;D

Bom primeiramente você tem que ter conhecimento que toda animação tem um "Tamanho em Kbytes", ou seja, tudo tem um tempo para carregamento. Se você tem uma animação de 10mb, ou seja, 10.000 Kbytes e sua conexão é de 5 Kbytes, (10.000/5 = 2.000) você demoraria 2.000 segundos ou 33 minutos para poder carregar sua animação. Inquanto carrega sua animação seria interessante ir rodando uma animaçãozinha né, um Preloader.

Bom agora que vocês sabem o que é um Preloader e qual utilidade ele tem, vamos aos codigos... ;D

Antes de mais nada abra o Flash e crie um MovieClip, instancie-o de "meu_mc" (sem aspas);

Vamos entender as princiapais funções.

1000 bytes = 1 Kbyte - 1kb
1000 Kbytes = 1 Megabyte - 1mb

(OBS estou utilizando valores arredondados para facilitar a conta de cabeça, os valores reais de bytes é 1024b);

1) getBytesTotal() - A função retorna o valor total de bytes do objeto. Você pode tanto pegar o valor total do frame como o valor de um MovieClip exclusivo.

Ex:.

>CODE <<>

trace (meu_mc.getBytesTotal());
// retorna o total de bytes do movieclip




2) getBytesLoaded() - Retorna o valor de bytes carregado.

Ex:.

>CODE <<>

loadedbytes = meu_mc.getBytesLoaded();
totalbytes = meu_mc.getBytesTotal();

_root.onEnterFrame = function(){
if(totalbytes > (loadedbytes - 50000)){
trace (loadedbytes);
}
}


Você pode perceber que ele irá fazer um loop com o valor de bytes total, mas isso ocorre porque você está abrindo ele locamente sem tempo de carregamento, se fosse Online isso demoraria muito pra carregar.

Agora vamos montar nosso primeiro Preloader.

>CODE <<>

onClipEvent(load) {
total = _parent.getBytesTotal();
_parent.stop();
}
onClipEvent(enterFrame) {
loaded = _parent.getBytesLoaded();
if(loaded == total) _parent.play();
}


Explicando cada linha:

01 - Ao carregar o movieclip, executa...
02 - Seta a variável "total" como sendo o valor total de bytes do filme. Utilizamos aqui junto a função getBytesTotal() o aliás _parent. Ele indica um caminho relativo do preloader em relação a timeline principal. Quer dizer, ele indica que o valor de bytes total é o da timeline principal, é escopo acima
(_parent) da timeline do movieclip.
03 - Pàra a execução do filme. A explicação do _parent é a mesmo da linha 2. Só que aqui, ao invés de retornar o total de bytes, ele está parando a execução da timeline.
04 - Encerra o evento load.
05 - Ao entrar no frame... Este seria o nosso loop, onde cada vez que ele executar o frame, ele atualizaria o valor da variável.
06 - Seta a variável "loaded" como sendo o valor de bytes recebidos até o momento. A cada execução do loop esse valor é atualizado.
07 - Faz um verificação de condicional. Caso o valor da variável total seja igual "== " (sinal de comparação) ao da variável loaded, executa o filme. Caso essa condicional não seja verdadeira, continua o loop.
08 -Encerra o evento enterFrame.

Bom pessoa esse é um Preloader bem simples.. seman que vem eu coloco um avançado com animação ;D

mas apartir daqui você já consegue fazer o carregamento!!

até mais ;D

4 comentários:

Anônimo disse...

Ei cara, onde você estuda? Cursar Ciências da Computação e não saber que 1KB são 1024 bytes é foda. Conta aí pra galera pro pessoal evitar essa porra de faculdade! ;]

Unknown disse...

hehehe amigo, isso foi pra simplificar a conta!

e outra, se vc veio até meu blog significa que vc precisa de uma ajudinha besta pra centralizar um movie ;D

Não vejo motivo de complicar a conta(contagem em 1024b) mesmo porque 24b é insignificante pra qualquer tipo de conexão, e você como um sábio deve imaginar que com o avanço da tecnologia, esses meros 5kbs que usei de exp como conexão é praticamente inexistente!

mas se os 24b incomoda e pode estragar seu projeto... posta ai seu problema que eu resolvo!

vlws pela sugesta ;D

Paulo Lúcio disse...

Há gajos k nada têm mesmo para fazer e ainda por cima são mesquinhos...

Força Laionway!

Afro Netto disse...

nussa esse leandro é um otário