2011-02-14 4 views
1

다른 함수로 만든 자식 동영상 클립을 제거하는 방법

마우스 이벤트

bar.addEventListener(MouseEvent.MOUSE_OVER,mouse_over_bar); 

에 대한 청취자 함수를 추가했습니다. 함수 정의

public function mouse_over_bar(ev:MouseEvent):void{ 

       var hover:MovieClip=new Hvr(); 
       var tween:Tween; 

       addChild(hover); 
       hover.x=mouseX; 
       hover.y=mouseY; 

       TransitionManager.start(hover,{type:Fly,direction:Transition.IN,duration:1,easing:Strong.easeInOut}); 
       hover.Hd1.text= xmlFile.children()[2]. @ name; 
       hover.descrpt.text= xmlFile.children()[2]. @ des; 

       } 

이 자식 movieclip 호버를 제거하려면 어떻게해야합니까? 술집에서 나올 때 나는 칠을 제거하고 싶습니다.

답변

1

MovieClip의 removeChildAt() 메서드를 확인하십시오. 당신은 단지 하나의 당신의 줄에 아이 롤 아웃 수신기가있는 경우 , 그것은 그렇게 STH 수 :

public function mouse_over_bar(ev:MouseEvent):void{ 
    var currentBar : MovieClip = ev.target as MovieClip; 
    currentBar.removeChildAt(0); 
} 

편집 :

아 미안, 난 당신이 어디를 추가 생각 해요 막대기를 아이로 가져 가라. 막대가 추가 된 것과 같은 부모 영화 클립에 호버를 추가하면 함수 외부에 호버에 대한 참조를 저장해야합니다. 그리고 당신이 많은 hovers가 있다면, 배열에 저장할 수 있습니다.

private var _hoverArray : Array = new Array() 

public function mouse_over_bar(ev:MouseEvent):void{ 

       var hover:MovieClip=new Hvr(); 
       _hoverArray.push(hover); 
       var tween:Tween; 

       addChild(hover); 
       hover.x=mouseX; 
       hover.y=mouseY; 

       TransitionManager.start(hover,{type:Fly,direction:Transition.IN,duration:1,easing:Strong.easeInOut}); 
       hover.Hd1.text= xmlFile.children()[2]. @ name; 
       hover.descrpt.text= xmlFile.children()[2]. @ des; 

       } 

그런 다음 삭제하려는 호버 개체를 나타내는 방법을 찾아야합니다. "hover"라는 새로운 클래스를 정의하고, MovieClip을 확장하고, ID를 부여하고 바에 ID를 부여 할 것을 제안합니다. 따라서 롤아웃하면 _hoverArray에서 ID를 검색하여 제거 할 수 있습니다.

public function mouse_over_bar(ev:MouseEvent):void{ 
    var currentBar : BarClass = ev.target as BarClass; 
    var barID : int = currentBar.id; 
    var currentHover : Hover; 
    for each(var h : Hover in _hoverArry) 
    { 
      if(h.id == barID) 
      { 
       currentHover = h; 
       break; 
      } 
    } 

    if(currentHover) 
      removeChild(currentHover); 
} 
+0

이것이 작동하는지 잘 모르겠습니다. 'hover' 표시 객체는 현재 인스턴스에 추가되고'bar' 표시 객체에는 추가되지 않습니다. 기본적으로 당신은'bar '의 자식이 아니기 때문에'hover '를 제거 할 수 없습니다. – Taurayi

0

나는 당신이 어떻게 응용 프로그램을 구성했는지는 잘 모르겠지만 작동해야합니다.

bar.addEventListener(MouseEvent.MOUSE_OVER, onBarMouseOver); 
bar.addEventListener(MouseEvent.MOUSE_OUT, onBarMouseOut); 

public function onBarMouseOver(e:MouseEvent):void 
{     
    var hover:MovieClip = new Hvr();  
    hover.name = "hover"; 
    var tween:Tween; 
    addChild(hover);     
    hover.x = mouseX;  
    hover.y = mouseY;    
    TransitionManager.start(hover,{type:Fly,direction:Transition.IN,duration:1,easing:Strong.easeInOut});  
    hover.Hd1.text = xmlFile.children()[2]. @ name;     
    hover.descrpt.text = xmlFile.children()[2]. @ des; 

}// end function 

public function onBarMouseOut(e:MouseEvent):void 
{ 
    if(this.contains(getChildByName("hover")) 
    removeChild(this.removeChild(this.getChildByName("hover"))); 

}// end function 
0

"호버 (hover)"MC를 모두 어레이에 유지하고 롤아웃에서 모든 것을 한꺼번에 제거하는 것이 한 가지 방법입니다. 이렇게하면 버그가 될 수있는 개별 무비 클립을 추적 할 필요가 없습니다.

private var hovers:Array = new Array(); 

public function mouse_over_bar(ev:MouseEvent):void{ 
    var hover:MovieClip = new Hvr();  
    addChild(hover); 
    hovers.push(hover); 
} 

public function mouse_out_bar(ev:MouseEvent):void{ 
    while (hovers.length){ 
     var mc:MovieClip = hovers.pop(); 
     if (contains(mc)){ 
      removeChild(mc); 
     } 
    } 
} 
관련 문제