每天學一點flash(61) flash載入多個xml設計

來源:互聯網
上載者:User

   要想知道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類一樣。一點點實現。

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.