这是在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")
}
答案 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
}