要想知道flash載入一個xml,是一件很簡單的事情,只有使用URLLoader就能夠實現載入。目前在網上流行很多種載入的方式,有多種開源的項目。可以方便處理載入外部的資源,進行管理。只是用這樣強大的功能的工具,固然帶來方便和效率,不過當沒有那些類的時候,我們怎樣辦呢?還是最好動手嘗試寫一個,儘管功能不強大,但是至少我們可以不受限制這些工具類庫。這樣對我們發展也會好。
現在我們來寫一個載入多個xml的製作。
製作的方法:
public class XMLManager extends EventDispatcher
繼承EventDispatcher事件指派類
public function add(path:String,id:String):void;//添加xml檔案
public function start():void;//開始載入
public function getXML(id:String):XML;//返回xml檔案
這種組合方式,是借鑒這些載入開源的類庫。
類繼承事件指派
添加檔案
開始載入
借用關聯陣列Dictionary的作用實現存放對象。
一些技巧:
class Item<br />{<br /> public var loader:URLLoader;<br /> public var path:String;<br /> public function Item(loader:URLLoader,path:String)<br /> {<br /> this.loader=loader;<br /> this.path=path;</p><p> }<br />}</p><p>
這個類當中,可以記錄一些資料。這種設計可以稱為類結構體,就像c++結構體一樣。這種類方便儲存資料。
關聯陣列的使用:
public function add(path:String,id:String):void<br /> {<br /> var loader:URLLoader=new URLLoader();<br /> m_data[id]=new Item(loader,path);<br /> num++;<br /> }</p><p>
這樣就能夠像數組一樣儲存一個對象了,方便管理。
代碼清單:
package<br />{<br />import flash.events.*;<br />import flash.net.*;<br />import flash.utils.Dictionary;<br />public class XMLManager extends EventDispatcher<br />{<br />private var m_data:Dictionary=new Dictionary(true);<br />private var num:int=0;<br />public function XMLManager()<br />{<br />}<br />//添加檔案<br />public function add(path:String,id:String):void<br />{<br />var loader:URLLoader=new URLLoader();<br />m_data[id]=new Item(loader,path);<br />num++;<br />}<br />//開始載入<br />public function start():void<br />{<br />for (var i:String in m_data)<br />{<br />m_data[i].loader.load(new URLRequest(m_data[i].path));<br />m_data[i].loader.addEventListener(Event.COMPLETE,completeHandler);<br />m_data[i].loader.addEventListener(IOErrorEvent.IO_ERROR,ErrorHandler);<br />m_data[i].loader.addEventListener(ProgressEvent.PROGRESS,ProgressHandler);<br />}<br />}<br />//返回載入的時候的xml資料<br />public function getXML(id:String):XML<br />{<br />var xml:XML=XML(m_data[id].loader.data);<br />return xml;<br />}<br />//完成處理<br />private function completeHandler(event:Event):void<br />{<br />event.currentTarget.removeEventListener(Event.COMPLETE,completeHandler);<br />num--;<br />if (num==0)<br />{<br />this.dispatchEvent(new Event("loadComplete"));<br />}<br />}<br />//錯誤處理<br />private function ErrorHandler(event:IOErrorEvent):void<br />{<br />this.dispatchEvent(new Event("loadError"));<br />}<br />//進度<br />private function ProgressHandler(event:ProgressEvent):void<br />{<br /> this.dispatchEvent(new Event("loadProgress"));<br />}<br />}<br />}</p><p>import flash.net.URLLoader;</p><p>class Item<br />{<br />public var loader:URLLoader;<br />public var path:String;<br />public function Item(loader:URLLoader,path:String)<br />{<br />this.loader=loader;<br />this.path=path;</p><p>}<br />}
測試一下自己的類結果:
var xml:XMLManager=new XMLManager();<br />xml.add("1.XML","id1");<br />xml.add("2.XML","id2");<br />xml.add("3.XML","id3");<br />xml.start();<br />xml.addEventListener("loadComplete",completeHandler);</p><p>function completeHandler(event:Event):void<br />{<br />trace(xml.getXML("id1"));<br />trace(xml.getXML("id2"));</p><p>trace(xml.getXML("id3"));<br />}
拓展:
通過這種方式,我們已經實現到載入的目的,對沒有太多要求的,這種載入多個xml的設計基本已經實現到。現在我們想一想
如果我們載入多個mp3,那麼我們應該怎樣設計?同理,我們可以借鑒這種載入的方式,通過設計可以完成這樣的功能類。結合這些,就能實現更大強大的載入管理類。就像開源項目當中BulkLoader類和QueueLoader類一樣。一點點實現。