Actionscript 通过as3代码了解flash时间线中的图层顺序
有没有什么方法可以让我知道我正在使用的两部电影中哪一部在flash中的时间线“层”排列中位于上方或下方 我想问的是,如果你有两部电影《a》和《b》。flash professional时间线的第10层中有一个,第1层上有“b”。将能够使用纯as3代码更改索引顺序,以直观地保持第10层的movieclip在第1层的movieclip之上 多谢各位。Actionscript 通过as3代码了解flash时间线中的图层顺序,actionscript,flash-cs5,Actionscript,Flash Cs5,有没有什么方法可以让我知道我正在使用的两部电影中哪一部在flash中的时间线“层”排列中位于上方或下方 我想问的是,如果你有两部电影《a》和《b》。flash professional时间线的第10层中有一个,第1层上有“b”。将能够使用纯as3代码更改索引顺序,以直观地保持第10层的movieclip在第1层的movieclip之上 多谢各位。 毗瑟奴要验证哪个DisplayObject位于顶部,您必须将其索引与方法进行比较: var mc1:MovieClip; var-mc2:MovieC
毗瑟奴要验证哪个DisplayObject位于顶部,您必须将其索引与方法进行比较:
var mc1:MovieClip;
var-mc2:MovieClip;
//此代码假定mc1和mc2具有相同的父级
var parentMC:MovieClip=MovieClip(mc1.parent);
var topmost:MovieClip=parentMC.getChildIndex(mc1)
指数最低的人是指数最高的人
编辑:
只要MovieClips具有相同的父对象,就可以使用、和操纵对象的索引。因此,要将MovieClip放在最前面,您需要执行
MovieClip(parent.setChildIndex)(这个,0)代码>我认为ActionScript的上下文中没有层,但您可以使用以下方法确定哪些实例的DisplayObject
更高:
DisplayObjectContainer
[[Edit]]
如果两个目标对象都是共享父对象中的叶节点,则附加的方法将不起作用
时间线子项始终位于与时间线类关联的actionscript生成的子项下
e、 g
如果您有扩展类A的时间线X,并且在类A中添加子元素E、F、G,但时间线X包含层B、C、D,每层中都有一个符号,层B位于时间线的底部,则会观察到以下情况:
child 5: G
child 4: F
child 3: E
child 2: D
child 1: C
child 0: B
为了扩展felipemaia的答案,我设计了以下方法来确定哪个电影剪辑绝对高于另一个。这还没有经过彻底的测试,但应该作为开发的基准
function selectAbove(obj1:DisplayObject, obj2:DisplayObject):DisplayObject
{
var obj1_parentCount:int = parentCount(obj1);
var obj2_parentCount:int = parentCount(obj2);
var target:DisplayObject;
var other:DisplayObject;
if (obj1_parentCount > obj2_parentCount)
{
target = obj1;
other = obj2;
}
else
{
target = obj2;
other = obj1;
}
var container:DisplayObjectContainer =
(target is DisplayObjectContainer) ? target as DisplayObjectContainer : target.parent ;
var container_last:DisplayObjectContainer;
var sharedParent:DisplayObjectContainer;
while(container)
{
if(container.contains(other))
{
sharedParent = container;
break;
}
container_last = container;
container = container.parent;
}
if(!sharedParent)
{
throw new Error("An object does not maintain its parent in the display heirarchy!");
}
var ret:DisplayObject;
if(container == other)
{
ret = target;
}
return container != other ?
container.getChildIndex(container_last) < container.getChildIndex(other) ?
other :
target
:
target
;
}
function parentCount(obj:DisplayObject):int
{
var ret:int = 0;
while(obj)
{
ret++;
obj = obj.parent;
}
return ret;
}
功能选择上方(obj1:DisplayObject,obj2:DisplayObject):DisplayObject
{
变量obj1_parentCount:int=parentCount(obj1);
var obj2_parentCount:int=parentCount(obj2);
var目标:DisplayObject;
var-other:显示对象;
如果(obj1\U parentCount>obj2\U parentCount)
{
目标=obj1;
其他=obj2;
}
其他的
{
目标=obj2;
其他=obj1;
}
var容器:DisplayObjectContainer=
(目标为DisplayObjectContainer)?作为DisplayObjectContainer的目标:target.parent;
var container_last:DisplayObjectContainer;
var sharedParent:DisplayObjectContainer;
while(容器)
{
if(容器包含(其他))
{
sharedParent=容器;
打破
}
容器_last=容器;
container=container.parent;
}
如果(!sharedParent)
{
抛出新错误(“某个对象在显示继承人权限中不维护其父对象!”);
}
var-ret:DisplayObject;
如果(容器==其他)
{
ret=目标;
}
返回容器!=其他?
container.getChildIndex(container\u last)
此方法适用于嵌套的显示层次结构。我还没有100%测试过这个,但初始案例按预期完成
祝你好运 是的,我知道这个。但我想问的是,如果你有两部电影的嘴唇“a”和“b”。flash professional时间线的第10层中有一个,第1层上有“b”。将能够使用纯as3代码更改索引顺序,从而在视觉上保持第10层的movieclip在第1层的movieclip之上???@VishnuAjit一个糟糕且不完整的问题无法打开我当时的有效答案进行否决投票。如果你问的是如何切换movieclip的顺序,是的,这是可能的,不考虑层(只要他们都在同一个家长),查看我的编辑。这不是我想要的,好吧,我现在有了这个想法。谷歌告诉我;)伙计!这很有帮助!:)我的意思是,不仅仅是代码,还有概念。非常感谢!我计划将此附加到我的实用程序库中!
function selectAbove(obj1:DisplayObject, obj2:DisplayObject):DisplayObject
{
var obj1_parentCount:int = parentCount(obj1);
var obj2_parentCount:int = parentCount(obj2);
var target:DisplayObject;
var other:DisplayObject;
if (obj1_parentCount > obj2_parentCount)
{
target = obj1;
other = obj2;
}
else
{
target = obj2;
other = obj1;
}
var container:DisplayObjectContainer =
(target is DisplayObjectContainer) ? target as DisplayObjectContainer : target.parent ;
var container_last:DisplayObjectContainer;
var sharedParent:DisplayObjectContainer;
while(container)
{
if(container.contains(other))
{
sharedParent = container;
break;
}
container_last = container;
container = container.parent;
}
if(!sharedParent)
{
throw new Error("An object does not maintain its parent in the display heirarchy!");
}
var ret:DisplayObject;
if(container == other)
{
ret = target;
}
return container != other ?
container.getChildIndex(container_last) < container.getChildIndex(other) ?
other :
target
:
target
;
}
function parentCount(obj:DisplayObject):int
{
var ret:int = 0;
while(obj)
{
ret++;
obj = obj.parent;
}
return ret;
}