【问题标题】:AS3 Custom Depth ControlAS3 自定义深度控制
【发布时间】:2011-08-23 00:11:06
【问题描述】:

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

我正在考虑创建一个 MovieClipDepth 类,该类扩展 MovieClip 并添加属性深度,和一个扩展 的 Container 类 DisplayObjectContainer,其中所有对象都将放置在内。

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

我需要帮助的是如何根据 它们的深度值?

【问题讨论】:

  • addChild() 方法将子级从一个父级移动到另一个父级(如果它已经在显示列表中)。还有 swapChildren()、swapChildrenAt() 和 setChildIndex() 方法可以帮助您管理这个。

标签: actionscript-3 depth


【解决方案1】:

正如您在问题下方的评论中看到的那样,有几种方法可以解决此问题。

但实际上,您所要求的“将影片剪辑的深度设置为任意数字”在 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 的需要转换该顺序。

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

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

【讨论】:

    【解决方案2】:

    我建议你看看这个教程:

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 2017-02-19
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多