有没有人对在 actionscript 3 项目中管理显示列表的好方法有建议?我现在正在构建一个应用程序并跟踪所有需要显示的模块并重新排序它们变得笨拙。我已经加载了 swfs 和实例化的类,它们也加载了 swfs、图像和视频。我应该只将所有内容都引用到舞台上吗?我应该如何跟踪显示树?我怎样才能总是将一个特定的模块强制到树的顶部?
3 回答
我使用容器 DisplayObjects 并让每个 DisplayObject 管理其直接子代(父母告诉孩子该做什么)。通常你可以将你的显示列表分解成自然的“层”,这些“层”可以放在自己的容器中。
这样主容器就不必更改深度,因此您知道添加到舞台的最后一个容器将位于顶部。
还要强制一个 DisplayObject 到显示列表的顶部,只需使用 addChild (即使它已经添加)。这会将其添加到列表的顶部。
如果应用程序很大,我会在用户与应用程序交互时添加Child / removeChild。
然而,如果它相当小,简单的可见真/假就可以了。
听起来你是第一种情况。
但是,是的,绝对使用类/对象作为站点地图,用于填充导航、跟踪模块引用、用户所在位置以及可用于深度链接。
至于深度交换,我假设你在谈论视觉深度,实现这些:)
setChildIndex(example,0); // send to back
setChildIndex(example,numChildren - 1); // bring to front
在:
var otherindex = getChildIndex(theotherthing);
那件事的背后:
setChildIndex(example, otherindex) //pushes the other thing forward
在前:
setChildIndex(example, otherindex + 1);
HTH。
如上所述使用容器是最好的方法。容器是你的朋友。
使用 addChild() 将某些内容强制排在列表的顶部是可行的,但是如果您必须在整个代码中执行 50,000 次甚至更多次,则可能会让人筋疲力尽 - 因此,当您得到多个需要保持在顶部的东西时,无论如何什么。
所以我要做的是在我的文档类中创建一个“优先级深度堆栈”数组,无论如何我都会在其中添加我想要的所有内容“在顶部”,并且无论何时我做任何公然的舞台工作,例如切换一个主要显示对象,我只使用一个名为“RunDepthStack”的方法,它循环遍历数组并重新添加数组中的所有内容。
您甚至可以通过调用获得关于它的极其元数据并将对象添加到甚至不一定在舞台上的数组中
object.parent.addChild(object);
这将使您能够使用单个超级方法管理优先显示对象,而不管它们的容器...
现在,如果你有一个极其复杂的 UI,你将不得不变得更细化,但我不怀疑这是你现在的问题。