Показать сообщение отдельно
Старый 03.12.2015, 18:19
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 13  
Ответить с цитированием
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 567
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Когда я создавал подобные игры, я не использовал сортировку дисплей листа ибо это влияет на производительность, но взамен этого я каждый раз генерировал дисплей лист. Мой метод заключался в следующем.

Создается двумерный массив, в первом массиве хранится индекс массива который определяется по сортируемой величине, второй массив хранит объекты имеющие данную величину. Код примерно следующий

Код AS3:
var container:Sprite = new Sprite(); //допустим это какой-то контейнер в котором нужно сортировать всех детей по Y.
 
var sortChildList:Array = new Array(); //наш двумерный массив со списком отображения
 
//перебираем всех детей и записываем их в массив
var i:int = container.numChildren;
while(i--)
{
    var j:Sprite = container.getChildAt(i);
    if (sortChildList[Math.floor(j.y)] == undefined)
    {
        var na:Array = new Array(j);
        sortChildList[Math.floor(j.y)] = na;
    }
    else
    {
        sortChildList[Math.floor(j.y)].push(j);
    }
}
 
container.removeChildren(); //удаляем всех детей из списка отображения
 
//добавляем всех детей заново
for (i = 0; i < sortChildList.length; i++)
{
    if (sortChilList[i] == undefined) continue;
    for (var j:int = 0; j < sortChilList[i].length; j++)
    {
        container.addChild(sortChilList[i][j]);
    }
}
Опытных гуру прошу оценить и прокомментировать мой способ, есть ли у него преимущества перед сортировочным?
__________________
Я заклинаю вас действовать иначе.


Последний раз редактировалось Bletraut; 03.12.2015 в 18:41.