Em meus ultimos trabalhos criei e aperfeiçoei um classe de loader em fila que armazenasse os arquivos carregados para futuras requisições.
DataLib
Overview:
-Static
Por ser uma classe estátca qualquer arquivo carregado pode ser acessado em qualquer parte da aplicação, mesmo de arquivos SWF externos.
-Load queue
Qualquer arquivo deve ser adicionado em uma fila de carregamentos passando-se o caminho e tipo de arquivo a ser carregado. O arquivo pode ser adicionado no fim da file ou em uma posição especifica.
DataLib.addItem("file.swf", DataLib.TYPE_SWF);
DataLib.addItemAt("file.png", 0, DataLib.TYPE_PNG);
DataLib.addItem("file.wav", DataLib.TYPE_BINARY);
Também é possivel acessar a file de carregamento.
var queue:Array = DataLib.queue;
Para iniciar o caregamento você deve executar a função DataLib.load()
Támbem é possível pausar, recarregar e parar o carregamento.
DataLib.pause();
DataLib.resume();
DataLib.close();
-Data storage
Todo arquivo carregado é armazenado para futuras requisições. Caso necessario os arquivos podem ser deletados, liberando memoria. Os arquivos podem ser acessados utilizando como referência sua URL.
var image:Bitmap = DataLib.lib[fileURL].data;
addChild(image);
DataLib.removeItem(fileURL);
-Custom Events
Eventos especificos dessa classe podem ser adicionados para acompanhar o carregamento. Você pode adicionar eventos na própria classe ou em um item especifico.
*Lembre-se de remover qualquer evento adicionado na classe para evitar conflitos com outros carregamentos
DataLib.addItemAt("file.png", 0, DataLib.TYPE_PNG).addEventListener(DataLibEvent.PROGRESS, onItemProgress);
DataLib.lib["file.xml"].addEventListener(DataLibEvent.COMPLETE, onItemComplete);
DataLib.addEventListener(DataLibEvent.COMPLETE, onComplete);
DataLib.load();
function onItemProgress(e:Event):void{
trace(Math.floor(e.bytesLoaded*100/e.bytesTotal)+"%");
}
function onItemComplete(e:Event):void{
trace(e.data);
}
function onComplete(e:Event):void{
addChild(DataLib.lib["file.png"].data);
}
-JPG, GIF, PNG, SWF, XML and BINARY
Esses são os arquivos suportados. No caso de arquivos SWF é possível acessar classes exportadas utilizando o application domain do filme principal.
DataLib.addItem("asset.swf", DataLib.TYPE_SWF);
addChild(DataLib.lib["asset.swf"].data)
var EmbedClass:Class = ApplicationDomain.currentDomain.getDefinition("assetEmbedClass") as Class;
var instance:* = new EmbedClass();
Você pode fazer o download dessa e outras classes minhas utilizando o meu google code.
http://andreanaya.googlecode.com/svn/trunk/
Existe também um exemplo de uso dessa classe.
Obrigado a todos e espero que essa classe seja util para vocês. Qualquer problema ou sugestão por favor me informem.
Anaya