Dae!
Comecei há pouco tempo a usar mais actionscript para fazer as animações dos sites, a maioria com tween. Porém, reparei que o site ficou bem mais pesado dos que eu fazia anteriormente quase SEM programação para os movimentos, mesmo sem usar nenhuma imagem. O site é todinho vetorial.
Queria saber como fazer as animações com programação (Tween) sem que ele fique muito pesado, já que gosto dos Tweens pelos movimentos em si, e pela facilidade de alteração.
Não usei Classes.. será que isso resolveria?
PS: Se alguém tiver um tutorial de classes, seria legal. Não faço idéia de como usar.
Abraços!

Código Deixando Site Mais Pesado
Started By mugambo, 19/03/2009, 22:02
3 replies to this topic
#1
Posted 19/03/2009, 22:02
"Guerras Santas são guerras para descobrir quem tem o amigo imaginário mais legal."
#2
Posted 20/03/2009, 14:40
Existem aí duas coisas.
1. Conceitos elementares de programação(flash) e garbage colector.
Uma delas: a animação via código é muito mais leve do que a animação na timeline. Prova disso é que você pode fazer movimentações com centenas de objetos com código sem travar o player (coisa que via timeline isso já seria impossivel). Com o uso de AS 3 esse número vai fácil pra casa dos milhares.
Então das duas uma: ou você está usando a classe da forma errada (sem tratar erros ou sem encerrar algum looping, etc) ou há conflito de código no seu site que não envolve exatamente a animação. Pra isso você precisa conferir todos os eventos (principalmente aqueles do tipo 'onEnterFrame' ou 'setInterval' que ficam executando 'eternamente' e consumindo memória). Ah! Quando os projetos em flash começam a "crescer" uma coisa que você precisa tomar cuidado é com objetos, variáveis, eventos que ficam parados na memória pois ainda possuem um vínculo com outros objetos, impedindo que o garbage colector realize seu trabalho adequadamente. Exemplo: você tem um "preloader" que ficou lá no stage, com um looping onEnterFrame executando. Ele pode não estar mais visível, mas está na AVM, consumindo memória e processamento. Lembre-se de limpar todos os eventos associados a um movieClip antes de remove-lo, senão ele sai do stage, mas seus dados continuam na memória, pois o garbage colector só coleta aquilo que não tem mais referência de eventos associados a ele.
2. Programação Orientada a Objetos.
As famosas "classes" em flash são, na verdade, uma forma de olhar a programação. A programação orientada a objetos foi concebida para fazer com que o desenvolvimento de software fosse mais parecida com o mundo real. Sugiro que você procure conhecer os conceitos de programação orientada a objetos para então aplicar esses conceitos no flash. Depois de fazer isso, você vai mudar completamente a forma de olhar o flash e seus objetos. Vai deixar de produzir "scripts" e vai produzir código pra valer. Vai construir componentes, API´s e soluções robustas em flash. Cada movieClip seu vai ter a sua própria "classe" - que é a descrição em código de todas as propriedades, atividades, comportamentos e eventos daquele movieClip. De como ele vai se relacionar, se comunicar e interagir tanto com o usuário e com o resto do seu flash.
Se você quiser uma ajuda mais "específica" no seu código, poste um trecho, que, no que for possível e no alcance de meu pequeno conhecimento, tentarei te ajudar.
Abraços.
pp
1. Conceitos elementares de programação(flash) e garbage colector.
Uma delas: a animação via código é muito mais leve do que a animação na timeline. Prova disso é que você pode fazer movimentações com centenas de objetos com código sem travar o player (coisa que via timeline isso já seria impossivel). Com o uso de AS 3 esse número vai fácil pra casa dos milhares.
Então das duas uma: ou você está usando a classe da forma errada (sem tratar erros ou sem encerrar algum looping, etc) ou há conflito de código no seu site que não envolve exatamente a animação. Pra isso você precisa conferir todos os eventos (principalmente aqueles do tipo 'onEnterFrame' ou 'setInterval' que ficam executando 'eternamente' e consumindo memória). Ah! Quando os projetos em flash começam a "crescer" uma coisa que você precisa tomar cuidado é com objetos, variáveis, eventos que ficam parados na memória pois ainda possuem um vínculo com outros objetos, impedindo que o garbage colector realize seu trabalho adequadamente. Exemplo: você tem um "preloader" que ficou lá no stage, com um looping onEnterFrame executando. Ele pode não estar mais visível, mas está na AVM, consumindo memória e processamento. Lembre-se de limpar todos os eventos associados a um movieClip antes de remove-lo, senão ele sai do stage, mas seus dados continuam na memória, pois o garbage colector só coleta aquilo que não tem mais referência de eventos associados a ele.
2. Programação Orientada a Objetos.
As famosas "classes" em flash são, na verdade, uma forma de olhar a programação. A programação orientada a objetos foi concebida para fazer com que o desenvolvimento de software fosse mais parecida com o mundo real. Sugiro que você procure conhecer os conceitos de programação orientada a objetos para então aplicar esses conceitos no flash. Depois de fazer isso, você vai mudar completamente a forma de olhar o flash e seus objetos. Vai deixar de produzir "scripts" e vai produzir código pra valer. Vai construir componentes, API´s e soluções robustas em flash. Cada movieClip seu vai ter a sua própria "classe" - que é a descrição em código de todas as propriedades, atividades, comportamentos e eventos daquele movieClip. De como ele vai se relacionar, se comunicar e interagir tanto com o usuário e com o resto do seu flash.
Se você quiser uma ajuda mais "específica" no seu código, poste um trecho, que, no que for possível e no alcance de meu pequeno conhecimento, tentarei te ajudar.
Abraços.
pp
WebFórum - Equipe de Flash - Moderador
www.pedropauloalmeida.com.br
Leia as Regras! Colabore com nosso Fórum respeitando as normas de posts e de perfis.
www.pedropauloalmeida.com.br
Leia as Regras! Colabore com nosso Fórum respeitando as normas de posts e de perfis.
#3
Posted 20/03/2009, 16:59
Hmmmm!! Boas dicas!
Desculpe a minha ignorância, mas, o que seria o garbage colector? Eu precisaria mexer nisso ou é algo automático? hehe.. sem noção alguma!
E outra coisa.. como eu interruperia o processo de um onEnterFrame por exemplo? Pode ter sido isso mesmo.
Valeu demais aí pelas dicas!
Desculpe a minha ignorância, mas, o que seria o garbage colector? Eu precisaria mexer nisso ou é algo automático? hehe.. sem noção alguma!
E outra coisa.. como eu interruperia o processo de um onEnterFrame por exemplo? Pode ter sido isso mesmo.
Valeu demais aí pelas dicas!
"Guerras Santas são guerras para descobrir quem tem o amigo imaginário mais legal."
#4
Posted 23/03/2009, 16:58
Mugambo.
Garbage Colector é um "robô" do flash player que, de tempos em tempos, vai fazendo uma "varredura" na memória do computador utilizada pelo flash player. É ele que identifica objetos que não estão mais sendo usados, variáveis inúteis, etc. Ele então limpa a memória, disponibilizando aquele espaço para novos dados.
Quando você mantém no seu código referências esquecidas a valores ou eventos "inúteis" o garbage colector não consegue executar sua tarefa adequadamente. Ele não elimina informações a não ser que ele julgue ser 100% seguro eliminá-las. Para isso, você precisa ter uma grande atenção aos eventos e propriedades de todos os seus objetos.
No caso de um looping onEnterFrame, você usa o operador "delete" que vai parar o processo. Um exemplo abaixo:
É isso.
Abraços.
pp
Garbage Colector é um "robô" do flash player que, de tempos em tempos, vai fazendo uma "varredura" na memória do computador utilizada pelo flash player. É ele que identifica objetos que não estão mais sendo usados, variáveis inúteis, etc. Ele então limpa a memória, disponibilizando aquele espaço para novos dados.
Quando você mantém no seu código referências esquecidas a valores ou eventos "inúteis" o garbage colector não consegue executar sua tarefa adequadamente. Ele não elimina informações a não ser que ele julgue ser 100% seguro eliminá-las. Para isso, você precisa ter uma grande atenção aos eventos e propriedades de todos os seus objetos.
No caso de um looping onEnterFrame, você usa o operador "delete" que vai parar o processo. Um exemplo abaixo:
var soma:Number = new Number(); this.onEnterFrame = function():Void { soma += 1; // agora eu posso verificar se, a soma for igual a 100, ele executa uma função qualquer: if (soma == 100) { // chamo a função: funcaoQualquer(); // O que não posso esquecer, agora que já chamei a função, é parar o looping, senão ele continua a executar eternamente: delete this.onEnterFrame; } }
É isso.
Abraços.
pp
WebFórum - Equipe de Flash - Moderador
www.pedropauloalmeida.com.br
Leia as Regras! Colabore com nosso Fórum respeitando as normas de posts e de perfis.
www.pedropauloalmeida.com.br
Leia as Regras! Colabore com nosso Fórum respeitando as normas de posts e de perfis.
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)