Actionscript 3:强制程序等到调用事件处理程序

时间:2010-04-03 21:20:19

标签: flash actionscript-3 flash-cs4

我有一个AS 3.0类,它使用URLRequest加载JSON文件。

package {

    import flash.display.MovieClip;
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.events.Event;

    public class Tiles extends MovieClip {

        private var mapWidth:int,mapHeight:int;
        private var mapFile:String;

        private var mapLoaded:Boolean=false;

        public function Tiles(m:String) {

            init(m);

        }

        private function init(m:String):void {

            // Initiates the map arrays for later use.
            mapFile=m;

            // Load the map file in.
            var loader:URLLoader = new URLLoader();
            loader.addEventListener(Event.COMPLETE, mapHandler);
            loader.load(new URLRequest("maps/" + mapFile));


        }

        private function mapHandler(e:Event):void {

            mapLoaded=true;
            mapWidth=3000;

        }

        public function getMapWidth():int {

            if (mapLoaded) {

                return (mapWidth);

            } else {

                return(-1);
            }

        }

    }

}

当文件加载完毕后,mapHandler事件会对类属性进行更改,而属性又会使用getMapWidth函数进行访问。但是,如果在完成加载之前调用getMapwidth函数,则程序将失败。

如何在加载文件之前让类等待接受函数调用?

2 个答案:

答案 0 :(得分:0)

 private function mapHandler(e:Event):void {
              if (mapLoaded) {

                mapLoaded=true;
                 mapWidth=3000;
                return (mapWidth);

             } else {

           getMapWidth()

        }

}

        public function getMapWidth():int 
                return(-1);


        }

这可能会解决您的问题,为什么在不需要时在getMapWidth中检查它。

答案 1 :(得分:0)

好的,所以我想出了我需要做的事情。问题在于我的主时间轴上的代码:

trace(bg.getMapWidth());

我忘了代码只在主时间轴上没有事件监听器的情况下执行一次,比如这个

stage.addEventListener(Event.ENTER_FRAME, n);

function n(e:Event):void
{
    trace(bg.getMapWidth());
}

现在每帧返回一次宽度,一切正常。谢谢你的帮助;)