0

これは Flash アクション スクリプト 3 にあります。これが私のクラスです。クラスに xml をロードしました。次に、メイン ページの後で、xml に基づいてステージ上で何かを作成するなど、いくつかのことを実行したいと考えています。ヘルプ

関数が呼び出されるまでにxmlがまだロードされていないため、機能しない理由を理解しています。これを解決する方法がわかりません。おそらくイベントリスナーを追加しますか?

package  {  
    public class LoadXMLAdventure {
        var adventureXML: XML;
        var xmlReq:URLRequest;
        var xmlLoader:URLLoader = new URLLoader();
        var _currentRoom:int;

        public function LoadXMLAdventure(xmlFileName:String) {
            xmlReq = new URLRequest(xmlFileName);
            xmlLoader.load(xmlReq);
            xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
        }

        function xmlLoaded(event:Event):void{
            adventureXML = new XML(xmlLoader.data)  
            //trace(    adventureXML.toXMLString()  )
        }

        public function myFunction():void{
            trace(adventureXML.toXMLString()) //this does not work
        }
    }

}

私のメインページで

var game:LoadXMLAdventure = new LoadXMLAdventure("file.xml");
game.myFunction();

アップデート

メインページで関数を呼び出して、クラス内のステージ操作を実行できるようにしたいのですが、未定義のメソッドというエラーが発生します

function xmlLoaded(event:Event):void{
            adventureXML = new XML(xmlLoader.data)  
            this.dispatchEvent( new Event("showRoom") );
}

これは舞台の上

stage.addEventListener("showRoom",showRoom);
function showRoom(e:Event):void{
  trace("showroom hello")
} 
4

1 に答える 1

0

xml のロードが完了したときにイベントをディスパッチできますが、あなたの場合は、xmlLoaded で myFunction を呼び出すだけです。

import flash.events.EventDispatcher;

public class LoadXMLAdventure extends EventDispatcher{

    public function LoadXMLAdventure(xmlFileName:String) {
        xmlReq = new URLRequest(xmlFileName);
        xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
    }

    public function startLoad():void {
        xmlLoader.load(xmlReq);
    }

    function xmlLoaded(event:Event):void{
        adventureXML = new XML(xmlLoader.data);

        this.dispatchEvent(new Event("LoadXmlComplete"));
    }
}

使い方はこちら

var game:LoadXMLAdventure = new LoadXMLAdventure("file.xml"); 
game.addEventListener("LoadXmlComplete", onComplete);
game.startLoad();

private function onComplete(e:Event):void {
   //do some thing
}
于 2013-10-09T03:27:41.163 に答える