2011-10-27 9 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 함수를 가리킨다. 어떤 의미인지는 모르지만 그걸로 아무 것도 할 수없는 것 같습니다.

아이디어가 있으십니까? redrawMap 정적 메서드이기 때문에

+0

'removeChild'는 인스턴스 메소드입니다. 정적 메서드 내에서 호출 할 수 없습니다. –

답변

0

은 또한 정적 메소드와 같은에서 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();