ponto&vetor 0 Denunciar post Postado Abril 28, 2010 Salve salve galera ActionScript, tudo certo? Estou desenvolvendo um site em AS3 com o Flash CS4. Manjo de OOP mas tem algumas coisas no Flash que são meio obscuras para mim, hehe!! Agora empaquei num problema cabeludo, quem manjar de AS3 orientado a objeto pode me ajudar, por favor? Então, minha dúvida é a seguinte: criei uma boa e velha galeria com Flash+XML+PHP, coloquei thumbs e a foto maior, estou usando a classe uiLoader para carregar e redimensionar as imagens externas (tanto para thumbs quanto para a maior, usando instâncias diferentes da classe uiLoader) O negócio é que, testando o flash com ctrl+Enter e Simulate Download, percebi que o preloader ficava mais lento à medida que clicava nas thumbs. O preloader carregava cada vez mais lento, mesmo carregando a mesma foto! Bom, explicando melhor - os códigos abaixo estão em métodos, dentro de classes. Coloquei partes do código para não ficar muito grande uiLoaderTb = new UILoader(); //novo objeto uiLoader uiLoaderTb.unload(); //descarregando qq coisa carregada antes, certo? Isso libera totalmente a memória (acredito eu) uiLoaderTb.load(urlRequest); // não coloquei listener para o carregamento, pois as thumbs são bem leves. thumb = new Thumb; //uma classe para desenhar um container para as thumbs thumb.alvo.addChild(uiLoaderTb); thumb.buttonMode = true; thumb.addEventListener(MouseEvent.CLICK, exibeFoto); // dispara o evento para carregar a foto maior. Nenhum novidade certo? Aproveitando a deixa, se alguém achar que a performance pode ser melhorada aqui, vale qualquer dica! Prosseguindo... if(getChildByName('foto')) removeChild(getChildByName('foto')); //evitando objetos duplicados urlRequest = new URLRequest(e.currentTarget.foto); // foto é uma propriedade da classe Thumb. É o caminho para a foto maior uiLoader = new UILoader(); // outro objeto uiLoader uiLoader.unload(); // descarregando //abaixo os eventos para gerar o preloader uiLoader.addEventListener(Event.OPEN, loaderOpen); uiLoader.addEventListener(ProgressEvent.PROGRESS, loaderProgress); uiLoader.addEventListener(Event.COMPLETE, addFoto) uiLoader.load(urlRequest); // carrega a foto maior. Essa sim precisa do preloader, e aqui começa o problema... Bem, os métodos loaderOpen, loaderProgress e addFoto fazem, respectivamente: o preloader aparecer onde será carregada a foto, a barra do preloader aumentar (aquela conta básica, Math.floor(100 * (e.bytesLoaded / e.bytesTotal)) ) e enfim exibem a foto no lugar. Tudo está funcionando, exceto pelo seguinte: Na primeira vez que se clica em alguma thumb, o carregamento ocorre normalmente. Mas se eu clicar novamente (mesmo que seja na mesma thumb) o carregamento fica mais lento, como se tivesse outra coisa sendo carregada, ou como se a propriedade bytesTotal ficasse de repente maior (não fica, pos dei um trace e o valor exibido é o mesmo). Cada clique que eu dou faz o carregamento ficar cada vez mais lento. Como posso fazer então? Ainda não conheço as entranhas do AS3, por isso devo ter deixado passar alguma coisa. Valeu desde já! Abraço a todos! Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Abril 28, 2010 eu até dei eu pesquisada para ver, mas não achei nada certo, então é só uma teoria mas eu acho que você deveria usar a classe Loader no lugar da UILoader ela seria mais leve, , pode ser isso o problema, vale fazer um teste, pois não vai mudar quase nada o código(na Loader, os addEventListener são colocados na propriedade contentLoaderInfo dela) outra coisa, para melhorar a performance, você poderia guardar as instancias de uiLoader criadas, e caso a mesma foto fosse clicada para carregar, você já teria ela lá, e mandaria exibir []´s Compartilhar este post Link para o post Compartilhar em outros sites
ponto&vetor 0 Denunciar post Postado Abril 29, 2010 eu até dei eu pesquisada para ver, mas não achei nada certo, então é só uma teoria mas eu acho que você deveria usar a classe Loader no lugar da UILoader ela seria mais leve, , pode ser isso o problema, vale fazer um teste, pois não vai mudar quase nada o código(na Loader, os addEventListener são colocados na propriedade contentLoaderInfo dela) outra coisa, para melhorar a performance, você poderia guardar as instancias de uiLoader criadas, e caso a mesma foto fosse clicada para carregar, você já teria ela lá, e mandaria exibir []´s Valeu pela dica Eder, eu usei a classe UILoader porque ela permite que eu redimensione o arquivo carregado. Troquei pela Loader mas dá no mesmo... Eu sei que preciso chamar o método close() da Loader para parar o carregamento, mas ainda não consegui usa-lo da forma correta. Mesmo assim, obrigado! Vou continuar testando, uma hora vai! Qualquer ajuda será de mucho gusto! Um abraço! Compartilhar este post Link para o post Compartilhar em outros sites