Как обрабатывать цепочку событий - PullRequest
1 голос
/ 10 января 2011

Мне нужно обработать эту цепочку, используя один метод LoadXML и один объект urlLoader:

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

Загрузчик начинает загрузку после первой итерации frameFunc (почему?) Я хочу, чтобы он запускался немедленно. (Необязательно)

И начинает загружаться только "GraphicsSet.xml"

Метод LoX класса загрузчика:

    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 ]

1 голос
/ 10 января 2011

Ваш код немного сбивает с толку, потому что вы не следуете принятым соглашениям об именах для AS3.

Имена методов и переменных не должны быть написаны заглавными буквами, скорее camelCased:

  private function xmlLoadCompleteListener(e:Event):void{}

Во-вторых, зачем использовать Singletons?Использование Одиночки довольно спорное, сделать небольшой поиск на этом сайте, чтобы выяснить, почему.

В вашем конкретном случае проблема с загрузкой возникает из-за того, как вы используете 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)); 
        }
     }
0 голосов
/ 10 января 2011

Поскольку вы не предоставили никакой информации о том, где именно находятся эти две строки, содержащие операторы LoadXML, я не могу ответить на вопрос о том, почему они не загружаются немедленно.

Что касаетсядругая часть: кажется, вы используете экземпляр Singleton для загрузки.Поскольку вы не позволяете завершить первую операцию загрузки, вторая операция загрузки немедленно переопределит первую, и ваша программа никогда не загрузит запрошенный файл.Вы можете обойти это, используя два ResourceLoader экземпляра или запустив вторую операцию в вашем XMLLoadCompleteListener после завершения загрузки первого файла.

...