我有一个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函数,则程序将失败。
如何在加载文件之前让类等待接受函数调用?
答案 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());
}
现在每帧返回一次宽度,一切正常。谢谢你的帮助;)