2012-07-31 4 views
0

클래스 객체가 첨부 된 mc_menu이라는 라이브러리 객체가 있습니다. 클래스는 무대에서 메뉴를 만들고 무대에 MC를 놓습니다 (그리고 메뉴 클릭으로 대체합니다). 부모 클래스에서 배치 한 객체를 스테이지에서 호출하려고하는데 올바른 방법을 찾을 수 없습니다.형제 객체 참조

public class main extends MovieClip { 
     public function main() { 


      //add container layers 
      addChild(bottomLayer); 
      addChild(topLayer); 


      topLayer.addChild(menuInst); 
      menuInst.init(); 

} 

    public var menuInst= new mc_Menu;    
    public var topLayer:Sprite = new Sprite(); 
    public var bottomLayer:Sprite = new Sprite(); 

당신이 보는대로, 나중에 사용하기 위해 메인 무대에 스프라이트의 2 층을 prepearing :

주요 코드는 코드의 중요한 부분입니다 main.as 에 앉아있다. 메뉴는 다른 레이어가 맨 아래 레이어에 배치되어있는 한 최상위 레이어에 성공적으로 배치되어야하며 항목의 MC는 그대로 두어야합니다.

잘 문제는 그런 것입니다. 나는 menuClass에 맨 아래 레이어를 호출하려고하고 있는데, 그걸 제대로 이해할 수있는 방법을 찾지 못했습니다. mcMenu.as

public class mc_Menu extends MovieClip { 

     public function mc_Menu() { 

     } 


public function init():void{  
     bottomLayer.addChild(masterChapter); 
} 

나는이 때문에는 "bottomLayer"를 모르는 클래스 범위 내에서이 방법을 수행 할 수 없습니다 알고

코드 부분입니다. 하지만 어떻게 도와 줄 수 있니?

다른 요소가 나중에 레이어 클래스를 사용하기 때문에 레이어 인스턴스를 기본 클래스에 남겨 두는 것이 좋습니다. (선택의 여지가 없다면 ...)

고마워요!

답변

0

bottomLayer를 mc_Menu 인스턴스의 부모를 통해 참조 할 수 있습니다. 잘못된 생각 인 유일한 이유는 mc_Menu를 다시 사용하려는 경우 다른 부모가있을 것이라는 것입니다. 프로그래밍 측면에서 수업은 밀접하게 결합되지만 이것은 신속하고 더러운 해결책이 될 것입니다 :

public function init():void{  
     parent.parent.bottomLayer.addChild(masterChapter); 
} 

더 나은 옵션은 로봇 다리와 같은 "싱글"패턴이나 의존성 주입의 일종 MVC 또는 MVVM 프레임 워크를 사용하는 것입니다 또는 SpringAS 또는 주 요소와 자식 요소 외부에 인스턴스를 선언하고 값/인스턴스를 둘 다에 삽입 할 수있는 다른 곳에서 사용할 수 있습니다.

public class mc_Menu extends MovieClip { 
    private var _bottomLayerHandle:Sprite; 
    public function mc_Menu(bottomLayer:Sprite) 
    { 
     _bottomLayerHandle = bottomLayer; 
    } 
    public function init():void{  
     _bottomLayerHandle.addChild(masterChapter); 
    } 
} 

그들을 단지 만들 때 다음 :

편집

초 동안이를 통해 생각하면, 또 다른 옵션은 당신이 좋아 만들 때 mc_Menu에 bottomLayer의 인스턴스를 전달하는 것입니다 Sprite가 먼저 만들어 지도록 재정렬하십시오.

public var bottomLayer:Sprite = new Sprite(); 
public var topLayer:Sprite = new Sprite(); 
public var menuInst= new mc_Menu(bottomLayer); 
+0

고마워요! somewhy 나는 2 단계 뒤로 (parent.parent) 갈 필요가 있다고 생각하지 않았지만 단 하나, 그리고 그것이 부모 이유. 나를 위해 일하지 않았다 ... –