0

我最近在我的程序中遇到了深度排序问题。基本上,我对每一帧进行排序。排序应该注意实际上是 scaleX 和 scaleY 的“深度”(它们总是相同的,所以我只是在看 scaleX),所以那些具有较大 scaleX 的元素应该高于那些具有较低但还要检查的元素y 值,然后排序。一句话:先在 scaleX 上排序,然后在 Y 上排序。有什么建议可以写出这样的排序函数吗?

编辑:我写了这个函数,如果两个显示对象不在同一个“深度”(scaleX)中,那么它们就会相互交换。

public static function sortEverythingInContainer(container:DisplayObjectContainer, fromIndex:int = 1) {
        var i : int = 0;
        var j : int = 0;
        var n : int = container.numChildren;
        var child1:DisplayObject;
        var child2:DisplayObject;
        for (i = fromIndex; i < n; ++i){
            j = i;

            child1 = container.getChildAt(j);
            child2 = container.getChildAt(j - 1);
            while (j > fromIndex-1 && (child1.scaleX < child2.scaleX?false:child1.y < child2.y)) {
                container.swapChildren(child1, child2);
                --j;
                if (j <= fromIndex-1)
                    break;
                child1 = container.getChildAt(j);
                child2 = container.getChildAt(j - 1);  
            }

        }
    }

解决方案:
我必须通过为循环创建 2 来进行两次排序,首先根据 Y 进行排序,然后进行缩放。在此处输入代码

4

1 回答 1

1

如果我理解你的正确,你可以使用这样的东西:

 arr.sortOn("scaleX",  Array.NUMERIC); 
 arr.sortOn("y",  Array.NUMERIC); 

参考:http ://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7fa4.html

于 2013-08-29T12:57:50.693 回答