Flash ActionScript3:强制程序等待事件处理程序被调用

Flash ActionScript3:强制程序等待事件处理程序被调用,flash,actionscript-3,flash-cs4,Flash,Actionscript 3,Flash Cs4,我有一个AS 3.0类,它使用URL请求加载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 {

我有一个AS 3.0类,它使用URL请求加载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函数,程序将失败

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

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

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

             } else {

           getMapWidth()

        }

}

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


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


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

好的,所以我知道我需要做什么。问题在于我的主要时间线上的代码:

tracebg.getMapWidth

我忘了代码只执行一次,在主时间线上没有事件侦听器,如下所示

stage.addEventListener(Event.ENTER_FRAME, n);

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

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

好吧,所以我知道我需要做什么。问题在于我的主要时间线上的代码:

tracebg.getMapWidth

我忘了代码只执行一次,在主时间线上没有事件侦听器,如下所示

stage.addEventListener(Event.ENTER_FRAME, n);

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

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

如果在完全加载文件之前调用getMapWidth函数,为什么程序会失败?递归的getMapWidth没有处理好吗?哎呀,忘了编辑那行了。递归调用getMapWidth会导致堆栈溢出错误,因此这是不可能的。如果在文件完全加载之前调用getMapWidth函数,为什么程序会失败?递归的getMapWidth没有处理好吗?哎呀,忘了编辑那行了。递归调用getMapWidth会导致堆栈溢出错误,所以这是不可能的。