1

我坚持使用我创建的这段代码。它的作用是遍历一个类中的所有孩子,然后检查它是否将优先级属性设置为 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); 
        } 

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

4

2 回答 2

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++;
    }
}
于 2013-08-29T20:10:34.983 回答
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 回答