如何删除由其他功能创建的子影片剪辑

时间:2011-02-14 09:05:38

标签: flash flex actionscript-3

我为鼠标事件添加了一个监听器功能

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悬停? 当我从酒吧里滚出来时,我想取下孩子。

3 个答案:

答案 0 :(得分:1)

查看MovieClip的removeChildAt()方法。 如果你的酒吧里只有一个孩子和一个推出听众,那可能就是这样:

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

修改

对不起,我以为你小时候就把悬停添加到酒吧。如果在添加条形图时将悬停添加到同一父动画片段,则必须在函数外部存储对悬停的引用。如果你有很多悬停,你可以将它存储在一个数组中。

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);
}

答案 1 :(得分: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

答案 2 :(得分:0)

一种方法是将所有“悬停”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);
        }
    }
}