Apache flex 如何处理事件链
我需要使用一个LoadXML方法和一个urlLoader对象处理此链:Apache flex 如何处理事件链,apache-flex,flash,actionscript-3,events,actionscript,Apache Flex,Flash,Actionscript 3,Events,Actionscript,我需要使用一个LoadXML方法和一个urlLoader对象处理此链: ResourceLoader.Instance.LoadXML("Config.xml"); ResourceLoader.Instance.LoadXML("GraphicsSet.xml"); 加载程序在第一次frameFunc迭代后开始加载(为什么?) 它只开始加载“GraphicsSet.xml” Loader类LoadXml方法: public function LoadXML(URL:String):X
ResourceLoader.Instance.LoadXML("Config.xml");
ResourceLoader.Instance.LoadXML("GraphicsSet.xml");
加载程序在第一次frameFunc迭代后开始加载(为什么?)
它只开始加载“GraphicsSet.xml”
Loader类LoadXml方法:
public function LoadXML(URL:String):XML
{
urlLoader.addEventListener(Event.COMPLETE,XmlLoadCompleteListener);
urlLoader.load(new URLRequest(URL));
return xml;
}
private function XmlLoadCompleteListener(e:Event):void
{
var xml:XML = new XML(e.target.data);
trace(xml);
trace(xml.name());
if(xml.name() == "Config")
XMLParser.Instance.GameSetup(xml);
else if(xml.name() == "GraphicsSet")
XMLParser.Instance.GraphicsPoolSetup(xml);
}
主要内容如下:
public function Main()
{
Mouse.hide();
this.addChild(Game.Instance);
this.addEventListener(Event.ENTER_FRAME,Game.Instance.Loop);
}
在Game Constructor中将Game.Instance添加到渲染队列时,我开始初始化方法:
public function Game():void
{
trace("Constructor");
if(_instance)
throw new Error("Use Instance Field");
Initialize();
}
其代码为:
private function Initialize():void
{
trace("initialization");
ResourceLoader.Instance.LoadXML("Config.xml");
ResourceLoader.Instance.LoadXML("GraphicsSet.xml");
}
谢谢。由于您没有提供包含
LoadXML
语句的那两行的确切位置信息,因此我无法回答为什么不立即加载
至于另一部分:看起来您正在使用一个单例实例进行加载。由于您不允许它完成第一个加载操作,因此第二个加载操作将立即覆盖第一个加载操作,并且您的程序将永远不会加载请求的文件。您可以通过使用两个
ResourceLoader
实例,或者在第一个文件加载完成后,在xmloadcompletelistener
中启动第二个操作来解决这个问题。因为您没有提供任何关于包含LoadXML
语句的那两行的确切位置的信息,我无法回答他们为什么不立即装货的问题
至于另一部分:看起来您正在使用一个单例实例进行加载。由于您不允许它完成第一个加载操作,因此第二个加载操作将立即覆盖第一个加载操作,并且您的程序将永远不会加载请求的文件。您可以通过使用两个
ResourceLoader
实例来解决这个问题,或者在第一个文件加载完成后在XMLLoadCompleteListener
中启动第二个操作。您的代码读起来有点混乱,因为您没有遵循AS3的公认命名约定
方法和变量名称不应大写,而应大写:
private function xmlLoadCompleteListener(e:Event):void{}
第二,为什么要使用单例?单身汉的使用是相当有争议的,在这个网站上搜索一下,找出原因
在您的特定情况下,您的加载问题来自于您使用Singleton的方式。如果需要同时加载多个文件,则需要为每个操作创建一个新的URLLoader实例,否则将只加载最后一个调用的操作
private var assets:Array = ['Config.xml' , 'GraphicsSet.xml'];
//Load your assets
private function loadAssets( value:Array ):void
{
for each ( var url:String in value )
{
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, xmlLoadCompleteListener);
urlLoader.load(new URLRequest(URL));
}
}
您的代码读起来有点混乱,因为您没有遵循AS3公认的命名约定 方法和变量名称不应大写,而应大写:
private function xmlLoadCompleteListener(e:Event):void{}
第二,为什么要使用单例?单身汉的使用是相当有争议的,在这个网站上搜索一下,找出原因
在您的特定情况下,您的加载问题来自于您使用Singleton的方式。如果需要同时加载多个文件,则需要为每个操作创建一个新的URLLoader实例,否则将只加载最后一个调用的操作
private var assets:Array = ['Config.xml' , 'GraphicsSet.xml'];
//Load your assets
private function loadAssets( value:Array ):void
{
for each ( var url:String in value )
{
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, xmlLoadCompleteListener);
urlLoader.load(new URLRequest(URL));
}
}