2011-01-10 2 views
0

그 안에 버튼이있는 MovieClip 메뉴가 있습니다. 나는 MousEvent.CLICK가있는 메뉴를 가지고 있으며 클릭하는 것을 등록하는 방법을 생각하려고합니다. 다행스럽게도 나는 이것에 대해 효율적입니다 ... 고마워요!AS3 : 클릭중인 하위 개체 찾기

private function menu_CLICK(e:MouseEvent):void 
    { 
     //this is where I need help on 
     switch (????) 
     { 
      case "books" : 
       showSection("books") 
       break; 
      case "music" : 
       showSection("music") 
       break; 
      default : 

     } 
    } 

    private function showSection(section:String) 
    { 
     switch (section) 
     { 
      case "books" : 
       trace("books"); 
       break; 
      case "music" : 
       trace("music"); 
       break; 
      default : 

     } 
    } 
+0

에는 마우스 이벤트의 경우 'target', 'currentTarget', 'getObjectsUnderPoint()'등이 있습니다. 전용 함수 menu_CLICK (e : MouseEvent) : void {trace (e.currentTarget.name); } –

답변

2

메뉴 MovieClip에 하나만있는 대신 이벤트 리스너를 각 Button 개체에 추가하십시오.

e.target을 사용하여 클릭하는 객체 인스턴스를 가져올 수 있습니다. 그런 다음 회원과 비교해야합니다 (예 : if (e.target == books), 메뉴 버튼의 이름이 인 경우 또는 스테이지 이름 인 if (e.target.name == "books")) 또는 버튼에 추가하는 모든 사용자 정의 속성과 비교해야합니다.

+0

클릭 한 메뉴의 하위 항목을 찾으려고합니다. 미심쩍은면 충분히 미안해. – Tom

+0

나는 이미 너무 먼 것 같았다. 나는 지금 그것을 얻고 있다고 생각합니다. 나는 당신을 위해 대답을 편집했습니다. – weltraumpirat

+0

하나의 이벤트 리스너를 사용하여 클릭하는 각 자식 객체를 대상으로하는보다 효율적인 방법이 있다고 생각했습니다. – Tom

0

각 중첩 클립에 ID를 지정하는 것은 어떻습니까?

var sections:Array = ['books', 'music', 'other1', 'other2', 'other3'] 

private function assignClips(){ 
    // lets say you have 5 buttons/clips inside of your holder movieclip, each named clip0, clip1, etc 
    for (var i=0; i<sections.length; i++){ 
     var mc = holder.getChildByName('clip'+i) 
     mc.id = i 
     mc.addEventListener.MouseEvent.CLICK, menu_CLICK, false, 0, true) 
    } 
} 

private function menu_CLICK(e:MouseEvent):void 
    var id = e.currentTarget.id 
    var val = sections[id] 
    showSection(val) 
} 

private function showSection(section:String){ 
    trace(section) 
}