2010-10-31 60 views
0

我甚至不确定标题是否反映了我想要执行的操作。这是背景故事。我有一个有5个'持有人'的动画片段的movieclip。它们是我动态添加动画片段的容器。AS3使用removeChild从动态路径引用中删除MC

父容器具有金字塔的一个实例名,持有人的实例名称6个食品集团,即“grainholder”,“fruitholder”,“vegetableholder”,等等等等后标...

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

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

addFoodToPyramid(grainArray, grainHolder, grainCounter); 

而且功能:

功能addFoodToPyramid(thisArray:数组,thisHolder:影片剪辑,thisCounter:编号):无效 {

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 as 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){ 

// HERES技术问题 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之与裁判静态类型etc等

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

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

回答

0

我遇到了一些问题,你的问题的详细信息(我想也许某些“下降功能”在你的文章丢失)。

但是,如果问题是:如何从父级删除影片剪辑,而无需知道父级的确切路径?那么答案很简单:

foodDrag.parent.removeChild(foodDrag); 

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

如果我错过了这一观点,请回复并帮助我了解您所问的内容。

0

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

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

如果任何人都可以给一些见解,如何这工作我很想知道。我假设类型为“String”的mcParent使(foodDroppedMC.parent.name)成为一个字符串,并且mc路径中的[]括号以某种方式将其转换为MC,因此不存在隐式强制。这是我的猜测......大声笑。

无论如何,快乐的日子。请随意扩展此解决方案。我并不确定谷歌大学(我的闪存是as3 degree = P)教授的内容非常多,关于[]的使用除了Arrays之外。

+0

将'[]'运算符应用于对象,将该对象视为关联散列。它允许您使用包含属性名称的字符串来访问该对象的属性。 [检查adobe的文档](http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7eea.html)全面解释关联散列。 (顺便说一句,上面的链接是一个更大的文档的一部分,你可能会发现非常有用)。 – Lee 2010-10-31 05:52:30

+0

我还应该指出,如果你只是想删除'foodDroppedMC',你所要做的就是'foodDropMC.parent.removeChild(foodDroppedMC)'。就这样。你不需要通过'pyramid'对象来解析父对象。 – Lee 2010-10-31 05:54:42

+0

非常感谢您的帮助。你是对的 - 我应该刚刚写下食物DropMC.parent.removeChild(foodDroppedMC)。 * Smacks头*在这里学到的教训是让事情变得复杂,但绝不会超过它应有的。 – Snowden 2010-11-10 10:26:42