在换班时循环儿童

时间:2013-08-29 20:05:19

标签: arrays actionscript-3 sorting z-index children

我坚持使用我创建的代码。它的作用是循环遍历类中的所有子节点,然后检查它是否将priority属性设置为1.当优先级为1时,它将被添加到childList的末尾。我遇到的问题是,当它找到一个优先级为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); 
        } 

我已经遇到了如何解决这个问题的完整问题。有人有想法吗?

2 个答案:

答案 0 :(得分:1)

请尝试使用while循环。这样,只有在不匹配时,您的循环才会递增。在比赛中它将保持不变。

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

答案 1 :(得分:1)

问题在于,当您将显示列表上给定子项的位置移动到列表末尾时,其下方其他子项的索引将减少。

最好的方法可能是向后迭代循环,因为对子索引的唯一更改将在已经处理的DisplayObject上。

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); 
        } 
}