AS3 - Проблемы с функциями, которые возвращают значения переменных из загруженных данных

Я пытаюсь сделать блистательный двигатель, и эта часть действительно доставляет мне неприятности. Я пытаюсь создать внешний класс, который будет выполнять весь синтаксический анализ xml файла, который выкладывает упаковщик текстур. Я сделал класс в своем пакете утилит под названием XmlParserBlit.as

Я надеялся, что смогу просто создать его экземпляр и вызвать единственную функцию для выполнения своей работы, что-то вроде этого:

var _xmlParser:XmlParserBlit = new XmlParserBlit();
_blitDataAry = _xmlParser.getAryFromBlitXmlData("blit_test_4.xml");

Тем не менее, кажется, что это не будет так просто. Функция внутри класса XmlParserBlit имеет прослушиватель событий, который запускает функцию при завершении загрузки. Похоже, что флэш-память просто продолжает проходить через функцию и трассировку ("Finished Array: " + _xmlDataAry); просто возвращает пустой массив. Есть ли какой-нибудь способ для меня, чтобы дождаться завершения прослушивания? Или, может быть, я могу вернуть ответственность за возврат значения из getAryFromBlitXmlData в onXmlLoaded?

Я действительно в замешательстве, и изучение того, как справиться с этой проблемой, откроет мой разум для решения подобных проблем. Благодарю.

public function getAryFromBlitXmlData(xmlPath:String):Array
    {
            _xmlDataAry = []

            _xmlPath = xmlPath;

            _testXml = new XML();
            _testXmlRequest = new URLRequest(_xmlPath);
            _testXmlLoader = new URLLoader();

            _testXmlLoader.addEventListener(Event.COMPLETE, onXmlLoaded);
            _testXmlLoader.load(_testXmlRequest);

            trace("Finished Array: " + _xmlDataAry);

            return _xmlDataAry;

    }

    protected function onXmlLoaded(event:Event):void
    {

        _loadedXML = new XML(event.target.data);

        var theSprites:XMLList = _loadedXML..sprite

            for each ( var _rectSprite:XML in theSprites)
            {

                            //--------------------------------------
                            //  do some string manipulations here
                            //--------------------------------------                        
            }

        var _rectangle:Rectangle = new Rectangle(_xValue, _yValue, _widthValue, _heightValue);

        var miniAry:Array = [_rectangle, _xOffsetValue, _yOffsetValue]

        _xmlDataAry.push(miniAry);


                //* want to return _xmlDataAry to the getAryFromBlitXmlData function

            }


        }

1 ответ

onXmlLoaded не сработает до ПОСЛЕ того, как функция загрузки завершит работу асинхронно. Ваш лучший выбор будет сделать getAryFromBlitXmlData не возвращать значение, а обрабатывать ваши _xmlDataArray Внутри onXmlLoaded

Другие вопросы по тегам