0

最近、プログラムの深度ソートで問題が発生しました。基本的に、すべてのフレームでソートします。並べ替えは、実際には 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 に応じてソートし、次にスケーリングしました。ここにコードを入力してください

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 に答える