如何在AS3中重新订购容器的子容器

时间:2011-07-12 16:45:09

标签: flash actionscript-3 programming-languages

我管理孩子的容器有点麻烦。事实是它有很多孩子,他们的y坐标非常随机。

无论如何,我可以通过y坐标对它们进行排序,它们位于前面,而较高位置位于后面?

是否可以用2“for”做什么?

感谢您的帮助^^

3 个答案:

答案 0 :(得分:2)

//the number of elements in our component
var count:int = numElements;
var elements:Array = [];

//load all the elements of the component into an Array
for (var i:int=0; i<count; i++) {
    elements[i] = getElementAt(i);
}

//sort the Array elements based on their 'y' property
elements.sortOn("y", Array.NUMERIC);

//re-add the element to the component 
//in the order of the sorted Array we just created.
//When we add the element using 'addElement' it will 
//be added at the top of the component's displaylist
//and will automatically be removed from its original position.
for (i=0; i<count; i++) {
    addElement(elements[i]);
}

这适用于Spark组件。您可以使用getChildAt()addChild()代替getElementAt()addElement()

对mx组件执行完全相同的操作

答案 1 :(得分:1)

这假设您的容器名为container,并且与代码(未经测试)存在于同一范围内:

//prepare an array
var sortArray:Array = [];
//put the children into an array
for(var i:int = 0; i < container.numChildren; i++) {
    sortArray[i] = container.getChildAt(i);
}
//get a sorting function ready
function depthSort(a:MovieClip,b:MovieClip):int
{
    return a.y - b.y;
}
//sort the array by y value low -> high
sortArray.sort(depthSort);
//loop through the array resetting indexes
for(i = 0; i <sortArray.length; i++) {
    container.setChildIndex(sortArray[i],i);
}

答案 2 :(得分:0)

听起来您希望堆叠顺序相对于y进行排序。

您可以使用此方法:

addChildAt(child:DisplayObject, index:int)

其中索引为零表示DisplayList的底部,numChildren - 1表示顶部。

查看AS3语言参考以获取更多详细信息:flash.display.DisplayObjectContainer