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