2011-10-27 16 views
0

イベントの後に別のクラスに関数を呼び出そうとしています。 、私はそれが正常に動作させることはできません別のクラスの関数を呼び出す

WorldDesign.clearButton.addEventListener(MouseEvent.CLICK, clearWorld);  
public function clearWorld(evt:MouseEvent):void{ 
       WorldDesign.redrawMap(); 
      } 

:私はから呼んでいるクラスから

public static function redrawMap():void { 
      removeChild(global.world); 
      var world:WorldHandler = new WorldHandler(40,30); 
      global.world = world; 
      addChild(global.world); 
      world.mask = MapArea; 
     } 

:doucmentクラスから

は、ここに私のコードです私は "定義されていないメソッド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()と定義します。その後、インスタンスを介して関数を呼び出すことができます。それはあなたが

var worldDesign:WorldDesign=new WorldDesign(); 

が次にあなたが

worldDesign.redrawMap() 
0

最良の方法はドンであるとしてredrawMap()を呼び出すことができます(おそらくswfファイルの残りの初期化中に)どこかWorldDesignクラスをインスタンス化する必要があります、です静的メソッドをまったく使用しません。これにはシングルトンパターンを使用します。

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()を使用します。

関連する問題