0

我正在尝试制作一个 blitting 引擎,这部分真的让我很难过。我正在尝试创建一个外部类来从纹理打包器吐出的文件中进行所有 xml 解析。我在我的实用程序包中创建了一个名为 XmlParserBlit.as 的类

我希望能够实例化它并调用一个函数来完成它的工作,如下所示:

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

然而,这似乎不会那么容易。XmlParserBlit 类内部的函数有一个事件侦听器,该事件侦听器会在加载完成时触发一个函数。似乎flash只是继续通过函数,而trace("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

            }


        }
4

1 回答 1

0

onXmlLoaded直到加载函数异步完成后才会触发。您最好的选择是getAryFromBlitXmlData不返回值,并处理您的_xmlDataArray内部onXmlLoaded

于 2013-09-04T15:33:37.647 回答