2011-10-27 6 views
0

J'essaie d'appeler une fonction vers une autre classe après un événement.Appel d'une fonction dans une autre classe

Voici mon code:

de la classe 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; 
     } 

De la classe, je vous appelle de:

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

Je ne peux pas le faire fonctionner correctement, Je reçois des messages bizarres comme "Appel à la méthode non définie removeChild" et pointant vers la fonction redrawMap. Ce qui signifie qu'il a trouvé la fonction, mais je n'arrive pas à faire quoi que ce soit avec.

Des idées?

+0

'removeChild' est une méthode d'instance. Vous ne pouvez pas l'appeler depuis une méthode statique. –

Répondre

0

Depuis redrawMap est une méthode statique, vous devez également appeler removeChild et addChild comme méthodes statiques:

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() a été définie comme une méthode static. Cela signifie qu'il ne peut accéder à aucune méthode d'instance comme removeChild().

La solution serait d'en faire une méthode d'instance - définissez-le comme public function redrawMap(). Vous pouvez ensuite appeler la fonction via des instances. Autrement dit, vous devrez instancier la classe WorldDesign quelque part (probablement lors de l'initialisation du reste du swf)

var worldDesign:WorldDesign=new WorldDesign(); 

vous pouvez appeler redrawMap() comme

worldDesign.redrawMap() 
0

Le meilleur moyen est don n'utilisez pas de méthode statique du tout. Utilisez le motif Singleton pour cela.

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

} 

Et d'utiliser WorldDesign.instance.redrawMap();

Questions connexes