2010-08-25 67 views
0

我有2个对象。在不同深度的MovieClip中。我想知道对象A的父对象是否与对象B的父对象相同。我想动态地将'.parent'添加到对象A/B,直到它们达到同一级别(具有相同的父对象)。我怎样才能做到这一点?动态金额'.parent'

我的想法是有一些像

objectA = objectA + ".parent" 

,并使其循环,直到它到达目标。但是,这不是添加更多层'.parent'的正确方法。任何人都知道它应该如何编码?

回答

1

您可以使用contains方法

public function contains(child:DisplayObject):Boolean
确定指定显示对象是否为DisplayObjectContainer实例或实例本身的孩子。搜索包括整个显示列表,包括这个DisplayObjectContainer实例,孙子,曾孙,等等。

function haveCommonParent(a:DisplayObject, b:DisplayObject):Boolean 
{ 
    for(var p:DisplayObjectContainer = a.parent; p != null; p = p.parent) 
    { 
     if(p.contains(b)) 
      return true; 
    } 
    return false; 
} 

可能是巨大的显示列表缓慢。

更新:获取共同的家长,如果有的话。如果两个都在舞台上,这将返回一个Stage对象。

function getCommonParent(a:DisplayObject, b:DisplayObject):DisplayObjectContainer 
{ 
    for(var p:DisplayObjectContainer = a.parent; p != null; p = p.parent) 
    { 
     if(p.contains(b)) 
      return p; 
    } 
    return null; 
} 
+1

返回公共父项可能会更好,如果没有则返回'null'。事实上,大多数情况下这将返回“真”,因为场景中的所有对象通常共享该舞台作为共同的祖先。 – Gunslinger47 2010-08-26 05:26:51

+0

@Gunslinger好点。更新。 – Amarghosh 2010-08-26 05:35:59

0
var mc:MovieClip; 
while (mc.parent != null && mc.parent != targetParent) 
{ 
    mc = mc.parent; 
} 
+0

使用'DisplayObjectContainer'而不是'MovieClip'会是一个更好的选择,如果不是的话,循环可能会失败。 – grapefrukt 2010-08-25 09:47:19