AS3使用removeChild从动态路径引用中删除MC

时间:2010-10-31 05:08:28

标签: actionscript-3 path reference movieclip removechild

我甚至不确定标题是否反映了我想要做的事情。这是背景故事。我有一个动画片段,里面有5个'持有者'的动画片段。它们是我动态添加动画片段的容器。

父容器的实例名称为金字塔,持有者实例名称标记在6个食品组之后,即“grainholder”,“fruitholder”,“vegetableholder”等等......

持有人在金字塔容器内,实例名称如上,金字塔容器被添加到显示列表中。我有一个addFoodToPyramid()函数,它将'foodMC'mc添加到他们各自的持有者。因此,[对象Apple]将通过pyramid.fruitholder.addChild(Apple)动态添加。该函数还添加了一个监听器。继承人的电话和功能:

电话会议(我将以谷物为例)是这样的:

addFoodToPyramid(grainArray, grainHolder, grainCounter);

功能是:

function addFoodToPyramid(thisArray:Array,thisHolder:MovieClip,thisCounter:Number):void       {

   thisCounter = 0;

   for (var f:Number=0; f<thisArray.length; f++)
   {

    trace(thisArray.length);
    foodMC = (thisArray[f] as MovieClip);
    trace(foodMC);
    thisHolder.addChild(foodMC);
    foodMC.addEventListener(MouseEvent.MOUSE_DOWN, startFoodDrag, false, 0, true);
    thisMC.scaleX = thisMC.scaleY = .7;
    thisMC.x = 60 * thisCounter;
    thisCounter++;

   }

  }

然后我有一个startDrag函数:

function startFoodDrag(e:MouseEvent):void

{    foodDrag = e.target为MovieClip;    foodDrag.startDrag();    foodPoint = new Point(foodDrag.x,foodDrag.y);    stage.addEventListener(MouseEvent.MOUSE_UP,stopFoodDrag,false,0,true);   }

然后放下功能和问题就在这里:

foodDrag = foodDrop;
stage.addEventListener(MouseEvent.MOUSE_UP, stopFoodDrag);
if(foodDrag.dropTarget.parent==myPlate){

//问题       removeChild之(foodDrag); //显然返回错误,因为foodDrag引用错误

}

好的,很明显,引用不是直接的removeChild(),而是特定的路径。像:

pyramid.*THE-HOLDER-OF-foodDRAG*.removeChild(foodDrag). 

但我无法理解如何做到这一点。我试过了:

var mcParent:MovieClip=(foodDroppedMC.parent);
pyramid.mcParent.removeChild(foodDroppedMC);

//返回错误1118隐式强制

我试过了:

var mcParent:String=(foodDroppedMC.parent.name);
pyramid.getChildByName(mcParent).removeChild(foodDroppedMC);

// return 1061调用可能未定义的方法removeChild with ref to static type etc etc

事实上,这是一个平庸的问题是让它如此令人沮丧的原因......

任何帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:0)

关于你的问题的细节,我有点麻烦(我想也许某些“丢弃功能”在你的帖子中丢失了)。

但如果问题是:如何在不知道父母的确切路径的情况下从父母中删除影片剪辑?那么答案很简单:

foodDrag.parent.removeChild(foodDrag);

假设foodDrag是您要删除的影片剪辑。

如果我错过了这一点,请回复并帮助我了解您的要求。

答案 1 :(得分:0)

试过这个和它的工作!!!:

var mcParent:String=(foodDroppedMC.parent.name);
pyramid[mcParent].removeChild(foodDroppedMC);

如果有人能够就如何运作提供一些见解,我很乐意知道。我假设类型为“String”的mcParent使(foodDroppedMC.parent.name)成为一个字符串,并且mc路径中的[]括号以某种方式将其作为MC投射,因此没有隐式强制。那是我的猜测......哈哈。

无论如何,快乐的日子。随意扩展此解决方案。我不太确定谷歌大学(我获得我的Flash as3学位= P)教授了很多关于除了数组之外的[]的使用。