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
Muito, bom.
Classe super útil, e muito bem estruturada! Continue o bom trabalho Anaya!
Hey, When I try to do any sort of heavy loading, the dataLib just stops.. It prints out no errors, I’ve traced it somewhere between the loader.load call and the progress event. I had my listeners set to weak reference but I’ve changed that to no avail. So I thought possibly the GC was taking them. Any other ideas why this would fail to finish loading?