我正在尝试在事件发生后将函数调用到另一个类。
这是我的代码:
来自doucment类:
public static function redrawMap():void {
removeChild(global.world);
var world:WorldHandler = new WorldHandler(40,30);
global.world = world;
addChild(global.world);
world.mask = MapArea;
}
从我打来的课程开始:
WorldDesign.clearButton.addEventListener(MouseEvent.CLICK, clearWorld);
public function clearWorld(evt:MouseEvent):void{
WorldDesign.redrawMap();
}
我无法让它正常工作,我得到奇怪的消息,如“调用未定义的方法removeChild”,它指向redrawMap函数。这意味着它找到了这个功能,但我似乎无法用它做任何事情。
有什么想法吗?
答案 0 :(得分:0)
由于redrawMap是一个静态方法,你还需要像静态方法一样调用removeChild和addChild:
public static function redrawMap():void {
WorldDesign.removeChild(global.world);
var world:WorldHandler = new WorldHandler(40,30);
global.world = world;
WorldDesign.addChild(global.world);
world.mask = MapArea;
}
答案 1 :(得分:0)
redrawMap()
已被定义为static
方法。这意味着它无法访问任何实例方法,如removeChild()
。
解决方案是使其成为实例方法 - 将其定义为public function redrawMap()
。然后,您可以通过实例调用该函数。也就是说,你必须在某处实例化WorldDesign类(可能是在swf其余部分的初始化期间)
var worldDesign:WorldDesign=new WorldDesign();
然后你可以调用redrawMap()作为
worldDesign.redrawMap()
答案 2 :(得分:0)
最好的方法是不要使用静态方法。使用单例模式。
class WorldDesign {
private static var _instance:WorldDesign;
public static function get instance():WorldDesign {
if(!_instance) _instance = new WorldDesign();
return _instance;
}
public function redrawMap():void {
removeChild(global.world);
var world:WorldHandler = new WorldHandler(40,30);
global.world = world;
addChild(global.world);
world.mask = MapArea;
}
}
并使用WorldDesign.instance.redrawMap();