0

我正在尝试创建一种控制影片剪辑深度的方法,该影片剪辑显示在另一个影片剪辑上方,以便我可以将影片剪辑的深度设置为任意数字,并且它们将以高于较低值的较高值显示。

我正在考虑创建一个 MovieClipDepth 类,该类使用添加的属性 depth扩展MovieClip ,以及一个扩展DisplayObjectContainer的 Container 类所有对象都将放置在.

Container 类将覆盖 addChild 方法以在添加子项时更新子项显示顺序

我需要帮助的是如何根据深度值对孩子进行重新排序?

4

2 回答 2

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 的需要转换该顺序。

就像将深度与添加的孩子配对,按深度对数组进行排序,然后按照顺序管理孩子。

如果您有更多问题,请随时提问,希望这能让您更接近解决方案。

于 2011-05-11T08:42:48.670 回答
0

我建议你看看这个教程:

网站http://www.flashandmath.com/上的深度管理方法之旅。我想你不是新手。

链接是这样的: http: //www.flashandmath.com/intermediate/depths/index.html

于 2011-05-11T09:02:43.363 回答