如何处理事件链

时间:2011-01-10 01:10:51

标签: flex flash actionscript-3 events actionscript

我需要使用一个LoadXML方法和一个urlLoader对象处理此链:

ResourceLoader.Instance.LoadXML("Config.xml");
ResourceLoader.Instance.LoadXML("GraphicsSet.xml");

Loader在第一次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.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");             
    }

感谢。

2 个答案:

答案 0 :(得分:1)

您的代码有点令人困惑,因为您没有遵循AS3的公认命名约定。

方法&变量名称不应该大写,而是camelCased:

  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)); 
        }
     }

答案 1 :(得分:0)

由于您尚未提供有关包含LoadXML语句的这两行的确切位置的任何信息,因此我无法回答有关它们未立即加载的原因的部分。

至于另一部分:看起来你正在使用单例实例进行加载。由于您不允许它完成第一次加载操作,第二次加载操作将立即覆盖第一个加载操作,并且您的程序将永远不会加载所请求的文件。您可以通过使用两个ResourceLoader实例来解决此问题,或者在第一个文件加载完成后在XMLLoadCompleteListener中开始第二个操作。