我最近在我的程序中遇到了深度排序的问题。基本上,我对每一帧进行排序。排序应该注意“深度”,实际上是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进行排序,然后进行缩放。
在这里输入代码
答案 0 :(得分:1)
如果我理解你,你可以使用这样的东西:
arr.sortOn("scaleX", Array.NUMERIC);
arr.sortOn("y", Array.NUMERIC);