2012-03-23 6 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> 

XMLので、他のクラスからXmlDataLoaderクラスをロードするデータがそれにアクセスすることができます。例えば。 Playerはプレイヤータグからのデータにアクセスし、敵タグから敵などにアクセスします。

xmlデータがロードされた後でのみ、xmlオブジェクトを返す方法はわかりません。

このクラス以外でm_xmlDataをトレースすると、常にnullと表示されます。私は既に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; 
     } 
    } 

} 
はあなたの助けのために事前にありがとうございます:

は、ここに私のXmlDataLoaderクラスです。

答えて

1

varを定義するときにnullに設定されているため、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) 
} 
関連する問題