2012-03-23 19 views
0

我創建了一個從XML文件加載數據的類。加載數據後返回一個XML對象

我gameObject.xml文件:

<?xml version="1.0" encoding="utf-8" ?> 
<xml> 
    <player> 
     <health>100</health> 
     <speed>200</speed> 
    </player> 
    <enemy> 
     <health>50</health> 
    </enemy> 
</xml> 

XmlDataLoader從XML,因此其他類可以訪問它的類加載數據。例如。玩家從玩家標籤訪問數據,從敵方標籤敵人,等等......

事情是我不知道如何才能返回xml對象只有在加載xml數據後。

每當我在課外追蹤m_xmlData,它總是給我一個null。在將它傳遞給其他課程之前,我已經初始化了XmlDataLoader

這裏是我的XmlDataLoader類:

public class XmlDataLoader 
{ 
    private var m_xmlData:XML = null; 
    private var m_urlLoader:URLLoader = null; 

    public function XmlDataLoader() 
    { 

    } 

    public function initialize(sUrl:String = ""):void 
    { 
     if (!m_urlLoader) 
     { 
     if (sUrl == "") 
     { 
      m_urlLoader = new URLLoader(new URLRequest("gameObjectProperties.xml")); 
     } 
     else 
     { 
      m_urlLoader = new URLLoader(new URLRequest(sUrl)); 
     } 

     if (!m_urlLoader.hasEventListener(Event.COMPLETE)) 
     { 
      m_urlLoader.addEventListener(Event.COMPLETE, loadXml); 
     } 
     } 
    } 

    public function destroy():void 
    { 
     if (m_urlLoader) 
     { 
     if (m_urlLoader.hasEventListener(Event.COMPLETE)) 
     { 
      m_urlLoader.removeEventListener(Event.COMPLETE, loadXml); 
     } 

     m_urlLoader = null; 
     } 

     if (m_xmlData) 
     { 
     m_xmlData = null; 
     } 
    } 

    public function get xmlData():XML 
    { 
     return m_xmlData; 
    } 

    private function loadXml(e:Event):void 
    { 
     m_xmlData = new XML(e.target.data); 

     if (m_urlLoader) 
     { 
     if (m_urlLoader.hasEventListener(Event.COMPLETE)) 
     { 
      m_urlLoader.removeEventListener(Event.COMPLETE, loadXml); 
     } 

     m_urlLoader = null; 
     } 
    } 

} 

預先感謝您的幫助。

回答

1

它的值爲null,因爲當您定義var時設置爲null。
您沒有顯示任何顯示您如何訪問數據的代碼。
所以我會假設你正在尋找的數據加載完成

之前,您應該重新調度中的loadXML函數的事件

this.dispatchEvent(e); 

// and out side the class you should have something like 
var myDataLoader:XmlDataLoader = new XmlDataLoader() 
    mydataLoader.addEventListener(Event.COMPLETE, gotData) 

function gotData(e:Event):void{ 
    trace(e.currentTarget.xmlData) 
}