Как я могу переупорядочить детей моего контейнера в AS3 - PullRequest
1 голос
/ 12 июля 2011

У меня есть небольшие проблемы в управлении детьми моего контейнера. Дело в том, что у него много детей, и их координаты y очень случайны.

Могу ли я в любом случае заказать их по y координатам, чтобы нижняя часть была впереди, а верхняя - сзади?

это то, что я могу сделать с 2 "для"?

Спасибо за вашу помощь ^^

Ответы [ 3 ]

2 голосов
/ 12 июля 2011
//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. Вы можете сделать то же самое с компонентами mx, используя getChildAt() и addChild() вместо getElementAt() и addElement()

1 голос
/ 12 июля 2011

Предполагается, что ваш контейнер имеет имя 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);
}
0 голосов
/ 12 июля 2011

Звучит так, как будто вы хотите, чтобы порядок наложения был отсортирован по y.

Вы можете использовать этот метод:

addChildAt(child:DisplayObject, index:int)

Где нулевой индекс представляет нижнюю часть DisplayList, а numChildren - 1 - верхнюю.

Проверьте ссылку на язык AS3 для получения более подробной информации: flash.display.DisplayObjectContainer

...