AssetLoader is a multi file/asset loader for AS3 built on AS3Signals. It provides an easy way to load multiple files.
Some features:
- Automatic Type detection.
- Multiple connections, which you can define.
- No Events, AS3Signals only.
- No singletons! Construct as many AssetLoaders as you want!
- Data is dispatched with strong types. NO CASTING!
- Endless recursive group loaders within loaders, within loaders, etc.
- Pause/Resume/Destroy capabilities.
- Dynamic parameter system that works with code completion – No guessing!
- Loader parameters smartly inherit from their parent loaders, which mean you write less code.
- Real-time loading stats. This provides latency, speed, average and progress of all downloads.
- Consolidated stats, loaders reclusively consolidate loading stats all the way down to the last child.
- Can be configured via XML, straight up or from an external file with one easy call.
- All loader errors are consolidated to one signal. IOError, SecurityError, etc. – you don’t have to worry about it, they all boil down to one place. Which means you can “globally†handle loading errors with one listener/command.
- Interfaces all round.
- Unit tested!
- Works super well with Robotlegs!
- And some other stuff too!
Sample
package org.assetloader.example { import org.assetloader.AssetLoader; import org.assetloader.core.IAssetLoader; import org.assetloader.core.ILoadStats; import org.assetloader.core.ILoader; import org.assetloader.signals.ErrorSignal; import org.assetloader.signals.LoaderSignal; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.utils.Dictionary; /** * @author Matan Uberstein */ public class AddConfigExample extends Sprite { protected var _assetloader : IAssetLoader; public function AddConfigExample() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; initConsole(); _assetloader = new AssetLoader(); // Passing config as a URL. _assetloader.addConfig("simple-queue-config.xml"); // Because we are passing the config as a URL, we need wait until AssetLoader fires onConfigLoaded before stating the queue. _assetloader.onConfigLoaded.add(onConfigLoaded_handler); // Add listeners addListenersToLoader(_assetloader); } // --------------------------------------------------------------------------------------------------------------------------------// // HANDLERS // --------------------------------------------------------------------------------------------------------------------------------// protected function onConfigLoaded_handler(signal : LoaderSignal) : void { // Do your clean up! _assetloader.onConfigLoaded.remove(onConfigLoaded_handler); // Start! _assetloader.start(); } protected function onChildOpen_handler(signal : LoaderSignal, child : ILoader) : void { trace("[" + signal.loader.id + "]\t[" + child.id + "]\t\topened \tLatency\t: " + Math.floor(child.stats.latency) + "\tms"); } protected function onChildError_handler(signal : ErrorSignal, child : ILoader) : void { trace("[" + signal.loader.id + "]\t[" + child.id + "]\t\terror \tType\t: " + signal.type + " | Message: " + signal.message); } protected function onChildComplete_handler(signal : LoaderSignal, child : ILoader) : void { trace("[" + signal.loader.id + "]\t[" + child.id + "]\t\tcomplete\tSpeed\t: " + Math.floor(child.stats.averageSpeed) + "\tkbps"); } protected function onComplete_handler(signal : LoaderSignal, assets : Dictionary) : void { var loader : IAssetLoader = IAssetLoader(signal.loader); // Do your clean up! removeListenersFromLoader(loader); // Our Primary AssetLoader's stats. var stats : ILoadStats = loader.stats; trace("\n[" + loader.id + "]"); trace("LOADING COMPLETE:"); trace("Total Time: " + stats.totalTime + " ms"); trace("Average Latency: " + Math.floor(stats.latency) + " ms"); trace("Average Speed: " + Math.floor(stats.averageSpeed) + " kbps"); trace("Total Bytes: " + stats.bytesTotal); } // --------------------------------------------------------------------------------------------------------------------------------// // ADD / REMOVE LISTENERS // --------------------------------------------------------------------------------------------------------------------------------// protected function addListenersToLoader(loader : IAssetLoader) : void { loader.onChildOpen.add(onChildOpen_handler); loader.onChildError.add(onChildError_handler); loader.onChildComplete.add(onChildComplete_handler); loader.onComplete.add(onComplete_handler); } protected function removeListenersFromLoader(loader : IAssetLoader) : void { loader.onChildOpen.remove(onChildOpen_handler); loader.onChildError.remove(onChildError_handler); loader.onChildComplete.remove(onChildComplete_handler); loader.onComplete.remove(onComplete_handler); } } }