我有2个对象。在不同深度的MovieClip中。我想知道对象A的父对象是否与对象B的父对象相同。我想动态地将'.parent'添加到对象A/B,直到它们达到同一级别(具有相同的父对象)。我怎样才能做到这一点?动态金额'.parent'
我的想法是有一些像
objectA = objectA + ".parent"
,并使其循环,直到它到达目标。但是,这不是添加更多层'.parent'的正确方法。任何人都知道它应该如何编码?
我有2个对象。在不同深度的MovieClip中。我想知道对象A的父对象是否与对象B的父对象相同。我想动态地将'.parent'添加到对象A/B,直到它们达到同一级别(具有相同的父对象)。我怎样才能做到这一点?动态金额'.parent'
我的想法是有一些像
objectA = objectA + ".parent"
,并使其循环,直到它到达目标。但是,这不是添加更多层'.parent'的正确方法。任何人都知道它应该如何编码?
您可以使用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;
}
var mc:MovieClip;
while (mc.parent != null && mc.parent != targetParent)
{
mc = mc.parent;
}
使用'DisplayObjectContainer'而不是'MovieClip'会是一个更好的选择,如果不是的话,循环可能会失败。 – grapefrukt 2010-08-25 09:47:19
返回公共父项可能会更好,如果没有则返回'null'。事实上,大多数情况下这将返回“真”,因为场景中的所有对象通常共享该舞台作为共同的祖先。 – Gunslinger47 2010-08-26 05:26:51
@Gunslinger好点。更新。 – Amarghosh 2010-08-26 05:35:59