我正在尝试创建一种控制动画片段深度的方法,其中movieclip显示在另一个上面,这样我就可以将动画片段的深度设置为任意数字,并且它们将以更高的值显示高于较低值。
我在想创建一个MovieClipDepth类,它扩展了 MovieClip ,增加了属性深度,和扩展的Container类 DisplayObjectContainer 所有对象都将放在。
之内当添加子项时,Container类将覆盖addChild方法为更新子显示顺序。
我需要帮助的是如何根据孩子重新排序 他们的深度值?
答案 0 :(得分:2)
正如您可以在下面的评论中看到的那样,有几种方法可供选择。
但实际上,你问“将动画片段的深度设置为任何数字”并不能真正在AS3中完成。如果我是对的,你可以在AS2中这样做,所以......
......怎么回事......
_root.createEmptyMovieClip("mc", -1000);
或
_root.createEmptyMovieClip("mc1", 1);
_root.createEmptyMovieClip("mc2", 10);
工作,但在AS3中不起作用。在AS3深度从0开始,你不能强迫DisplayObject坐在从零开始不连续的水平上。
所以容器中3个动画片段的深度'只能使用这些值:0,1,2。
例如,深度不能是负数。
现在,如果你想建立一个自定义深度管理器,你可以这样做,但你必须考虑这些事实。
所以说,你可以创建虚拟深度。
所以我想,你可以覆盖addChildAt
方法。目前,如果你给出一个错误的数字:负数,或者高于孩子的数量,flash会回复错误:
RangeError: Error #2006: The supplied index is out of bounds.
所以mc.addChildAt(newchild, -1000)
给出了一个恐怖。
但是通过覆盖该方法,您可以制作一个技巧,因此您可以将深度存储在数组中。您可以存储任何数字,然后根据AS3的需要转换该顺序。
就像将深度与添加的子项配对一样,按深度对数组进行排序,然后根据顺序管理子项。
如果您有更多问题,请随时提出,希望这可以让您更接近解决方案。
答案 1 :(得分:0)
我建议你看看这个教程:
网站http://www.flashandmath.com/上的深度管理方法之旅。我认为你不是新手。
链接是这样的: http://www.flashandmath.com/intermediate/depths/index.html