Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 如何处理事件链_Apache Flex_Flash_Actionscript 3_Events_Actionscript - Fatal编程技术网

Apache flex 如何处理事件链

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

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

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