如何访问之后加载的文件?

时间:2013-10-09 03:15:02

标签: actionscript-3 flash

这是在Flash Action Script 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")
} 

1 个答案:

答案 0 :(得分: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
}