1

私が作成したこのコードで立ち往生しています。クラス内のすべての子をループしてから、priority プロパティが 1 に設定されているかどうかを確認します。優先度が 1 の場合、childList の最後に追加されます。私が抱えている問題は、優先度 1 のオブジェクトを見つけると、次のオブジェクトをスキップすることです。これは、オブジェクトを最後に移動するためです。つまり、配列全体が 1 つ左に移動するため、次のオブジェクトは既にチェックされていると見なされてスキップされます。

for (var j:int = 0; j < this.numChildren; j++) 
    {
        var tempObject:Object = this.getChildAt(j);
        if (tempObject._priority == 1)
        {
            var indexofnew:Number = this.getChildIndex(tempObject as DisplayObject);
            this.setChildIndex(this.getChildAt(indexofnew),this.numChildren-1); 
        } 

これを解決する方法について、完全な壁にぶつかりました。誰かアイデアがありますか?

4

2 に答える 2

1

問題は、表示リスト上の特定の子の位置をリストの最後に移動すると、その下にある他の子のインデックスが減少することです。

最善の方法は、ループを後方に反復することです。これは、子インデックスへの変更のみが、既に処理された DisplayObjects に適用されるためです。

for (var j:int = numChildren-1; J >= 0; j--) 
{
        var tempObject:Object = this.getChildAt(j);
        if (tempObject._priority == 1)
        {
            var indexofnew:Number = this.getChildIndex(tempObject as DisplayObject);
            this.setChildIndex(this.getChildAt(indexofnew),this.numChildren-1); 
        } 
}
于 2013-08-29T20:15:24.413 に答える