3D Flash中的实例顺序

时间:2013-04-06 13:07:48

标签: actionscript-3 flash 3d

我在Flash As3中制作了9个立方体的立方体。但是由于索引的顺序整个添加到舞台,我无法正确旋转它。 首先我创建了6个正方形的立方体,然后是9个立方体的墙,以及3个墙的最终立方体。 一切都很好,但是当我向左旋转时,立方体的顺序被颠倒,它会破坏整个构图。我知道我可以根据轮换改变指数,但这将是一个工作的loooooooot。 任何想法我怎么能更好地做到这一点?

这是实际型号:  http://test.mrowa.topdivision.pl/kostka/3DTest.html

1 个答案:

答案 0 :(得分:1)

如果您使用Flash的显示列表,则必须根据它们的z对精灵进行排序。

以下是一些代码可以根据z位置对DisplayObjectContainer的子项进行排序,只要某个对象改变其位置就调用它。

public function sortChildren(container:DisplayObjectContainer):void
{
    var objects:Vector.<DisplayObject> = new Vector.<DisplayObject>;

    for (var i:int = 0; i < container.numChildren; i++) 
    {
        objects.push(container.getChildAt(i));
    }

    objects.sort(sortCompare);

    var index:int = 0;
    for (var j:int = 0; j < objects.length; j++) 
    {
            index = container.getChildIndex(objects[j]);
            if (index != j)
                container.setChildIndex(objects[j], j);         
    }
}

private function sortCompare(a:DisplayObject, b:DisplayObject):int
{
    return (a.z - b.z);
}

您可以将objects成员移动为类成员,并在向舞台添加/删除项目时向其添加/删除项目,这样您就不必每次都填充整个数组这个函数被调用。