与舞台有关的AS3儿童指数

时间:2014-03-21 02:48:33

标签: actionscript-3

我目前正在将我的CPU映像后处理帧从AS2移动到AS3。我使用数组来处理每帧需要渲染的所有对象。 我按照_root上对象的深度对数组进行排序,然后将它们全部渲染到一个bitmapdata上,以便按正确的顺序绘制它们。

在我的AS3游戏项目中,我使用displayobjectcontainers来处理“深度”。例如,我有多个动画片段作为MovieClip(root)上的容器,然后将子项添加到那些动画片段以对它们进行排序。我在这些容器中也有其他子容器,形成层次结构。

但是现在我发现很难对渲染列表数组进行排序,因为我不能简单地为对象输入绝对的“深度”值。我使用parent.getChildIndex,但这只是给了我其中一个容器中的子索引。

当然你可以创建一个大函数并最终对数组进行排序,但无论如何都要提供对象的根/阶段的绝对索引?

非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情,它将从给定的DisplayObjectContainer开始,并按深度顺序生成所有后代的列表:

function collateChildren(container:DisplayObjectContainer):Vector.<DisplayObject>
{
    var list:Vector.<DisplayObject> = new <DisplayObject>[];
    for(var i:int = 0; i < container.numChildren; i++)
    {
        var child:DisplayObject = container.getChildAt(i);
        if(child is DisplayObjectContainer && (child as DisplayObjectContainer).numChildren > 0)
        {
            // Target contains additional children.
            list = list.concat(collateChildren(child as DisplayObjectContainer));
        }
        else
        {
            // Target is a child.
            list.push(child);
        }
    }

    return list;
}

这不包括包含其他孩子的孩子,可以像:

一样使用
var children:Vector.<DisplayObject> = collateChildren(stage);
trace(children);

答案 1 :(得分:0)

游戏世界将包含一些层,如角色层,地图层,每个层都有它在游戏世界中的深度。当您尝试向世界添加一些displayobjects时,将displayobjects添加到目标图层。

在大多数情况下,图层数量不会很大,例如5或6.因此,您可以按图层深度在每个图层上绘制对象。