最近、プログラムの深度ソートで問題が発生しました。基本的に、すべてのフレームでソートします。並べ替えは、実際には scaleX と scaleY である「深さ」を監視する必要があります (それらは常に同じなので、scaleX だけを見ているだけです)。 y 値を並べ替えます。一言で言えば、scaleX で並べ替えてから Y で並べ替えます。そのような並べ替え関数をどのように記述できますか?
編集: 2 つの表示オブジェクトが同じ「深さ」(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 を作成して 2 回ソートする必要がありました。最初に Y に応じてソートし、次にスケーリングしました。ここにコードを入力してください