Вызов функции в другом классе - PullRequest
0 голосов
/ 27 октября 2011

Я пытаюсь вызвать функцию для другого класса после события.

Вот мой код:

Из класса 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 голосов
/ 27 октября 2011

redrawMap() был определен как метод static. Это означает, что он не может получить доступ к каким-либо методам экземпляра, таким как removeChild().

Решение было бы сделать его методом экземпляра - определите его как public function redrawMap(). Затем вы можете вызывать функцию через экземпляры. То есть вам нужно где-то создать экземпляр класса WorldDesign (предположительно, во время инициализации остальной части SWF)

var worldDesign:WorldDesign=new WorldDesign();

Затем вы можете вызвать redrawMap () как

worldDesign.redrawMap()
0 голосов
/ 27 октября 2011

Лучший способ - вообще не использовать статический метод. Используйте шаблон 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 ();

0 голосов
/ 27 октября 2011

Поскольку 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...