Flash 如何删除由其他函数创建的子电影剪辑

Flash 如何删除由其他函数创建的子电影剪辑,flash,apache-flex,actionscript-3,Flash,Apache 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(hove

我为鼠标事件添加了一个侦听器函数

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;

                }
我如何删除这个儿童电影悬停? 当我从吧台上滚出来时,我想把chil去掉。

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

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

呃,对不起,我以为你小时候在酒吧里加了悬停。如果将悬停添加到与添加条相同的父movieclip,则必须在函数外部存储对悬停的引用。如果有多个悬停,可以将其存储在数组中

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);
}
请看MovieClip的removeChildAt()方法。 如果你的酒吧里只有一个孩子和一个滚动听众,可能是这样的:

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

呃,对不起,我以为你小时候在酒吧里加了悬停。如果将悬停添加到与添加条相同的父movieclip,则必须在函数外部存储对悬停的引用。如果有多个悬停,可以将其存储在数组中

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

我不太确定您是如何构建应用程序的,但这应该可以工作

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

我不太确定您是如何构建应用程序的,但这应该可以工作

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

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

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

我不确定这是否有效。将
悬停
显示对象添加到当前实例中,而不是添加到
显示对象中。基本上你不能删除
悬停
,因为它不是
的子项,至少在我看来是这样。我不确定这是否有效。将
悬停
显示对象添加到当前实例中,而不是添加到
显示对象中。基本上,你不能删除
悬停
,因为它不是
的子项,至少在我看来是这样。