2011-10-27 199 views
0

我想在事件發生後調用另一個類的函數。在另一個類中調用函數

這裏是我的代碼:

從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

'removeChild'是一種實例方法。你不能從靜態方法中調用它。 –

回答

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; 
} 
0

redrawMap()已被定義爲static方法。這意味着它無法訪問任何實例方法,如removeChild()

解決方法是將其設爲實例方法 - 將其定義爲public function redrawMap()。然後你可以通過實例調用函數。也就是說,你必須從某個地方實例化WorldDesign類

var worldDesign:WorldDesign=new WorldDesign(); 

然後就可以調用redrawMap()作爲

worldDesign.redrawMap() 
0

最好的辦法是不要(大概是SWF其餘的初始化過程中)根本不使用靜態方法。爲此使用Singleton模式。

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