QueueLoader AS3 Guide (rev10)
Posted: December 4, 2007 at 4:59 pmLatest Version Info:
Click here for the current rev
Click here for the usage guide
Also click here for any posts related to the latest changes:
QueueLoader Updates
Here are some different ways to use QueueLoader.
Basic Loading
import com.hydrotik.utils.QueueLoader; import com.hydrotik.utils.QueueLoaderEvent; var _oLoader:QueueLoader = new QueueLoader(); var img = new Sprite(); addChild(img); _oLoader.addItem("images/image1.jpg"), img, {title:"Image "}); _oLoader.execute();
Load Monitoring
import com.hydrotik.utils.QueueLoader; import com.hydrotik.utils.QueueLoaderEvent; var _oLoader:QueueLoader = new QueueLoader(); var img1 = new Sprite(); addChild(img1); _oLoader.addItem("images/image1.jpg"), img1, {title:"Image 1"}); var img2 = new Sprite(); addChild(img2); _oLoader.addItem("images/image2.jpg"), img2, {title:"Image 2"}); _oLoader.addEventListener(QueueLoaderEvent.QUEUE_START, onQueueStart, false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.ITEM_START, onItemStart, false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.ITEM_PROGRESS, onItemProgress, false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.ITEM_INIT, onItemInit,false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.ITEM_ERROR, onItemError,false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.QUEUE_PROGRESS, onQueueProgress, false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.QUEUE_INIT, onQueueInit,false, 0, true); _oLoader.execute(); //Listener functions function onQueueStart(event:QueueLoaderEvent):void { trace(">> "+event.type); } function onItemStart(event:QueueLoaderEvent):void { trace("\t>> "+event.type, "item title: "+event.title); } function onItemProgress(event:QueueLoaderEvent):void { trace("\t>> "+event.type+": "+[" percentage: "+event.percentage]); } function onQueueProgress(event:QueueLoaderEvent):void { trace("\t>> "+event.type+": "+[" queuepercentage: "+event.queuepercentage]); } function onItemInit(event:QueueLoaderEvent):void { trace("\n>>"+event.message+"\n"); } function onItemError(event:QueueLoaderEvent):void { trace("\n>>"+event.message+"\n"); } function onQueueInit(event:QueueLoaderEvent):void { trace("\n>>"+event.message+"\n"); }
Manually specifying a MIME type
import com.hydrotik.utils.QueueLoader; import com.hydrotik.utils.QueueLoaderEvent; var _oLoader:QueueLoader = new QueueLoader(); var img = new Sprite(); addChild(img); _oLoader.addItem("images/image1.jpg"), img, {title:"Image ", mimeType:QueueLoader.FILE_IMAGE}); _oLoader.addEventListener(QueueLoaderEvent.QUEUE_INIT, onQueueInit,false, 0, true); _oLoader.execute();
Loading XML
import com.hydrotik.utils.QueueLoader; import com.hydrotik.utils.QueueLoaderEvent; var _oLoader:QueueLoader = new QueueLoader(); var _xml:XML; _oLoader.addItem("includes/admin/test.xml", null, {title:"XML"}); _oLoader.addEventListener(QueueLoaderEvent.ITEM_INIT, onItemInit,false, 0, true); _oLoader.execute(); function onItemInit(event:QueueLoaderEvent):void { trace("\t>> XML: "+event.type, "item title: "+event.title); if(event.filetype == QueueLoader.FILE_XML){ _xml = new XML(event.file); } }
Loading CSS
import com.hydrotik.utils.QueueLoader; import com.hydrotik.utils.QueueLoaderEvent; var _oLoader:QueueLoader = new QueueLoader(); var _css:StyleSheet = new StyleSheet(); _oLoader.addItem("includes/admin/style.css", null, {title:"CSS"}); _oLoader.addEventListener(QueueLoaderEvent.ITEM_INIT, onItemInit,false, 0, true); _oLoader.execute(); function onItemInit(event:QueueLoaderEvent):void { if(event.filetype == QueueLoader.FILE_CSS){ trace("\t>> CSS: "+event.type, "item title: "+event.title); _css.parseCSS(event.file); } }
Drawing the frames of an external SWF to Bitmap Objects in an Array
import com.hydrotik.utils.QueueLoader; import com.hydrotik.utils.QueueLoaderEvent; var externalImageBitmapContainer:Bitmap = new Bitmap(); addChild(externalImageBitmapContainer); var externalImageContainer:Sprite = new Sprite(); addChild(externalImageContainer); var _oLoader:QueueLoader = new QueueLoader(); _oLoader.addItem("flashassets/swf/externalimages.swf", externalImageContainer, {title:"externalimages", drawFrames:true}); _oLoader.addEventListener(QueueLoaderEvent.QUEUE_INIT, onQueueInit,false, 0, true); _oLoader.execute(); function onQueueInit(event:QueueLoaderEvent):void { trace("** "+event.type); // This passes a Bitmap object of the 2nd frame // in the external swfstored in bmArray externalImageBitmapContainer.bitmapData = event.bmArray[1]; }
Accessing Class references in an externally loaded SWF
import com.hydrotik.utils.QueueLoader; import com.hydrotik.utils.QueueLoaderEvent; var addedDefinitions:LoaderContext = new LoaderContext(); addedDefinitions.applicationDomain = ApplicationDomain.currentDomain; var _oLoader:QueueLoader = new QueueLoader(false, addedDefinitions, true); var soundSWF = new MovieClip(); soundSWF.name = "externalSounds"; addChild(soundSWF); var soundChannel:SoundChannel = new SoundChannel(); _oLoader.addItem(prefix("") + "flashassets/swf/externalsounds.swf", soundSWF, {title:"sounds", drawSWF:false, mimeType:QueueLoader.FILE_SWF}); _oLoader.addEventListener(QueueLoaderEvent.QUEUE_INIT, onQueueInit,false, 0, true); _oLoader.execute(); function onQueueInit(event:QueueLoaderEvent):void { trace("** "+event.type); var Loop1Reference:Class = getDefinitionByName("Loop1") as Class; var loop1:Sound = new Loop1Reference(); soundChannel = loop1.play(); }
Adding items on the fly
import com.hydrotik.utils.QueueLoader; import com.hydrotik.utils.QueueLoaderEvent; var _oLoader:QueueLoader = new QueueLoader(); var imageContainer:Sprite = new Sprite(); addChild(imageContainer); var _xml:XML; _oLoader.addItem("includes/admin/test.xml", null, {title:"XML", mimeType:QueueLoader.FILE_XML}); _oLoader.addEventListener(QueueLoaderEvent.QUEUE_START, onQueueStart, false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.ITEM_START, onItemStart, false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.ITEM_PROGRESS, onItemProgress, false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.ITEM_INIT, onItemInit,false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.ITEM_ERROR, onItemError,false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.QUEUE_PROGRESS, onQueueProgress, false, 0, true); _oLoader.addEventListener(QueueLoaderEvent.QUEUE_INIT, onQueueInit,false, 0, true); _oLoader.execute(); function onQueueStart(event:QueueLoaderEvent):void { trace("\t>> "+event.type, "item title: "+event.title); } function onItemStart(event:QueueLoaderEvent):void { trace("\t>> "+event.type, "item title: "+event.title); } function onItemProgress(event:QueueLoaderEvent):void { trace("\t>> "+event.type+": "+[" percentage: "+event.percentage]); } function onQueueProgress(event:QueueLoaderEvent):void { trace("\t>> "+event.type+": "+[" queuepercentage: "+event.queuepercentage]); } function onItemInit(event:QueueLoaderEvent):void { trace("\t>> "+event.type, "item title: "+event.title); if (event.filetype == QueueLoader.FILE_XML) { _xml = new XML(event.file); var imageList:XMLList = _xml.images.children(); for (var i:int = 0; i < imageList.length(); i++) { var img = new Sprite(); imageContainer.addChild(img); _oLoader.addItem(imageList[i].attribute("src"), img, {title:"Image "+i}); } } } function onItemError(event:QueueLoaderEvent):void { trace("\n>>"+event.message+"\n"); } function onQueueInit(event:QueueLoaderEvent):void { trace("\t>> "+event.type, "item title: "+event.title); }
This covers most of the features in the current rev. More to come!
The Discussion
see what everyone is saying
Strong work man! Hopefully I'll be able to contribute more in the near future.
[...] hydrotik | flash/design/photographyactionscript and creative playground of Donovan Adams QueueLoader AS3 Guide (rev10) [...]
Hi, I'm really enjoying your QueueLoader, it has helped me a lot, thanks. I have one problem though, when I load an image into a sprite as in your example, the sprite height and width properties are 0 eventhough It shows fine on the screen?
I need the height/width values for positioning of the sprites, what am I doing wrong?
Thank you very much for this.
You might want to do a toLowerCase() when you are testing for file names:
if(currItem.url.toLowerCase().match(".jpg") != null) _currType = FILE_IMAGE;
This prevents some troubles.
There is both upper and lower case checking in the latest version.
UPDATES Latest Update and Source!