在另一个类中调用函数

时间:2011-10-27 03:59:24

标签: flash actionscript-3

我正在尝试在事件发生后将函数调用到另一个类。

这是我的代码:

来自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函数。这意味着它找到了这个功能,但我似乎无法用它做任何事情。

有什么想法吗?

3 个答案:

答案 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();