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

Actionscript 3 AS3使用removeChild从动态路径引用中删除MC,actionscript-3,path,reference,movieclip,removechild,Actionscript 3,Path,Reference,Movieclip,Removechild,我甚至不确定标题是否反映了我想做的事情。这是背景故事。我有一个有5个“holder”movieclip的movieclip。它们是我动态添加movieclips的容器 父容器的实例名为pyramid,持有者实例名标记在6个食物组之后,即“谷物持有者”、“水果持有者”、“蔬菜持有者”等 持有者位于金字塔容器内,实例名称如上所述,金字塔容器将添加到显示列表中。我有一个addFoodToPyramid()函数,它将'foodMC'mc'添加到它们各自的持有者中。因此,将通过pyramid.fruthH

我甚至不确定标题是否反映了我想做的事情。这是背景故事。我有一个有5个“holder”movieclip的movieclip。它们是我动态添加movieclips的容器

父容器的实例名为pyramid,持有者实例名标记在6个食物组之后,即“谷物持有者”、“水果持有者”、“蔬菜持有者”等

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

function startFoodDrag(e:MouseEvent):void
调用(我将使用谷物作为示例)如下:

其功能是:

函数addFoodToPyramid(thisArray:Array,thisHolder:MovieClip,thisCounter:Number):无效 {

{ foodDrag=e.target作为MovieClip; foodDrag.startDrag(); foodPoint=新点(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引用是错误的

}

很明显,这个引用不是一个direct removeChild(),而是一个特定的路径。比如:

pyramid.*THE-HOLDER-OF-foodDRAG*.removeChild(foodDrag). 
但我就是不知道该怎么做。我试过:

var mcParent:MovieClip=(foodDroppedMC.parent);
pyramid.mcParent.removeChild(foodDroppedMC);
var mcParent:String=(foodDroppedMC.parent.name);
pyramid.getChildByName(mcParent).removeChild(foodDroppedMC);
//返回错误1118隐式强制

我试过:

var mcParent:MovieClip=(foodDroppedMC.parent);
pyramid.mcParent.removeChild(foodDroppedMC);
var mcParent:String=(foodDroppedMC.parent.name);
pyramid.getChildByName(mcParent).removeChild(foodDroppedMC);
//返回1061调用可能未定义的方法removeChild,引用静态类型等

事实上,这是一个如此平庸的问题,是什么使它如此令人沮丧


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

我在理解你问题的细节时遇到了一些麻烦(我想也许你的帖子中丢失了一些“删除功能”)

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

foodDrag.parent.removeChild(foodDrag);
假设
foodDrag
是您要删除的电影剪辑


如果我没有抓住要点,请回答并帮助我理解你的问题。

尝试了这个方法,效果很好!!!:

var mcParent:String=(foodDroppedMC.parent.name);
pyramid[mcParent].removeChild(foodDroppedMC);
如果有人能提供一些关于这是如何工作的见解,我很想知道。我假设类型为“String”的mcParent将(foodDroppedMC.parent.name)设为字符串,而mc路径中的[]方括号以某种方式将其转换为mc,因此不存在隐式强制。那是我的猜测。。。哈哈


不管怎样,祝你快乐。请随意扩展此解决方案。我不太确定谷歌大学(我在那里得到了Flash as3 degree=P)教了很多关于[]的知识,而不是与数组一起使用

应用于对象的
[]
运算符将该对象视为关联哈希。它允许您使用包含属性名称的字符串访问该对象的属性。有关关联哈希的详细解释。(顺便说一句,上面的链接是一个大得多的文档的一部分,您可能会发现它非常有用)。我还应该指出,如果您只想删除
foodDroppedMC
,您所要做的就是
foodDropMC.parent.removeChild(foodDroppedMC)
。这就是全部。您不需要通过
金字塔
对象解析父对象。非常感谢您的帮助。你说得对-我应该写foodDropMC.parent.removeChild(foodDroppedMC)。这里要吸取的教训是使事情变得复杂,但决不能超过它应有的程度。