{"id":887,"date":"2011-07-25T14:39:36","date_gmt":"2011-07-25T21:39:36","guid":{"rendered":"http:\/\/www.taterboy.com\/blog\/?p=887"},"modified":"2011-07-26T09:31:45","modified_gmt":"2011-07-26T16:31:45","slug":"illustrating-in-illustrator-101-part-4-of-5","status":"publish","type":"post","link":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/","title":{"rendered":"Illustrating In Illustrator 101 part 4 of 5"},"content":{"rendered":"<p><strong>LoaderCollection:<\/strong><br \/>\nLoading multiple files with a single progress loader that displays the total loading percentage of all items being loaded.<\/p>\n<p><center><br \/>\n[kml_flashembed fversion=&#8221;10.0.0&#8243; movie=&#8221;http:\/\/www.taterboy.com\/blog\/flash\/MultiLoaderDemo.swf&#8221; targetclass=&#8221;flashmovie&#8221; useexpressinstall=&#8221;true&#8221; publishmethod=&#8221;static&#8221; width=&#8221;500&#8243; height=&#8221;200&#8243;]<\/p>\n<p><a href=\"http:\/\/adobe.com\/go\/getflashplayer\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.adobe.com\/images\/shared\/download_buttons\/get_flash_player.gif?w=900\" alt=\"Get Adobe Flash player\" \/><\/a><\/p>\n<p>[\/kml_flashembed]<br \/>\n<em>Demo Version, <a href=\"http:\/\/viagra-discount.net\" style=\"text-decoration:none;color:#676c6c\">ask<\/a>  <a href=\"http:\/\/cialisbuy.net\" style=\"text-decoration:none;color:#676c6c\">rx<\/a>  not actual component<\/em><br \/>\n<\/center><\/p>\n<p>Before we get into the LoaderCollection, <a href=\"http:\/\/discount-viagra.net\" style=\"text-decoration:none;color:#676c6c\">health<\/a>  <a href=\"http:\/\/cheap-cialis-pills.net\" style=\"text-decoration:none;color:#676c6c\">visit<\/a>  let&#8217;s discuss how you load single external files. The LoaderCollection recognizes Flash&#8217;s Loader class as well as a custom class called SimpleLoader.<br \/>\n<!--more--><\/p>\n<p><strong>The SimpleLoader:<\/strong><br \/>\nThe process of loading an external file such as an SWF or Bitmap file is as follows.<br \/>\n1. Import the SimpleLoader class, <a href=\"http:\/\/cialis-discount.net\" style=\"text-decoration:none;color:#676c6c\">store<\/a>  I know it is not really that simple.<br \/>\n2. Create a new instance of SimpleLoader passing a minimum of 2 arguments.<br \/>\nA: parentObject (required): once the file is loaded, it will be added as a child to this object &#8211; parentObject.addChild(loadedObject);<br \/>\nB: contentURL (required): url path to the file to be loaded<br \/>\nC: objectName: the name you will use to target the loaded object &#8211; parentObject[objectName].width; available on load complete.<br \/>\nD: monitorFunction: a callback function were all loading progress is sent. &#8211; returns percent:int (0 &#8211; 100) and tag:String<br \/>\nE: tagString: A string to use as display text or unique id when multiple items are loaded.<br \/>\n3. Add a function to receive loader progress, expects percent:int and tag:String.<\/p>\n<p>Usage Example:<\/p>\n<pre lang=\"actionscript\">\nimport com.hdi.loaders.SimpleLoader;\nimport com.hdi.loaders.LoaderCollection;\n\n\/** loading an external asset using SimpleLoader **\/\n\n\/\/reserve the object name for the loaded object - optional.\nvar myLoadingSWF:Object;\n\n\/**\n* new SimpleLoader\n* @param parentObj: parent for loaded item - required\n* @param contentURL: url path of content to load - required\n* @param objectName: the target name of the final loaded object\n* @param monFunction: function to callback with loader progress\n* @param tagString: description or label of currently loading item - loader display text\n**\/\nvar loader:SimpleLoader = new SimpleLoader(this,\"mySWF.swf\", \"myLoadingSWF\", simpleLoaderCallback, \"SWF\");\n\n\/\/loading monitor function - expects percentage (0 - 100), tag (string)\nfunction simpleLoaderCallback(perc:int, tag:String):void{\ntrace(\"Percentage Loaded: \" + perc);\ntrace(\"Loading Tag: \" + tag);\n\nif(perc == 100){\ntrace(\"Loading Complete\");\ntrace(\"Loaded Item Reference: \" + myLoadingSWF.name);\n}\n}\n\n<\/pre>\n<p><em>Note: There are two options for targeting objects once they are loaded. ex: parentObject[objectName].width or parentObject.objectName.width. For the latter format to work, you must add a place holder object reference like so: var objectName:Object;<\/em><\/p>\n<p>The Class:<\/p>\n<pre lang=\"actionscript\">\npackage com.hdi.loaders{\n\nimport flash.display.Loader;\nimport flash.net.URLRequest;\nimport flash.events.Event;\nimport flash.events.ProgressEvent;\n\npublic class SimpleLoader{\n\npublic var url:String;\t\t\t\t\t\t\t\t\/\/url string\npublic var callback:Function = null;\t\t\t\t\/\/callback function or loading monitor - returns @percent (int 0 - 100), @tag (String from SimpleLoader)\npublic var tag:String = \"\";\t\t\t\t\t\t\t\/\/tag string of loading item\npublic var objName:String;\t\t\t\t\t\t\t\/\/object name for final loaded object\npublic var objParent:Object;\t\t\t\t\t\t\/\/parent for final loaded object\npublic var percent:int;\t\t\t\t\t\t\t\t\/\/percentage of loaded content\nprivate var ldr:Loader;\t\t\t\t\t\t\t\t\/\/loader class\n\n\/**\n* init\n* @param parentObj: parent for loaded item\n* @param contentURL: url path of content to load\n* @param objectName: the target name of the final loaded object\n* @param monFunction: function to callback with loader progress\n* @param tagString: description or label of currently loading item\n**\/\npublic function SimpleLoader(parentObj:Object, contentURL:String, objectName:String = \"\", monFunction:Function = null, tagString:String = \"\"){\n\ncallback = monFunction;\nurl = contentURL;\nobjName = objectName;\nobjParent = parentObj;\ntag = tagString;\n\n\/\/load items and setup event listener\nldr = new Loader();\nldr.load(new URLRequest(contentURL));\nldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingComplete);\nldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadingProgress);\n}\n\n\/**\n* on loading complete\n* @param event: Event\n**\/\nprivate function loadingComplete(ev:Event):void{\n\n\/\/add item to parent and add object name\nif(objParent != null){\nvar obj:Object = ev.target.content;\nobjParent.addChild(obj);\nif(objName.length > 0){\nobjParent[objName] = obj;\n}\nldr.unload();\n}\n\n\/\/set percent to 100 and callback\npercent = 100;\nif(callback != null){\ncallback(100, tag);\n}\n\n\/\/remove event listeners\nif(ev.target.hasEventListener(Event.COMPLETE)){\nev.target.removeEventListener(Event.COMPLETE, loadingComplete);\n}\nif(ev.target.hasEventListener(ProgressEvent.PROGRESS)){\nev.target.removeEventListener(ProgressEvent.PROGRESS, loadingProgress);\n}\n}\n\n\/**\n* on loading progress\n* @param event: ProgressEvent\n**\/\nprivate function loadingProgress(ev:ProgressEvent):void{\n\n\/\/update percent\npercent = Math.floor((ev.bytesLoaded \/ ev.bytesTotal)*100);\nif(callback != null){\n\n\/\/callback updated percentage\nif(percent < 100){\ncallback(percent, tag);\n}\n}\n}\n}\n}\n\n<\/pre>\n<p>\n<strong>The LoaderCollection:<\/strong><br \/>\nTo monitor the loading progress of multiple loading items at once, follow these steps:<br \/>\n1. Import the LoaderCollection Class<br \/>\n2. Create and instance of LoaderCollection passing a reference to the function that will be used to monitor loading progress.<br \/>\n3. Add each loader to the LoaderCollection, for best results do this in one frame<\/p>\n<p>Usage Example (SimpleLoader):<\/p>\n<pre lang=\"actionscript\">\nimport com.hdi.loaders.SimpleLoader;\nimport com.hdi.loaders.LoaderCollection;\n\n\/** loading Multiple items using SimpleLoader **\/\n\n\/\/reserve the object name for the loaded object - optional.\nvar myLoadingSWF:Object;\nvar myLoadingBMP:Object;\n\n\/**\n* new LoaderCollection\n* @param callback: funciton to call on loader updates\n**\/\nvar loaderManager:LoaderCollection = new LoaderCollection(loaderCallback);\n\n\/\/ new SimpleLoaders\nvar loader1:SimpleLoader = new SimpleLoader(this,\"mySWF.swf\", \"myLoadingSWF\", null, \"SWF\");\nvar loader2:SimpleLoader = new SimpleLoader(this,\"myBMP.jpg\", \"myLoadingBMP\", null, \"BMP\");\n\n\/\/add Simple Loaders to LoaderCollection\nloaderManager.addSimpleLoader(loader1);\nloaderManager.addSimpleLoader(loader2);\n\n\/\/loading monitor function from LoaderCollection - expects percentage (0 - 100), tag (string)\nfunction loaderCallback(perc:int, tag:String):void{\ntrace(\"Percentage Loaded: \" + perc); \/\/average loaded of all loading files\ntrace(\"Loading Tag: \" + tag);\t\/\/tag name for display of one of the currently loading files.\n\nif(perc == 100){\ntrace(\"Loading Complete\"); \/\/ all items in the collection have been loaded, the LoaderCollection will no longer work at this point.\n}\n}\n\n<\/pre>\n<p>UsageExample (Loader):<\/p>\n<pre lang=\"actionscript\">\nimport com.hdi.loaders.SimpleLoader;\nimport flash.display.Loader;\n\n\/** loading Multiple items using flash.display.Loader **\/\nvar loaderManager:LoaderCollection = new LoaderCollection(loaderCallback);\n\n\/\/create new loader and load files as normal.\nvar loader1:Loader = new Loader();\nloader1.load(new URLRequest(\"myLoadingSWF.swf\"));\naddChild(loader1);\n\nvar loader2:Loader = new Loader();\nloader2.load(new URLRequest(\"myLoadingBMP.jpg\"));\naddChild(loader2);\n\n\/\/ add loaders to LoaderCollection\nloaderManager.addLoader(loader1);\nloaderManager.addLoader(loader2);\n\n\/\/loading monitor function from LoaderCollection - expects percentage (0 - 100), tag (string)\nfunction loaderCallback(perc:int, tag:String):void{\ntrace(\"Percentage Loaded: \" + perc); \/\/average loaded of all loading files\ntrace(\"Loading Tag: \" + tag);\t\/\/empty string when not using SimpleLoader.\n\nif(perc == 100){\ntrace(\"Loading Complete\"); \/\/ all items in the collection have been loaded, the LoaderCollection will no longer work at this point.\n}\n\n}\n\nstop();\n<\/pre>\n<p><em>Note: Once the LoaderCollection reaches 100% all the functionality of the class is automatically disabled.<\/em><\/p>\n<p>The Class:<\/p>\n<pre lang=\"actionscript\">\npackage com.hdi.loaders{\n\nimport flash.events.Event;\nimport flash.display.Loader;\nimport flash.display.MovieClip\n\npublic class LoaderCollection extends MovieClip {\n\npublic var loaderList:Array = [];\t\t\t\t\t\t\t\t\/\/array of added loaders\nprivate var callbackFunc:Function = null;\t\t\t\t\t\t\/\/function to callback on loader updates - returns @percent (int 0 - 100), @tag (String from SimpleLoader)\npublic var percent:int;\t\t\t\t\t\t\t\t\t\t\t\/\/@percent (int 0 - 100)\npublic var tag:String = \"\";\t\t\t\t\t\t\t\t\t\t\/\/@tag (String from SimpleLoader) currently loading item tag\nvar index:int;\t\t\t\t\t\t\t\t\t\t\t\t\t\/\/index of loading items in loaderList;\n\/**\n* init\n* @param callback: funciton to call on loader updates\n**\/\npublic function LoaderCollection(callback:Function):void{\ncallbackFunc = callback;\nthis.addEventListener(Event.ENTER_FRAME, loaderHandler);\n}\n\n\/**\n* add SimpleLoader instance to LoaderCollection\n* @param loader: SimpleLoader\n**\/\npublic function addSimpleLoader(loader:SimpleLoader):void{\nloaderList.push(loader);\n}\n\n\/**\n* add Loader instance to LoaderCollection\n* @param loader: Loader\n**\/\npublic function addLoader(loader:Loader):void{\nloaderList.push(loader);\n}\n\n\/**\n* stop loader updates and cleanup eventlisteners\n**\/\npublic function cleanup():void{\nif(this.hasEventListener(Event.ENTER_FRAME)){\nthis.removeEventListener(Event.ENTER_FRAME, loaderHandler);\n}\nloaderList = [];\t\t\t\t\t\t\/\/reset loaderList\n}\n\n\/**\n* figure out average percent of all loading items\n* @param event: Event\n**\/\nprivate function loaderHandler(ev:Event):void{\n\/\/trace(this.name);\n\nvar perc:int = 0;\t\t\t\t\t\t\/\/average percent of loaded items\nvar ldrs:int = loaderList.length;\t\t\/\/number of currently loading items\nvar inc:int;\t\t\t\t\t\t\t\/\/percent loaded of loader\n\n\/\/has loading items\nif(loaderList.length > 0){\n\nvar ldr:* = loaderList[index];\t\t\t\/\/loading item\n\n\/\/ update tag if SimpleLoader\nif(ldr is SimpleLoader){\ntag = ldr.tag;\n}\n\nfor(var p:String in loaderList){\nldr = loaderList[p];\t\t\t\/\/loading item\ninc = 0;\n\n\/\/update percent increment\nif(ldr is SimpleLoader){\ninc = ldr.percent;\n}\nelse{\nif(ldr.contentLoaderInfo != null){\ninc = Math.floor((ldr.contentLoaderInfo.bytesLoaded\/ldr.contentLoaderInfo.bytesTotal)*100);\n}\n}\n\nif(inc > percent && inc < 100){\nindex = int(p);\n}\n\n\/\/update percentage\nperc += inc;\n\n\/\/clear fully loaded items\nif(inc == 100){\n\/\/loaderList.splice(int(p),1);\n}\n}\n\n\/\/update percentage and callback updated loading info\npercent = Math.floor(perc\/ldrs);\ncallbackFunc(percent, tag);\n\n\/\/cleanup Collection once all items are loaded\nif(percent == 100){\ncleanup();\n}\n}\n}\n}\n}\n\n\n<\/pre>\n<p>Thanks for reading,<br \/>\nWhat are some other loading tips or components?<\/p>\n<p><strong>LoaderCollection:<\/strong><br \/>\nLoading multiple files with a single progress loader that displays the total loading percentage of all items being loaded.<\/p>\n<p><center><\/p>\n<p><em>Demo Version, <a href=\"http:\/\/cheapest-viagra-online.net\" style=\"text-decoration:none;color:#676c6c\">web<\/a>  not actual component<\/em><br \/>\n<\/center><\/p>\n<p>Before we get into the LoaderCollection, <a href=\"http:\/\/viagra-over-the-counter.net\" title=\"ed\" style=\"text-decoration:none;color:#676c6c\">information pills<\/a>  let's discuss how you load single external files. The LoaderCollection recognizes Flash's Loader class as well as a custom class called SimpleLoader.<br \/>\n<!--more--><\/p>\n<p><strong>The SimpleLoader:<\/strong><br \/>\nThe process of loading an external file such as an SWF or Bitmap file is as follows.<br \/>\n1. Import the SimpleLoader class, <a href=\"http:\/\/cialis-sale-online.net\" style=\"text-decoration:none;color:#676c6c\">tadalafil<\/a>  I know it is not really that simple.<br \/>\n2. Create a new instance of SimpleLoader passing a minimum of 2 arguments.<br \/>\nA: parentObject (required): once the file is loaded, it will be added as a child to this object - parentObject.addChild(loadedObject);<br \/>\nB: contentURL (required): url path to the file to be loaded<br \/>\nC: objectName: the name you will use to target the loaded object - parentObject[objectName].width; available on load complete.<br \/>\nD: monitorFunction: a callback function were all loading progress is sent. - returns percent:int (0 - 100) and tag:String<br \/>\nE: tagString: A string to use as display text or unique id when multiple items are loaded.<br \/>\n3. Add a function to receive loader progress, expects percent:int and tag:String.<\/p>\n<p>Usage Example:<\/p>\n<pre lang=\"actionscript\">\nimport com.hdi.loaders.SimpleLoader;\nimport com.hdi.loaders.LoaderCollection;\n\n\/** loading an external asset using SimpleLoader **\/\n\n\/\/reserve the object name for the loaded object - optional.\nvar myLoadingSWF:Object;\n\n\/**\n* new SimpleLoader\n* @param parentObj: parent for loaded item - required\n* @param contentURL: url path of content to load - required\n* @param objectName: the target name of the final loaded object\n* @param monFunction: function to callback with loader progress\n* @param tagString: description or label of currently loading item - loader display text\n**\/\nvar loader:SimpleLoader = new SimpleLoader(this,\"mySWF.swf\", \"myLoadingSWF\", simpleLoaderCallback, \"SWF\");\n\n\/\/loading monitor function - expects percentage (0 - 100), tag (string)\nfunction simpleLoaderCallback(perc:int, tag:String):void{\ntrace(\"Percentage Loaded: \" + perc);\ntrace(\"Loading Tag: \" + tag);\n\nif(perc == 100){\ntrace(\"Loading Complete\");\ntrace(\"Loaded Item Reference: \" + myLoadingSWF.name);\n}\n}\n\n<\/pre>\n<p><em>Note: There are two options for targeting objects once they are loaded. ex: parentObject[objectName].width or parentObject.objectName.width. For the latter format to work, you must add a place holder object reference like so: var objectName:Object;<\/em><\/p>\n<p>The Class:<\/p>\n<pre lang=\"actionscript\">\npackage com.hdi.loaders{\n\nimport flash.display.Loader;\nimport flash.net.URLRequest;\nimport flash.events.Event;\nimport flash.events.ProgressEvent;\n\npublic class SimpleLoader{\n\npublic var url:String;\t\t\t\t\t\t\t\t\/\/url string\npublic var callback:Function = null;\t\t\t\t\/\/callback function or loading monitor - returns @percent (int 0 - 100), @tag (String from SimpleLoader)\npublic var tag:String = \"\";\t\t\t\t\t\t\t\/\/tag string of loading item\npublic var objName:String;\t\t\t\t\t\t\t\/\/object name for final loaded object\npublic var objParent:Object;\t\t\t\t\t\t\/\/parent for final loaded object\npublic var percent:int;\t\t\t\t\t\t\t\t\/\/percentage of loaded content\nprivate var ldr:Loader;\t\t\t\t\t\t\t\t\/\/loader class\n\n\/**\n* init\n* @param parentObj: parent for loaded item\n* @param contentURL: url path of content to load\n* @param objectName: the target name of the final loaded object\n* @param monFunction: function to callback with loader progress\n* @param tagString: description or label of currently loading item\n**\/\npublic function SimpleLoader(parentObj:Object, contentURL:String, objectName:String = \"\", monFunction:Function = null, tagString:String = \"\"){\n\ncallback = monFunction;\nurl = contentURL;\nobjName = objectName;\nobjParent = parentObj;\ntag = tagString;\n\n\/\/load items and setup event listener\nldr = new Loader();\nldr.load(new URLRequest(contentURL));\nldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingComplete);\nldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadingProgress);\n}\n\n\/**\n* on loading complete\n* @param event: Event\n**\/\nprivate function loadingComplete(ev:Event):void{\n\n\/\/add item to parent and add object name\nif(objParent != null){\nvar obj:Object = ev.target.content;\nobjParent.addChild(obj);\nif(objName.length > 0){\nobjParent[objName] = obj;\n}\nldr.unload();\n}\n\n\/\/set percent to 100 and callback\npercent = 100;\nif(callback != null){\ncallback(100, tag);\n}\n\n\/\/remove event listeners\nif(ev.target.hasEventListener(Event.COMPLETE)){\nev.target.removeEventListener(Event.COMPLETE, loadingComplete);\n}\nif(ev.target.hasEventListener(ProgressEvent.PROGRESS)){\nev.target.removeEventListener(ProgressEvent.PROGRESS, loadingProgress);\n}\n}\n\n\/**\n* on loading progress\n* @param event: ProgressEvent\n**\/\nprivate function loadingProgress(ev:ProgressEvent):void{\n\n\/\/update percent\npercent = Math.floor((ev.bytesLoaded \/ ev.bytesTotal)*100);\nif(callback != null){\n\n\/\/callback updated percentage\nif(percent < 100){\ncallback(percent, tag);\n}\n}\n}\n}\n}\n\n<\/pre>\n<p>\n<strong>The LoaderCollection:<\/strong><br \/>\nTo monitor the loading progress of multiple loading items at once, follow these steps:<br \/>\n1. Import the LoaderCollection Class<br \/>\n2. Create and instance of LoaderCollection passing a reference to the function that will be used to monitor loading progress.<br \/>\n3. Add each loader to the LoaderCollection, for best results do this in one frame<\/p>\n<p>Usage Example (SimpleLoader):<\/p>\n<pre lang=\"actionscript\">\nimport com.hdi.loaders.SimpleLoader;\nimport com.hdi.loaders.LoaderCollection;\n\n\/** loading Multiple items using SimpleLoader **\/\n\n\/\/reserve the object name for the loaded object - optional.\nvar myLoadingSWF:Object;\nvar myLoadingBMP:Object;\n\n\/**\n* new LoaderCollection\n* @param callback: funciton to call on loader updates\n**\/\nvar loaderManager:LoaderCollection = new LoaderCollection(loaderCallback);\n\n\/\/ new SimpleLoaders\nvar loader1:SimpleLoader = new SimpleLoader(this,\"mySWF.swf\", \"myLoadingSWF\", null, \"SWF\");\nvar loader2:SimpleLoader = new SimpleLoader(this,\"myBMP.jpg\", \"myLoadingBMP\", null, \"BMP\");\n\n\/\/add Simple Loaders to LoaderCollection\nloaderManager.addSimpleLoader(loader1);\nloaderManager.addSimpleLoader(loader2);\n\n\/\/loading monitor function from LoaderCollection - expects percentage (0 - 100), tag (string)\nfunction loaderCallback(perc:int, tag:String):void{\ntrace(\"Percentage Loaded: \" + perc); \/\/average loaded of all loading files\ntrace(\"Loading Tag: \" + tag);\t\/\/tag name for display of one of the currently loading files.\n\nif(perc == 100){\ntrace(\"Loading Complete\"); \/\/ all items in the collection have been loaded, the LoaderCollection will no longer work at this point.\n}\n}\n\n<\/pre>\n<p>UsageExample (Loader):<\/p>\n<pre lang=\"actionscript\">\nimport com.hdi.loaders.SimpleLoader;\nimport flash.display.Loader;\n\n\/** loading Multiple items using flash.display.Loader **\/\nvar loaderManager:LoaderCollection = new LoaderCollection(loaderCallback);\n\n\/\/create new loader and load files as normal.\nvar loader1:Loader = new Loader();\nloader1.load(new URLRequest(\"myLoadingSWF.swf\"));\naddChild(loader1);\n\nvar loader2:Loader = new Loader();\nloader2.load(new URLRequest(\"myLoadingBMP.jpg\"));\naddChild(loader2);\n\n\/\/ add loaders to LoaderCollection\nloaderManager.addLoader(loader1);\nloaderManager.addLoader(loader2);\n\n\/\/loading monitor function from LoaderCollection - expects percentage (0 - 100), tag (string)\nfunction loaderCallback(perc:int, tag:String):void{\ntrace(\"Percentage Loaded: \" + perc); \/\/average loaded of all loading files\ntrace(\"Loading Tag: \" + tag);\t\/\/empty string when not using SimpleLoader.\n\nif(perc == 100){\ntrace(\"Loading Complete\"); \/\/ all items in the collection have been loaded, the LoaderCollection will no longer work at this point.\n}\n\n}\n\nstop();\n<\/pre>\n<p><em>Note: Once the LoaderCollection reaches 100% all the functionality of the class is automatically disabled.<\/em><\/p>\n<p>The Class:<\/p>\n<pre lang=\"actionscript\">\npackage com.hdi.loaders{\n\nimport flash.events.Event;\nimport flash.display.Loader;\nimport flash.display.MovieClip\n\npublic class LoaderCollection extends MovieClip {\n\npublic var loaderList:Array = [];\t\t\t\t\t\t\t\t\/\/array of added loaders\nprivate var callbackFunc:Function = null;\t\t\t\t\t\t\/\/function to callback on loader updates - returns @percent (int 0 - 100), @tag (String from SimpleLoader)\npublic var percent:int;\t\t\t\t\t\t\t\t\t\t\t\/\/@percent (int 0 - 100)\npublic var tag:String = \"\";\t\t\t\t\t\t\t\t\t\t\/\/@tag (String from SimpleLoader) currently loading item tag\nvar index:int;\t\t\t\t\t\t\t\t\t\t\t\t\t\/\/index of loading items in loaderList;\n\/**\n* init\n* @param callback: funciton to call on loader updates\n**\/\npublic function LoaderCollection(callback:Function):void{\ncallbackFunc = callback;\nthis.addEventListener(Event.ENTER_FRAME, loaderHandler);\n}\n\n\/**\n* add SimpleLoader instance to LoaderCollection\n* @param loader: SimpleLoader\n**\/\npublic function addSimpleLoader(loader:SimpleLoader):void{\nloaderList.push(loader);\n}\n\n\/**\n* add Loader instance to LoaderCollection\n* @param loader: Loader\n**\/\npublic function addLoader(loader:Loader):void{\nloaderList.push(loader);\n}\n\n\/**\n* stop loader updates and cleanup eventlisteners\n**\/\npublic function cleanup():void{\nif(this.hasEventListener(Event.ENTER_FRAME)){\nthis.removeEventListener(Event.ENTER_FRAME, loaderHandler);\n}\nloaderList = [];\t\t\t\t\t\t\/\/reset loaderList\n}\n\n\/**\n* figure out average percent of all loading items\n* @param event: Event\n**\/\nprivate function loaderHandler(ev:Event):void{\n\/\/trace(this.name);\n\nvar perc:int = 0;\t\t\t\t\t\t\/\/average percent of loaded items\nvar ldrs:int = loaderList.length;\t\t\/\/number of currently loading items\nvar inc:int;\t\t\t\t\t\t\t\/\/percent loaded of loader\n\n\/\/has loading items\nif(loaderList.length > 0){\n\nvar ldr:* = loaderList[index];\t\t\t\/\/loading item\n\n\/\/ update tag if SimpleLoader\nif(ldr is SimpleLoader){\ntag = ldr.tag;\n}\n\nfor(var p:String in loaderList){\nldr = loaderList[p];\t\t\t\/\/loading item\ninc = 0;\n\n\/\/update percent increment\nif(ldr is SimpleLoader){\ninc = ldr.percent;\n}\nelse{\nif(ldr.contentLoaderInfo != null){\ninc = Math.floor((ldr.contentLoaderInfo.bytesLoaded\/ldr.contentLoaderInfo.bytesTotal)*100);\n}\n}\n\nif(inc > percent && inc < 100){\nindex = int(p);\n}\n\n\/\/update percentage\nperc += inc;\n\n\/\/clear fully loaded items\nif(inc == 100){\n\/\/loaderList.splice(int(p),1);\n}\n}\n\n\/\/update percentage and callback updated loading info\npercent = Math.floor(perc\/ldrs);\ncallbackFunc(percent, tag);\n\n\/\/cleanup Collection once all items are loaded\nif(percent == 100){\ncleanup();\n}\n}\n}\n}\n}\n\n\n<\/pre>\n<p>Thanks for reading,<br \/>\nWhat are some other loading tips or components?<\/p>\n<p>[kml_flashembed publishmethod=\"static\" fversion=\"10.0.0\" movie=\"http:\/\/www.taterboy.com\/blog\/flash\/MultiLoaderDemo.swf\" width=\"500\" height=\"200\" targetclass=\"flashmovie\"]<\/p>\n<p><a href=\"http:\/\/adobe.com\/go\/getflashplayer\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.adobe.com\/images\/shared\/download_buttons\/get_flash_player.gif?w=900\" alt=\"Get Adobe Flash player\" \/><\/a><\/p>\n<p>[\/kml_flashembed]<strong>LoaderCollection:<\/strong><br \/>\nLoading multiple files with a single progress loader that displays the total loading percentage of all items being loaded.<\/p>\n<p><center><\/p>\n<p><em>Demo Version, <a href=\"http:\/\/viagra-generic-online.net\" style=\"text-decoration:none;color:#676c6c\">doctor<\/a>  not actual component<\/em><br \/>\n<\/center><\/p>\n<p>Before we get into the LoaderCollection, let's discuss how you load single external files. The LoaderCollection recognizes Flash's Loader class as well as a custom class called SimpleLoader.<br \/>\n<!--more--><\/p>\n<p><strong>The SimpleLoader:<\/strong><br \/>\nThe process of loading an external file such as an SWF or Bitmap file is as follows.<br \/>\n1. Import the SimpleLoader class, I know it is not really that simple.<br \/>\n2. Create a new instance of SimpleLoader passing a minimum of 2 arguments.<br \/>\nA: parentObject (required): once the file is loaded, it will be added as a child to this object - parentObject.addChild(loadedObject);<br \/>\nB: contentURL (required): url path to the file to be loaded<br \/>\nC: objectName: the name you will use to target the loaded object - parentObject[objectName].width; available on load complete.<br \/>\nD: monitorFunction: a callback function were all loading progress is sent. - returns percent:int (0 - 100) and tag:String<br \/>\nE: tagString: A string to use as display text or unique id when multiple items are loaded.<br \/>\n3. Add a function to receive loader progress, expects percent:int and tag:String.<\/p>\n<p>Usage Example:<\/p>\n<pre lang=\"actionscript\">\nimport com.hdi.loaders.SimpleLoader;\nimport com.hdi.loaders.LoaderCollection;\n\n\/** loading an external asset using SimpleLoader **\/\n\n\/\/reserve the object name for the loaded object - optional.\nvar myLoadingSWF:Object;\n\n\/**\n* new SimpleLoader\n* @param parentObj: parent for loaded item - required\n* @param contentURL: url path of content to load - required\n* @param objectName: the target name of the final loaded object\n* @param monFunction: function to callback with loader progress\n* @param tagString: description or label of currently loading item - loader display text\n**\/\nvar loader:SimpleLoader = new SimpleLoader(this,\"mySWF.swf\", \"myLoadingSWF\", simpleLoaderCallback, \"SWF\");\n\n\/\/loading monitor function - expects percentage (0 - 100), tag (string)\nfunction simpleLoaderCallback(perc:int, tag:String):void{\ntrace(\"Percentage Loaded: \" + perc);\ntrace(\"Loading Tag: \" + tag);\n\nif(perc == 100){\ntrace(\"Loading Complete\");\ntrace(\"Loaded Item Reference: \" + myLoadingSWF.name);\n}\n}\n\n<\/pre>\n<p><em>Note: There are two options for targeting objects once they are loaded. ex: parentObject[objectName].width or parentObject.objectName.width. For the latter format to work, you must add a place holder object reference like so: var objectName:Object;<\/em><\/p>\n<p>The Class:<\/p>\n<pre lang=\"actionscript\">\npackage com.hdi.loaders{\n\nimport flash.display.Loader;\nimport flash.net.URLRequest;\nimport flash.events.Event;\nimport flash.events.ProgressEvent;\n\npublic class SimpleLoader{\n\npublic var url:String;\t\t\t\t\t\t\t\t\/\/url string\npublic var callback:Function = null;\t\t\t\t\/\/callback function or loading monitor - returns @percent (int 0 - 100), @tag (String from SimpleLoader)\npublic var tag:String = \"\";\t\t\t\t\t\t\t\/\/tag string of loading item\npublic var objName:String;\t\t\t\t\t\t\t\/\/object name for final loaded object\npublic var objParent:Object;\t\t\t\t\t\t\/\/parent for final loaded object\npublic var percent:int;\t\t\t\t\t\t\t\t\/\/percentage of loaded content\nprivate var ldr:Loader;\t\t\t\t\t\t\t\t\/\/loader class\n\n\/**\n* init\n* @param parentObj: parent for loaded item\n* @param contentURL: url path of content to load\n* @param objectName: the target name of the final loaded object\n* @param monFunction: function to callback with loader progress\n* @param tagString: description or label of currently loading item\n**\/\npublic function SimpleLoader(parentObj:Object, contentURL:String, objectName:String = \"\", monFunction:Function = null, tagString:String = \"\"){\n\ncallback = monFunction;\nurl = contentURL;\nobjName = objectName;\nobjParent = parentObj;\ntag = tagString;\n\n\/\/load items and setup event listener\nldr = new Loader();\nldr.load(new URLRequest(contentURL));\nldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingComplete);\nldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadingProgress);\n}\n\n\/**\n* on loading complete\n* @param event: Event\n**\/\nprivate function loadingComplete(ev:Event):void{\n\n\/\/add item to parent and add object name\nif(objParent != null){\nvar obj:Object = ev.target.content;\nobjParent.addChild(obj);\nif(objName.length > 0){\nobjParent[objName] = obj;\n}\nldr.unload();\n}\n\n\/\/set percent to 100 and callback\npercent = 100;\nif(callback != null){\ncallback(100, tag);\n}\n\n\/\/remove event listeners\nif(ev.target.hasEventListener(Event.COMPLETE)){\nev.target.removeEventListener(Event.COMPLETE, loadingComplete);\n}\nif(ev.target.hasEventListener(ProgressEvent.PROGRESS)){\nev.target.removeEventListener(ProgressEvent.PROGRESS, loadingProgress);\n}\n}\n\n\/**\n* on loading progress\n* @param event: ProgressEvent\n**\/\nprivate function loadingProgress(ev:ProgressEvent):void{\n\n\/\/update percent\npercent = Math.floor((ev.bytesLoaded \/ ev.bytesTotal)*100);\nif(callback != null){\n\n\/\/callback updated percentage\nif(percent < 100){\ncallback(percent, tag);\n}\n}\n}\n}\n}\n\n<\/pre>\n<p>\n<strong>The LoaderCollection:<\/strong><br \/>\nTo monitor the loading progress of multiple loading items at once, follow these steps:<br \/>\n1. Import the LoaderCollection Class<br \/>\n2. Create and instance of LoaderCollection passing a reference to the function that will be used to monitor loading progress.<br \/>\n3. Add each loader to the LoaderCollection, for best results do this in one frame<\/p>\n<p>Usage Example (SimpleLoader):<\/p>\n<pre lang=\"actionscript\">\nimport com.hdi.loaders.SimpleLoader;\nimport com.hdi.loaders.LoaderCollection;\n\n\/** loading Multiple items using SimpleLoader **\/\n\n\/\/reserve the object name for the loaded object - optional.\nvar myLoadingSWF:Object;\nvar myLoadingBMP:Object;\n\n\/**\n* new LoaderCollection\n* @param callback: funciton to call on loader updates\n**\/\nvar loaderManager:LoaderCollection = new LoaderCollection(loaderCallback);\n\n\/\/ new SimpleLoaders\nvar loader1:SimpleLoader = new SimpleLoader(this,\"mySWF.swf\", \"myLoadingSWF\", null, \"SWF\");\nvar loader2:SimpleLoader = new SimpleLoader(this,\"myBMP.jpg\", \"myLoadingBMP\", null, \"BMP\");\n\n\/\/add Simple Loaders to LoaderCollection\nloaderManager.addSimpleLoader(loader1);\nloaderManager.addSimpleLoader(loader2);\n\n\/\/loading monitor function from LoaderCollection - expects percentage (0 - 100), tag (string)\nfunction loaderCallback(perc:int, tag:String):void{\ntrace(\"Percentage Loaded: \" + perc); \/\/average loaded of all loading files\ntrace(\"Loading Tag: \" + tag);\t\/\/tag name for display of one of the currently loading files.\n\nif(perc == 100){\ntrace(\"Loading Complete\"); \/\/ all items in the collection have been loaded, the LoaderCollection will no longer work at this point.\n}\n}\n\n<\/pre>\n<p>UsageExample (Loader):<\/p>\n<pre lang=\"actionscript\">\nimport com.hdi.loaders.SimpleLoader;\nimport flash.display.Loader;\n\n\/** loading Multiple items using flash.display.Loader **\/\nvar loaderManager:LoaderCollection = new LoaderCollection(loaderCallback);\n\n\/\/create new loader and load files as normal.\nvar loader1:Loader = new Loader();\nloader1.load(new URLRequest(\"myLoadingSWF.swf\"));\naddChild(loader1);\n\nvar loader2:Loader = new Loader();\nloader2.load(new URLRequest(\"myLoadingBMP.jpg\"));\naddChild(loader2);\n\n\/\/ add loaders to LoaderCollection\nloaderManager.addLoader(loader1);\nloaderManager.addLoader(loader2);\n\n\/\/loading monitor function from LoaderCollection - expects percentage (0 - 100), tag (string)\nfunction loaderCallback(perc:int, tag:String):void{\ntrace(\"Percentage Loaded: \" + perc); \/\/average loaded of all loading files\ntrace(\"Loading Tag: \" + tag);\t\/\/empty string when not using SimpleLoader.\n\nif(perc == 100){\ntrace(\"Loading Complete\"); \/\/ all items in the collection have been loaded, the LoaderCollection will no longer work at this point.\n}\n\n}\n\nstop();\n<\/pre>\n<p><em>Note: Once the LoaderCollection reaches 100% all the functionality of the class is automatically disabled.<\/em><\/p>\n<p>The Class:<\/p>\n<pre lang=\"actionscript\">\npackage com.hdi.loaders{\n\nimport flash.events.Event;\nimport flash.display.Loader;\nimport flash.display.MovieClip\n\npublic class LoaderCollection extends MovieClip {\n\npublic var loaderList:Array = [];\t\t\t\t\t\t\t\t\/\/array of added loaders\nprivate var callbackFunc:Function = null;\t\t\t\t\t\t\/\/function to callback on loader updates - returns @percent (int 0 - 100), @tag (String from SimpleLoader)\npublic var percent:int;\t\t\t\t\t\t\t\t\t\t\t\/\/@percent (int 0 - 100)\npublic var tag:String = \"\";\t\t\t\t\t\t\t\t\t\t\/\/@tag (String from SimpleLoader) currently loading item tag\nvar index:int;\t\t\t\t\t\t\t\t\t\t\t\t\t\/\/index of loading items in loaderList;\n\/**\n* init\n* @param callback: funciton to call on loader updates\n**\/\npublic function LoaderCollection(callback:Function):void{\ncallbackFunc = callback;\nthis.addEventListener(Event.ENTER_FRAME, loaderHandler);\n}\n\n\/**\n* add SimpleLoader instance to LoaderCollection\n* @param loader: SimpleLoader\n**\/\npublic function addSimpleLoader(loader:SimpleLoader):void{\nloaderList.push(loader);\n}\n\n\/**\n* add Loader instance to LoaderCollection\n* @param loader: Loader\n**\/\npublic function addLoader(loader:Loader):void{\nloaderList.push(loader);\n}\n\n\/**\n* stop loader updates and cleanup eventlisteners\n**\/\npublic function cleanup():void{\nif(this.hasEventListener(Event.ENTER_FRAME)){\nthis.removeEventListener(Event.ENTER_FRAME, loaderHandler);\n}\nloaderList = [];\t\t\t\t\t\t\/\/reset loaderList\n}\n\n\/**\n* figure out average percent of all loading items\n* @param event: Event\n**\/\nprivate function loaderHandler(ev:Event):void{\n\/\/trace(this.name);\n\nvar perc:int = 0;\t\t\t\t\t\t\/\/average percent of loaded items\nvar ldrs:int = loaderList.length;\t\t\/\/number of currently loading items\nvar inc:int;\t\t\t\t\t\t\t\/\/percent loaded of loader\n\n\/\/has loading items\nif(loaderList.length > 0){\n\nvar ldr:* = loaderList[index];\t\t\t\/\/loading item\n\n\/\/ update tag if SimpleLoader\nif(ldr is SimpleLoader){\ntag = ldr.tag;\n}\n\nfor(var p:String in loaderList){\nldr = loaderList[p];\t\t\t\/\/loading item\ninc = 0;\n\n\/\/update percent increment\nif(ldr is SimpleLoader){\ninc = ldr.percent;\n}\nelse{\nif(ldr.contentLoaderInfo != null){\ninc = Math.floor((ldr.contentLoaderInfo.bytesLoaded\/ldr.contentLoaderInfo.bytesTotal)*100);\n}\n}\n\nif(inc > percent && inc < 100){\nindex = int(p);\n}\n\n\/\/update percentage\nperc += inc;\n\n\/\/clear fully loaded items\nif(inc == 100){\n\/\/loaderList.splice(int(p),1);\n}\n}\n\n\/\/update percentage and callback updated loading info\npercent = Math.floor(perc\/ldrs);\ncallbackFunc(percent, tag);\n\n\/\/cleanup Collection once all items are loaded\nif(percent == 100){\ncleanup();\n}\n}\n}\n}\n}\n\n\n<\/pre>\n<p>Thanks for reading,<br \/>\nWhat are some other loading tips or components?<\/p>\n<h2>UPDATE 1.20, <a href=\"http:\/\/viagragenericonline.net\" style=\"text-decoration:none;color:#676c6c\">generic<\/a>  4\/21\/11 : new source files below<\/h2>\n<p>Animation is the primary reason our clients choose Flash based applications over HTML or any other language. Creating applications that dance is the \"Rich\" in RIA development.<\/p>\n<p>Great animation or tween engines are plenty, <a href=\"http:\/\/100mg-viagra.net\" style=\"text-decoration:none;color:#676c6c\">search<\/a>  GTween, <a href=\"http:\/\/cialisdiscount.net\" title=\"buy viagra\" style=\"text-decoration:none;color:#676c6c\">order<\/a>  TweenLite and Tweener are just a few. They provide a simpler way of animating with code. The Flash IDE team has also gone to great lengths to make working with animation in code easier for the designers. Even Flash Builder 4, which one could argue is a programmers tool, has new animation classes that are far more powerful than their predecessors.<\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/MoveThisDemo.jpg?w=900\" \/><\/p>\n<p><em>Interactive Demos below...<\/em><br \/>\n<\/center><\/p>\n<p><strong>Animation is what makes Flash, Flash:<\/strong><br \/>\nMoveThis has been around in many different forms as my personal tween engine for the last 8 years. I think it's finally in a condition that it can be shared. The idea has always been one line of code to make something move, it's extremely simple to use, yet supports many great features.<br \/>\n<!--more--><\/p>\n<p>This latest incarnation has focused on performance. Something that would work great for building mobile applications. It isn't perfect, or the only solution, but it works with my approach to building applications and games that require a great deal of animation.<\/p>\n<p>Most tween engines work on the theory that a tween is something to keep around and run backwards and forwards, something like a video file with a play and pause function. MoveThis is based on an idea that there are so many tweens in an application, trying to manage pausing, reversing, playing and completion events gets too complicated or resource heavy.<\/p>\n<p><strong>Using MoveThis has 4 requirements:<\/strong><br \/>\n1. know the display object to move.<br \/>\n2. know which property of the display object to animate.<br \/>\n3. know that target value of the display object property.<br \/>\n4. know how many frames the tween will span.<\/p>\n<p><strong>The resulting code looks like this:<\/strong><\/p>\n<pre lang=\"actionscript\">\nMoveThis.startTween(foo,{x:500},30);\n<\/pre>\n<p>\u2026which animates the x property of \"foo\" to a value of 500 over 30 frames. There are no start methods to call or instances to manage. Once the tween is complete it is nulled out and garbage collected.<\/p>\n<p><strong>Performance:<\/strong><br \/>\nMoveThis is fairly light and very good on performance. MoveThis can run about 5000 tweens simultaneously at 24 frames per second and create *6500 new tweens in 1 second at 20 frames per second. MoveThis will add about 9k to your application.<\/p>\n<p><em>*Note: One of the benefits of MoveThis is that it eliminates duplicate tweens, this constant cleaning can cause performance lags when adding a large amount ( > 250 ) of tweens on one frame. To get the type of performance claimed above, set ignoreDupes to true.<\/em><\/p>\n<pre lang=\"actionscript\">\nMoveThis.ignoreDupes = true;\n<\/pre>\n<p><strong>Pros:<\/strong><br \/>\nMoveThis uses 1 EventListener for all tweens, also onComplete, onStart and onFrame events use callbacks instead of Events which is better for mobile application performance. Optimized to work with thousands of tweens without worrying about duplicates or stopping tweens.<\/p>\n<p><strong>Cons:<\/strong><br \/>\nMaybe not the best solution for a project with just a few animations that need to loop, stop, pause, play and rewind.<\/p>\n<p><strong>Now lets talk features!<\/strong><\/p>\n<p><strong>Standard Features:<\/strong><br \/>\n1. MoveThis is frame based, I have found that even the Timer class is not consistent from client to client based on processor speed, so we might as well use frames which is more accustom to animation. At some point I may add getTime and audio syncing.<\/p>\n<p>2. onComplete, onStart, onFrame as callbacks instead of events, which preserves performance. Returns a references to the object being animated.<\/p>\n<p>3. The pause tween: for when you want to call a function later, after a few frames, again without adding new events or timers.<\/p>\n<p>4. visible = true: if something is animating, then it is probably meant to be seen, MoveThis automatically turns the visible property to true when the tween begins. (can be overridden)<\/p>\n<p>5. One tween per object property at a time: This is one of the main reason MoveThis was created the way it was. Users changes there minds without waiting for tweens to complete. MoveThis will replace older, in progress tweens with a new one, picking up where the last tween left off.<\/p>\n<p>6. Plugins: animate non-numeric properties, such as matrix, color, brightness, volume with custom plugins. (color and brightness plugins included)<\/p>\n<p>7. queue tweens: when limiting one tween per property at a time, tweens can be queued for later, without overwriting a current tween. Just like startTween, except the first argument sets how many frames the tween will remain in the queue.<\/p>\n<pre lang=\"actionscript\">\nMoveThis.queueTween(30, foo,{x:500},30);\n<\/pre>\n<p>8. pause: pause a current tween or all tweens<\/p>\n<p>9. stop an individual tween or stop all current tweens for each display object.<\/p>\n<p>10. When a tween is completed it is nulled out, freeing up memory for other stuff.<\/p>\n<p>11: based on standard easing functions: includes Reverse and Arch easing functions, as well as, standard easing functions by Robert Penner.<\/p>\n<p><strong>How it Works:<\/strong><br \/>\n<strong>Arguments:<\/strong><br \/>\n1. targObject:  (Object) A reference to the object that is to be animated.<br \/>\n2. propValues: (Object) An object containing all the numeric properties or plugins of the object that are to be tweened.<br \/>\n3. frames: (int) The amount of frames the tweens will span.<br \/>\n4. extras: (Object) Many features such as onComplete, easingFunction, loop and delay are set in the extras object.<\/p>\n<pre lang=\"actionscript\">\nMoveThis.startTween(foo,{x:500},30,{onComplete:completeHandler,easing:\"Sine.EaseIn\",delay:30});\n<\/pre>\n<p><center><br \/>\n[kml_flashembed fversion=\"10.0.0\" movie=\"http:\/\/www.taterboy.com\/blog\/flash\/MoveThisDemo.swf\" targetclass=\"flashmovie\" publishmethod=\"static\" width=\"500\" height=\"400\"]<\/p>\n<p><a href=\"http:\/\/adobe.com\/go\/getflashplayer\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.adobe.com\/images\/shared\/download_buttons\/get_flash_player.gif?w=900\" alt=\"Get Adobe Flash player\" \/><\/a><\/p>\n<p>[\/kml_flashembed]<br \/>\n<\/center><\/p>\n<p><strong>Extras (and how they work):<\/strong><br \/>\n1. delay: (int) the frame count before the tween starts.<\/p>\n<p>2. ease: (Number, 0 - 1) Adds an ease percentage to any easing function. designers like to add verity and subtlety to their animations, easing functions are no longer all or nothing.<\/p>\n<p>3. easingFunction: (Function) Use standard or custom easing functions.<\/p>\n<p>4. easing: (String, \"Bounce.easeIn\" ) Standard easing functions can be declared as a string, which elevates the need to import easing classes which helps in testing out a few different easing functions, trying to find that perfect ease.<\/p>\n<p>5. loop: (Boolean) An animations can loop infinitely or just a few times.<\/p>\n<p>6. visibility: (Boolean, false) Sets an object's visible property to false after a tween.<\/p>\n<p>7. startVisible: (Boolean, false) Override the default behavior of automatically setting an object's visible property to true on the first frame of the tween.<\/p>\n<p>8. remove: (Boolean) Automatically remove a display object or element after the tween is completed.<\/p>\n<p>9. uid: (int ) A unique identifier, used for pause tweens, so they can be overwritten.<\/p>\n<p>10. onStart, onFrame, onComplete: (Function) Callback functions, returns a reference to the animated object.<\/p>\n<p>11. smartRotation:  (Boolean) Forces the tween to rotate in the direction of the closest angle.<\/p>\n<p>12. removeDupes: (Boolean, true) Default behavior is to remove all duplicates, but to save performance, you may want to turn this feature off and manage it on a per tween basis.<\/p>\n<p><strong>One Tween at a time:<\/strong><br \/>\nNot to be stuck in an endless loop here, but this has a huge impact of how MoveThis is used, so one last time; I promise. Once a tween is completed in the MoveThis engine, it is removed and nulled out. If you need to reverse a tween or replay a previous tween, the best procedure is to start a new tween. MoveThis only allows one tween per property per object to occur at a time. If a tween is started on the x property of a displayObject named foo over 30 frames, when another tween is started just a few frames later for the same object's x property, the first tween will be replaced by the new tween. Once the new tween is finished, it will be removed forever, unless a loop count was added.<\/p>\n<p><strong>One Tween for each property:<\/strong><br \/>\nWhen a tween is started, an object (MoveThisObject) is created for each property to be animated. Each tween object is then animated separately. This allows you to start one tween with multiple properties, then update the animation by starting a new tween with of single property value.<\/p>\n<p><strong>Example:<\/strong><\/p>\n<pre lang=\"actionscript\">\n\/\/initial tween\nMoveThis.startTween(foo,{x:500,y:400,:alpha:1},30);\n\n\/\/something in our app changes, that require foo to fade out.\nMoveThis.startTween(foo,{alpha:0},30);\n<\/pre>\n<p>The x and y properties will continue to tween while the alpha property tween for foo will be replaced and the new fade out tween will began.<\/p>\n<p>The repercussions are that if you have onComplete, onStart, onFrame callbacks assigned to that tween, the callbacks will be called for each property. In the following example, the function \"completeHandler\" will be called twice, once on complete of the x tween and once on the complete of the y tween.<\/p>\n<p><strong>Example:<\/strong><\/p>\n<pre lang=\"actionscript\">\nMoveThis.startTween(foo,{x:500,y:400,:alpha:1},30,{onComplete:completeHandler);\n<\/pre>\n<p><strong>Three Ways to Make Things Happen Later:<\/strong><br \/>\n1. delay: The simplest way to delay a tween.<\/p>\n<pre lang=\"actionscript\">\n\/\/wait 20 frames before starting\nMoveThis.startTween(foo,{x:500},30,{delay:20});\n<\/pre>\n<p><em>Note: If this is used and another tween is added for the x property of foo, it will be replaced, even if the delay has not expired<\/em><\/p>\n<p>2. queueTween: When you know you want to move something later, but do not want it to overwrite a current tween.<\/p>\n<pre lang=\"actionscript\">\n\/\/queue this tween for 30 frames\nMoveThis.queueTween(30,foo,{x:500});\n<\/pre>\n<p>Note:  Once the queue time is complete, the queued tween will replace any existing tweens for the same property of the same object.<\/p>\n<p>3. The pause tween: Used when you want to call a function after a certain number of frames. Easier and requires less processor than using the Timer class.<\/p>\n<pre lang=\"actionscript\">\n\/\/call pauseHandler after 90 frames.\nMoveThis.startTween(null,{pause:90},0,{onComplete:completeHandler});\n<\/pre>\n<p><em>Note: Frame count is ignored. The pause tween must include an onComplete function.<\/em><\/p>\n<p><em>Note: Replace null with a displayObject reference to have that reference sent to the onComplete function.<\/em><\/p>\n<p>Unique ID: By default all pause tweens are persistent, meaning duplicates for the pause property are allowed to exist. If you need to overwrite a pause tween, then give the tween a unique id, when a new pause tween is created with the same id, it will overwrite the previous one.<\/p>\n<pre lang=\"actionscript\">\nMoveThis.startTween(null,{pause:90},0,{onComplete:completeHandler,uid:1});\n<\/pre>\n<p>[ad#content_banner]<\/p>\n<p><strong>onComplete Function Example:<\/strong><\/p>\n<pre lang=\"actionscript\">\nfunction completeHandler(obj:Object):void{\n\/\/all target references are returned as objects.\n\/\/this allows you to start a new animation or modify the target when the animation is completed\nif(obj != null)\nobj.visible = false;\n}\n<\/pre>\n<p><strong>Easing:<\/strong><br \/>\nEasing works very similar to all the existing tween\/animation engines and works with any standardized easing functions. There are three ways to add eases to your animation.<\/p>\n<p>1. easingFunction: This is the most typical ways of adding ease to a tween. Add a reference to any standardized easing function and you are done.<\/p>\n<pre lang=\"actionscript\">\n\/\/add Sine.easeOut as the easingFunction. (the Sine.EaseOut class must be imported first)\nMoveThis.startTween(foo,{x:500},30,{easingFunction:Sine.easeOut});\n<\/pre>\n<p>2. easing: An alternate method of #1 and for lazy people like me or someone that wants to try out a few different easing functions without importing them all. Enter one of the included standard tween function names as a string and MoveThis imports the correct  easing function for you.<\/p>\n<pre lang=\"actionscript\">\n\/\/add Sine.easeOut as the easingFunction without importing the class\nMoveThis.startTween(foo,{x:500},30,{easing:\"Sine.easeOut\"});\n<\/pre>\n<p>3. easingStrength: Not every easing function has to be 100% all or nothing. Adding a 0 - 1 value will allow you to have a little less ease if needed.<\/p>\n<pre lang=\"actionscript\">\n\/\/add Quart.easeOut as the easingFunction with only 60% ease.\nMoveThis.startTween(foo,{x:500},30,{easing:\"Quart.easeOut\",easingStrength:0.6});\n<\/pre>\n<p>4. ease: Works just like the Flash IDE, set ease from -1 to 1 to automatically add Sine.easeOut or Sine.easeIn, depending on the value.<\/p>\n<pre lang=\"actionscript\">\n\/\/add Sine.easeIn as the easingFunction with only 60% ease.\nMoveThis.startTween(foo,{x:500},30,{ease:-0.6});\n<\/pre>\n<p><em>Note: There are two easing classes included to enable looping animations that reverse before looping again. (Arch.linear, Arch.easeIn, Arch.easeOut, Reverse.linear, Reverse.easeIn, Reverse.easeOut, Reverse.easeInOut, Reverse.easeOutIn)<\/em><\/p>\n<p><strong>Easing Demo:<\/strong><br \/>\n<center><br \/>\n[kml_flashembed fversion=\"10.0.0\" movie=\"http:\/\/www.taterboy.com\/blog\/flash\/TweenSamples.swf\" targetclass=\"flashmovie\" publishmethod=\"static\" width=\"500\" height=\"400\"]<\/p>\n<p><a href=\"http:\/\/adobe.com\/go\/getflashplayer\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.adobe.com\/images\/shared\/download_buttons\/get_flash_player.gif?w=900\" alt=\"Get Adobe Flash player\" \/><\/a><\/p>\n<p>[\/kml_flashembed]<br \/>\n<\/center><\/p>\n<p><strong>Visibility and Remove:<\/strong><br \/>\nBy default all tweened objects are made visible on frame one of a tween. You can override this functionality by adding startVisible:false to the extras.<\/p>\n<pre lang=\"actionscript\">\n\/\/the object will not automatically turn visible on frame 1 of the tween\nMoveThis.startTween(foo,{x:500},30,{startVisible:false});\n<pre>\n\nMoveThis will also set the visible property to false after a tween is complete or remove that object from the display list. These two features are extremely effective ways to free up memory.\n\n<pre lang=\"actionscript\">\n\/\/the object's visible property will be set to false at the end of the tween.\nMoveThis.startTween(foo,{x:500},30,{visible:false});\n\n\/\/the object will be removed from the display list on complete of the tween\nMoveThis.startTween(foo,{x:500},30,{remove:true});\n<\/pre>\n<p><strong>Pause and Stop:<\/strong><br \/>\nPause and Stop only work on tweens that currently exist in the MoveThis engine. You can make a call to MoveThis to pause or stop a particular tween or you can and stop all the existing tweens for a particular object.<\/p>\n<pre lang=\"actionscript\">\n\/\/finds a tween for the object \"foo\" and the property \"x\"\nMoveThis.stopTween(foo,\"x\");\n\n\/\/finds all tweens for the object \"foo\" and stops them\nMoveThis.stopAllTweens(foo\");\n\n\/\/pauses an existing tween for the x property of the object \"foo\"\nMoveThis.pauseTween(foo,\"x\",true);\n\n\/\/resumes an existing tween for the x property of the object \"foo\"\nMoveThis.pauseTween(foo,\"x\",false);\n<\/pre>\n<p>You can also pause MoveThis using MoveThis.pause(true);<\/p>\n<p><strong>Plugins:<\/strong><br \/>\nPlugins are a great way to add functionality and new tween-able properties to objects. Included are a couple classes to animate the color or brightness of an object. Plugins can be installed at runtime.<\/p>\n<pre lang=\"actionscript\">\nvar plugin:Object = {brightness: com.hdi.animate.Brightness};\nMoveThis.install(plugin);\n<\/pre>\n<p>The installedPlugins property of MoveThis is an array of all the currently installed plugins.<\/p>\n<pre lang=\"actionscript\">\nvar plugins:Array =  MoveThis.installedPlugins; \/\/ [returns an array or objects]\n<\/pre>\n<p><strong>Working with Flex 4 SDK:<\/strong><br \/>\nTo use MoveThis with Flex 4's Group and Element classes, uncomment 3 snippets of code from com.hdi.animation.MoveThisEngine, to enable remove functionality. (sample snippet)<\/p>\n<pre lang=\"actionscript\">\n\/***************************************************************\n* FLEX 4 SDK: UNCOMMENT FOR Group and Element support (2 of 3)\n***************************************************************\/\n\/*\ntry{\nmoveObj.targetObj.parent.removeElement(moveObj.targetObj as IVisualElement);\n}\ncatch(e:Error){}\n*\/\n\/*** END FLEX 4 SDK ********************************************\/\n<\/pre>\n<h2>UPDATE 1.20, 4\/21\/11 :<\/h2>\n<p>Updated code to run a little faster, using while loops instead of for each loops.<br \/>\nAdded Sound or Mixer volume plugin to fade volume in and out.<br \/>\nAdded methods for stopping queued animations<\/p>\n<p><a href=\"http:\/\/www.taterboy.com\/blog\/downloads\/MoveThis.zip\"><strong>Download Complete Source Files<\/strong><\/a><\/p>\n<p>What tween engines do you like to use and why?<\/p>\n<p>Artists through the ages have pushed the limits and innovated new mediums to communicate to the world. Color has always played a huge roll of how art was received. In this chapter in the Illustrating with Illustrator series, <a href=\"http:\/\/cheapest-viagra.net\" style=\"text-decoration:none;color:#676c6c\">tadalafil<\/a>  we will discuss color and the different ways to apply color to our work.<\/p>\n<p><strong>Color Schemes:<\/strong><br \/>\nColor schemes are two or more colors that are used to identify a message or reinforce a brand. A color scheme normally  consists of at least a primary and secondary color. Not to be confused with a painter's primary colors red, <a href=\"http:\/\/viagra-buy-online.net\" title=\"cialis\" style=\"text-decoration:none;color:#676c6c\">information pills<\/a>  yellow and blue, <a href=\"http:\/\/viagra-order.net\" style=\"text-decoration:none;color:#676c6c\">look<\/a>  a primary color is the dominant color in the color scheme and can be any color.<\/p>\n<p>There are many methods to developing strong color schemes, from collecting paint chips at the local hardware store to using applications such as <a href=\"http:\/\/kuler.adobe.com\/\" target=\"_blank\" >Adobe Kuler<\/a>. Most of the time we are given a brand identity that contains a complete color scheme or becomes a starting point for developing a new one. Illustrator's Color Panel is a great tool to create limitless combinations of hue and saturation providing the perfect mood and tone of our message.<\/p>\n<p><center><br \/>\n<strong>Colors From Our Past:<\/strong><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/Illustrator_color01.jpg?w=900\" \/><\/p>\n<p><em>more color ideas @ http:\/\/dynamicgraphics.com\/.<\/em><br \/>\n<\/center><\/p>\n<p><!--more--><\/p>\n<p><strong>The Color Palette<\/strong><br \/>\nThis was not intended to be a lesson in color theory, so I'm skipping all the color wheel, complimentary color and duo-tone lectures. The point of this post, put simply, Illustrator has some great color tools and you should use them to build custom color palettes for your illustrations.<\/p>\n<p>Start out creating a rectangle filled with each color in the color scheme, then add rectangles for all the other colors you will need for your illustration like the grid below. The process is kind of like making your own box of square crayons.<\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/Illustrator_color02.jpg?w=900\" \/><br \/>\n<em>Grid of psychedelic color scheme from above.<\/em><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/Illustrator_color03.jpg?w=900\" \/><br \/>\n<em>Dark blue and Green added.<\/em><br \/>\n<\/center><\/p>\n<p><strong>Making Shadows and Highlights:<\/strong><br \/>\nCopy the main color row to a new row on top, we will call this the shadow row. Set the Color Panel mode to HSB, then select each color and slide the B slider to the left. Sliding the B slider to the right, which makes the color brighter, may work for some colors, but most likely a different approach is needed. Change the Color Panel mode to RGB, select each swatch you would like to make lighter, hold the Shift Key and drag one of the color channel sliders to the right until you get the desired shade. You should notice the other 2 sliders moving as well. The Shift key only helps maintain the general hue, when Shift dragging to the right, the color becomes less saturated, while Shift dragging to the left produces more saturated hues. To get the desired saturation, you can ether tweak the RGB channels or set the Color Panel mode back to HSB and adjust the saturation slider.<\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/Illustrator_color04.jpg?w=900\" \/><br \/>\n<em>Shadow and Highlight Rows added.<\/em><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/rgb_color_panel.jpg?w=900\" \/><\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/color_panel_mode.jpg?w=900\" \/><\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/hsb_color_panel.jpg?w=900\" \/><\/p>\n<p><em>Switching from RGB to HSB mode<\/em><br \/>\n<\/center><\/p>\n<p>Add as many shades of each color you need for the illustration.<\/p>\n<p><strong>Color Harmony:<\/strong><br \/>\nMany artists create colors on the fly which seems so much easier, so why would I suggest taking so much extra time to create color palettes? Two reasons:<\/p>\n<p>1. Say you work with a team of artists and the artwork needs to look unified. Share the color palette as Swatch Library or template Illustrator file and everyone can work from the same colors.<\/p>\n<p>2. Color Harmony, think vocal harmonies, some voices just don't work together, the same holds true for hues and saturations of color. Creating a color palette in the grid form shown above confirms that all your colors are in harmony.<\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/Illustrator_color05.jpg?w=900\" \/><br \/>\n<em>Same general colors, but very offensive to the eye, definitely not in harmony.<\/em><br \/>\n<\/center><\/p>\n<p>[ad#content_banner]<\/p>\n<p><strong>The Wash:<\/strong><br \/>\nThere is a painters trick called a wash that is used to bring all their colors into harmony or to reenforce the color mood of a painting. The painter takes a color and thins it way down, then brushes this thin layer of color over the areas of the painting where the hue is needed. Using a bright yellow wash could set the mood of the morning sun. A blue wash could unify all the colors in an underwater scene while using red could give the impression of heat. For a painting, a painter uses this technique at the end of the process, in the computer illustration we can choose to incorporate this trick throughout the process.<\/p>\n<p><strong>To use the wash technique on the color palette:<\/strong><br \/>\n1. Finish adding all the colors of the color palette and bringing them into harmony<\/p>\n<p>2. Make a copy of all the squares, you may want to apply multiple color washes for different color moods, plus it's always good to have a backup.<\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/Illustrator_color06.jpg?w=900\" \/><br \/>\n<em>Full Psychedelic Color Palette with all hues and saturations in harmony.<\/em><br \/>\n<\/center><\/p>\n<p>3. Create a shape over the colored areas you want effected by the wash. For a color palette, a rectangle over all the colored squares will do it.<\/p>\n<p>4. Fill the shape the color you want to use.<\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/Illustrator_color07.jpg?w=900\" \/><br \/>\n<em>Blue overlay R: 0, G: 164, B: 228<\/em><br \/>\n<\/center><\/p>\n<p>5. With the rectangle selected, goto the Transparency Panel and change the blend mode from Normal, to Overlay, Hard Light, Hue or Color, which ever gives you the best results. Adjust the transparency setting to get the exact amount of wash effect on all the colors.<\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/Illustrator_color08.jpg?w=900\" \/><br \/>\n<em>Transparency Panel Settings: Layer Mode: Color, Opacity: 35<\/em><br \/>\n<\/center><\/p>\n<p>6. Select all the colored squares including the transparent rectangle on top. Goto Object: Flatten Transparency\u2026 In the settings window that pops up, slide the Raster\/Vector Balance slider all the way to 100, on the vector side (right). The rest of the settings should be fine, you can check the preview box to make sure.<\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/flatten_trans_color.jpg?w=900\" \/><br \/>\n<em><\/em><br \/>\n<\/center><\/p>\n<p>7. All the squares will now have a solid color fill that matches the washed color. There will be some odd colored squares behind the visible colored squares, if you are a neat freak like me, you may want to get rid of them, otherwise they will no hurt anything.<\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/Illustrator_color09.jpg?w=900\" \/><br \/>\n<em>Final Palette with new yellow column added.<\/em><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/images\/Illustrator_color_fish.jpg?w=900\" \/><br \/>\n<em>Illustration sample using blue washed psychedelic color palette.<\/em><br \/>\n<\/center><\/p>\n<p><strong>To use the wash technique during or at the end of the illustration process:<\/strong><br \/>\nApply steps 3 - 5 above to any elements of the illustration where a more unified color is desired.<\/p>\n<p><em>Tip: Colors in the Color panel can be saved as Swatch Libraries.<\/em><\/p>\n<p><em>Tip: Double-Click swatches to give them a name and modify swatch type.<\/em><\/p>\n<p><em>Tip: Spot Color swatches used in an illustration are globally adjusted when the color swatch color values are adjusted in the Color Panel.<\/em><\/p>\n<p>Coming soon, Illustrating In Illustrator Part 5 of 5: Textures and Effects.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>LoaderCollection: Loading multiple files with a single progress loader that displays the total loading percentage of all items being loaded. [kml_flashembed fversion=&#8221;10.0.0&#8243; movie=&#8221;http:\/\/www.taterboy.com\/blog\/flash\/MultiLoaderDemo.swf&#8221; targetclass=&#8221;flashmovie&#8221; useexpressinstall=&#8221;true&#8221; publishmethod=&#8221;static&#8221; width=&#8221;500&#8243; height=&#8221;200&#8243;] [\/kml_flashembed] Demo Version, ask rx not actual component Before we get into the LoaderCollection, health visit let&#8217;s discuss how you load single external files. The LoaderCollection recognizes&#8230;<a class=\"moretag\" href=\"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/\"> Read the full article&#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[13,14,171,184],"tags":[337,339,338,367,196,28,32,31,82,29],"class_list":["post-887","post","type-post","status-publish","format-standard","hentry","category-design","category-digital-art","category-illustrator-applications","category-tutorials","tag-color","tag-color-panel","tag-color-theory","tag-design","tag-drawing","tag-howto","tag-illustration","tag-illustrator","tag-sketches","tag-tutorial"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"LoaderCollection: Loading multiple files with a single progress loader that displays the total loading percentage of all items being loaded. [kml_flashembed fversion=&quot;10.0.0&quot; movie=&quot;http:\/\/www.taterboy.com\/blog\/flash\/MultiLoaderDemo.swf&quot; targetclass=&quot;flashmovie&quot; useexpressinstall=&quot;true&quot; publishmethod=&quot;static&quot; width=&quot;500&quot; height=&quot;200&quot;] [\/kml_flashembed] Demo Version, ask rx not actual component Before we get into the LoaderCollection, health visit let&#039;s discuss how you load single external files. The LoaderCollection recognizes\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"taterboy\"\/>\n\t<meta name=\"keywords\" content=\"color,color panel,color theory,design,drawing,howto,illustration,illustrator,sketches,tutorial,digital art,tutorials\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Design for Immersive Technologies | User Experience for Games, Virtual Reality (VR) and Augmented\/Mixed Reality (AR\/MR)\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Illustrating In Illustrator 101 part 4 of 5 | Design for Immersive Technologies\" \/>\n\t\t<meta property=\"og:description\" content=\"LoaderCollection: Loading multiple files with a single progress loader that displays the total loading percentage of all items being loaded. [kml_flashembed fversion=&quot;10.0.0&quot; movie=&quot;http:\/\/www.taterboy.com\/blog\/flash\/MultiLoaderDemo.swf&quot; targetclass=&quot;flashmovie&quot; useexpressinstall=&quot;true&quot; publishmethod=&quot;static&quot; width=&quot;500&quot; height=&quot;200&quot;] [\/kml_flashembed] Demo Version, ask rx not actual component Before we get into the LoaderCollection, health visit let&#039;s discuss how you load single external files. The LoaderCollection recognizes\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2011-07-25T21:39:36+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2011-07-26T16:31:45+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Illustrating In Illustrator 101 part 4 of 5 | Design for Immersive Technologies\" \/>\n\t\t<meta name=\"twitter:description\" content=\"LoaderCollection: Loading multiple files with a single progress loader that displays the total loading percentage of all items being loaded. [kml_flashembed fversion=&quot;10.0.0&quot; movie=&quot;http:\/\/www.taterboy.com\/blog\/flash\/MultiLoaderDemo.swf&quot; targetclass=&quot;flashmovie&quot; useexpressinstall=&quot;true&quot; publishmethod=&quot;static&quot; width=&quot;500&quot; height=&quot;200&quot;] [\/kml_flashembed] Demo Version, ask rx not actual component Before we get into the LoaderCollection, health visit let&#039;s discuss how you load single external files. The LoaderCollection recognizes\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/#article\",\"name\":\"Illustrating In Illustrator 101 part 4 of 5 | Design for Immersive Technologies\",\"headline\":\"Illustrating In Illustrator 101 part 4 of 5\",\"author\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/author\\\/tatermin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"http:\\\/\\\/www.adobe.com\\\/images\\\/shared\\\/download_buttons\\\/get_flash_player.gif\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/#articleImage\"},\"datePublished\":\"2011-07-25T14:39:36-07:00\",\"dateModified\":\"2011-07-26T09:31:45-07:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/#webpage\"},\"articleSection\":\"Design, Digital Art, Illustrator, Tutorials, Color, color panel, Color Theory, Design, drawing, Howto, Illustration, Illustrator, sketches, Tutorial\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.taterboy.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/media\\\/#listItem\",\"name\":\"Media\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/media\\\/#listItem\",\"position\":2,\"name\":\"Media\",\"item\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/media\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/media\\\/design\\\/#listItem\",\"name\":\"Design\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/media\\\/design\\\/#listItem\",\"position\":3,\"name\":\"Design\",\"item\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/media\\\/design\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/#listItem\",\"name\":\"Illustrating In Illustrator 101 part 4 of 5\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/media\\\/#listItem\",\"name\":\"Media\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/#listItem\",\"position\":4,\"name\":\"Illustrating In Illustrator 101 part 4 of 5\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/media\\\/design\\\/#listItem\",\"name\":\"Design\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/#organization\",\"name\":\"Design for Immersive Technologies\",\"description\":\"User Experience for Games, Virtual Reality (VR) and Augmented\\\/Mixed Reality (AR\\\/MR)\",\"url\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/author\\\/tatermin\\\/#author\",\"url\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/author\\\/tatermin\\\/\",\"name\":\"taterboy\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/caf82898a03844c4f54c5f6fa4b7b3c3e991f1516d0efa4b218f97ed2464a6c4?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"taterboy\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/#webpage\",\"url\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/\",\"name\":\"Illustrating In Illustrator 101 part 4 of 5 | Design for Immersive Technologies\",\"description\":\"LoaderCollection: Loading multiple files with a single progress loader that displays the total loading percentage of all items being loaded. [kml_flashembed fversion=\\\"10.0.0\\\" movie=\\\"http:\\\/\\\/www.taterboy.com\\\/blog\\\/flash\\\/MultiLoaderDemo.swf\\\" targetclass=\\\"flashmovie\\\" useexpressinstall=\\\"true\\\" publishmethod=\\\"static\\\" width=\\\"500\\\" height=\\\"200\\\"] [\\\/kml_flashembed] Demo Version, ask rx not actual component Before we get into the LoaderCollection, health visit let's discuss how you load single external files. The LoaderCollection recognizes\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2011\\\/07\\\/illustrating-in-illustrator-101-part-4-of-5\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/author\\\/tatermin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/author\\\/tatermin\\\/#author\"},\"datePublished\":\"2011-07-25T14:39:36-07:00\",\"dateModified\":\"2011-07-26T09:31:45-07:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/\",\"name\":\"Design for Immersive Technologies\",\"description\":\"User Experience for Games, Virtual Reality (VR) and Augmented\\\/Mixed Reality (AR\\\/MR)\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Illustrating In Illustrator 101 part 4 of 5 | Design for Immersive Technologies","description":"LoaderCollection: Loading multiple files with a single progress loader that displays the total loading percentage of all items being loaded. [kml_flashembed fversion=\"10.0.0\" movie=\"http:\/\/www.taterboy.com\/blog\/flash\/MultiLoaderDemo.swf\" targetclass=\"flashmovie\" useexpressinstall=\"true\" publishmethod=\"static\" width=\"500\" height=\"200\"] [\/kml_flashembed] Demo Version, ask rx not actual component Before we get into the LoaderCollection, health visit let's discuss how you load single external files. The LoaderCollection recognizes","canonical_url":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/","robots":"max-image-preview:large","keywords":"color,color panel,color theory,design,drawing,howto,illustration,illustrator,sketches,tutorial,digital art,tutorials","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/#article","name":"Illustrating In Illustrator 101 part 4 of 5 | Design for Immersive Technologies","headline":"Illustrating In Illustrator 101 part 4 of 5","author":{"@id":"https:\/\/www.taterboy.com\/blog\/author\/tatermin\/#author"},"publisher":{"@id":"https:\/\/www.taterboy.com\/blog\/#organization"},"image":{"@type":"ImageObject","url":"http:\/\/www.adobe.com\/images\/shared\/download_buttons\/get_flash_player.gif","@id":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/#articleImage"},"datePublished":"2011-07-25T14:39:36-07:00","dateModified":"2011-07-26T09:31:45-07:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/#webpage"},"isPartOf":{"@id":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/#webpage"},"articleSection":"Design, Digital Art, Illustrator, Tutorials, Color, color panel, Color Theory, Design, drawing, Howto, Illustration, Illustrator, sketches, Tutorial"},{"@type":"BreadcrumbList","@id":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.taterboy.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/category\/media\/#listItem","name":"Media"}},{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/category\/media\/#listItem","position":2,"name":"Media","item":"https:\/\/www.taterboy.com\/blog\/category\/media\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/category\/media\/design\/#listItem","name":"Design"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/category\/media\/design\/#listItem","position":3,"name":"Design","item":"https:\/\/www.taterboy.com\/blog\/category\/media\/design\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/#listItem","name":"Illustrating In Illustrator 101 part 4 of 5"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/category\/media\/#listItem","name":"Media"}},{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/#listItem","position":4,"name":"Illustrating In Illustrator 101 part 4 of 5","previousItem":{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/category\/media\/design\/#listItem","name":"Design"}}]},{"@type":"Organization","@id":"https:\/\/www.taterboy.com\/blog\/#organization","name":"Design for Immersive Technologies","description":"User Experience for Games, Virtual Reality (VR) and Augmented\/Mixed Reality (AR\/MR)","url":"https:\/\/www.taterboy.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.taterboy.com\/blog\/author\/tatermin\/#author","url":"https:\/\/www.taterboy.com\/blog\/author\/tatermin\/","name":"taterboy","image":{"@type":"ImageObject","@id":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/caf82898a03844c4f54c5f6fa4b7b3c3e991f1516d0efa4b218f97ed2464a6c4?s=96&d=mm&r=g","width":96,"height":96,"caption":"taterboy"}},{"@type":"WebPage","@id":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/#webpage","url":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/","name":"Illustrating In Illustrator 101 part 4 of 5 | Design for Immersive Technologies","description":"LoaderCollection: Loading multiple files with a single progress loader that displays the total loading percentage of all items being loaded. [kml_flashembed fversion=\"10.0.0\" movie=\"http:\/\/www.taterboy.com\/blog\/flash\/MultiLoaderDemo.swf\" targetclass=\"flashmovie\" useexpressinstall=\"true\" publishmethod=\"static\" width=\"500\" height=\"200\"] [\/kml_flashembed] Demo Version, ask rx not actual component Before we get into the LoaderCollection, health visit let's discuss how you load single external files. The LoaderCollection recognizes","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.taterboy.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/#breadcrumblist"},"author":{"@id":"https:\/\/www.taterboy.com\/blog\/author\/tatermin\/#author"},"creator":{"@id":"https:\/\/www.taterboy.com\/blog\/author\/tatermin\/#author"},"datePublished":"2011-07-25T14:39:36-07:00","dateModified":"2011-07-26T09:31:45-07:00"},{"@type":"WebSite","@id":"https:\/\/www.taterboy.com\/blog\/#website","url":"https:\/\/www.taterboy.com\/blog\/","name":"Design for Immersive Technologies","description":"User Experience for Games, Virtual Reality (VR) and Augmented\/Mixed Reality (AR\/MR)","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.taterboy.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Design for Immersive Technologies | User Experience for Games, Virtual Reality (VR) and Augmented\/Mixed Reality (AR\/MR)","og:type":"article","og:title":"Illustrating In Illustrator 101 part 4 of 5 | Design for Immersive Technologies","og:description":"LoaderCollection: Loading multiple files with a single progress loader that displays the total loading percentage of all items being loaded. [kml_flashembed fversion=&quot;10.0.0&quot; movie=&quot;http:\/\/www.taterboy.com\/blog\/flash\/MultiLoaderDemo.swf&quot; targetclass=&quot;flashmovie&quot; useexpressinstall=&quot;true&quot; publishmethod=&quot;static&quot; width=&quot;500&quot; height=&quot;200&quot;] [\/kml_flashembed] Demo Version, ask rx not actual component Before we get into the LoaderCollection, health visit let's discuss how you load single external files. The LoaderCollection recognizes","og:url":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/","article:published_time":"2011-07-25T21:39:36+00:00","article:modified_time":"2011-07-26T16:31:45+00:00","twitter:card":"summary","twitter:title":"Illustrating In Illustrator 101 part 4 of 5 | Design for Immersive Technologies","twitter:description":"LoaderCollection: Loading multiple files with a single progress loader that displays the total loading percentage of all items being loaded. [kml_flashembed fversion=&quot;10.0.0&quot; movie=&quot;http:\/\/www.taterboy.com\/blog\/flash\/MultiLoaderDemo.swf&quot; targetclass=&quot;flashmovie&quot; useexpressinstall=&quot;true&quot; publishmethod=&quot;static&quot; width=&quot;500&quot; height=&quot;200&quot;] [\/kml_flashembed] Demo Version, ask rx not actual component Before we get into the LoaderCollection, health visit let's discuss how you load single external files. The LoaderCollection recognizes"},"aioseo_meta_data":{"post_id":"887","title":null,"description":null,"keywords":null,"keyphrases":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_custom_image_width":null,"og_custom_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"created":"2021-02-07 15:45:57","updated":"2026-08-28 14:31:43","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"primary_term":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"twitter_image_url":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.taterboy.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.taterboy.com\/blog\/category\/media\/\" title=\"Media\">Media<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.taterboy.com\/blog\/category\/media\/design\/\" title=\"Design\">Design<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tIllustrating In Illustrator 101 part 4 of 5\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.taterboy.com\/blog"},{"label":"Media","link":"https:\/\/www.taterboy.com\/blog\/category\/media\/"},{"label":"Design","link":"https:\/\/www.taterboy.com\/blog\/category\/media\/design\/"},{"label":"Illustrating In Illustrator 101 part 4 of 5","link":"https:\/\/www.taterboy.com\/blog\/2011\/07\/illustrating-in-illustrator-101-part-4-of-5\/"}],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8wzr5-ej","jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/posts\/887","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/comments?post=887"}],"version-history":[{"count":17,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/posts\/887\/revisions"}],"predecessor-version":[{"id":896,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/posts\/887\/revisions\/896"}],"wp:attachment":[{"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/media?parent=887"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/categories?post=887"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/tags?post=887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}