0

我什至不确定标题是否反映了我想要做的事情。这是背景故事。我有一个包含 5 个“持有人”电影剪辑的电影剪辑。它们是我动态添加的影片剪辑的容器。

父容器的实例名称为金字塔,容器实例名称标注在 6 个食物组之后,即“grainholder”、“fruitholder”、“vegetableholder”等...

持有者在金字塔容器内,实例名称如上,金字塔容器被添加到显示列表中。我有一个 addFoodToPyramid() 函数,它将“foodMC”mc 添加到它们各自的持有者中。因此,将通过 pyramid.fruitholder.addChild(Apple) 动态添加一个 [object Apple]。该函数还添加了一个侦听器。下面是调用和函数:

调用(我将以谷物为例)是这样的:

addFoodToPyramid(grainArray, grainHolder, grainCounter);

功能是:

函数 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 作为电影剪辑;foodDrag.startDrag(); foodPoint = new Point(foodDrag.x,foodDrag.y); stage.addEventListener(MouseEvent.MOUSE_UP, stopFoodDrag, false, 0, true); }

那么 drop 函数和问题就在这里:

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

// 返回 1061 调用可能未定义的方法 removeChild 引用静态类型等

这是一个如此平庸的问题,这让它如此令人沮丧......

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

4

2 回答 2

0

我在了解您的问题的详细信息时遇到了一些麻烦(我认为您的帖子中可能有些“删除功能”不知何故丢失了)。

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

foodDrag.parent.removeChild(foodDrag);

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

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

于 2010-10-31T05:18:04.050 回答
0

试过这个,它的工作原理!!!:

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

如果有人可以就其工作原理提供一些见解,我很想知道。我假设类型为“String”的 mcParent 将 (foodDroppedMC.parent.name) 设为字符串,并且 mc 路径中的 [] 括号以某种方式将其转换为 MC,因此没有隐式强制。这是我的猜测……哈哈。

总之,快乐的日子。随意扩展此解决方案。我不太确定 Google 大学(我在那里获得了我的 Flash as3 学位 =P)教了很多关于 [] 除了与数组一起使用的知识。

于 2010-10-31T05:20:32.087 回答