我最近在我的程序中遇到了深度排序问题。基本上,我对每一帧进行排序。排序应该注意实际上是 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 进行排序,然后进行缩放。在此处输入代码