|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
Цитата:
Каждый раз после сортировки надо выполнять вот этот код: |
|
|||||
Когда я создавал подобные игры, я не использовал сортировку дисплей листа ибо это влияет на производительность, но взамен этого я каждый раз генерировал дисплей лист. Мой метод заключался в следующем.
Создается двумерный массив, в первом массиве хранится индекс массива который определяется по сортируемой величине, второй массив хранит объекты имеющие данную величину. Код примерно следующий 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. |
|
|||||
Регистрация: Jul 2009
Сообщений: 149
|
это писать не обязательно.
|
|
|||||
Цитата:
Готов поспорить, что сортировка предложенная callme, будет работать гораздо быстрее |
|
|||||
Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
|
Цитата:
И в правду, насколько это будет пагубно влиять на производительность? Если допустим объектов будит до 30, не говорю уже больше 100. А можно ли это использовать в изометрии? Там ведь тоже много объектов. Или в изометрии все как то иначе? Последний раз редактировалось zCHESNOKz; 04.12.2015 в 11:49. |
|
|||||
и 30 и 100 объектов - это ничто. У меня в игре сортировалось около тысячи объектов при 30 кадрах в секунду. При этом fps не проседал (хотя сортировка у меня была выборочная, алгоритм ниже), учитывая даже то, что там еще и постоянное взаимодействие с сервером и бокс2д (который, как известно, довольно тупой)
Игрушка браузерная. Для мобил могут быть затупы при таких объемах как у меня. Но если использовать старлинг, то у него есть уже встроенный метод sortChildren(), который работает довольно быстро А сам массив children, как я уже говрил, собирается при переопределении методов addChild() / removeChild() |
|
|||||
Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
|
Только хотел спросить, может лучше писать: вместо ? Вот еще нашел в сети называется - Z-последовательность function sortZ(){ var arrayOfStuff:Vector<DisplayObject> = new Vector<DisplayObject>(); var i:int; for(i=0;i<foreground.numChildren;i++){ arrayOfStuff.push(foreground.getChildAt(i)); } arrayOfStuff.sort(sortArrayByY); for(i=0;i<arrayOfStuff.length;i++){ foreground.setChildIndex(arrayOfStuff[i],i); } } function sortArrayByY(valA:DisplayObject, valB:DisplayObject):int { if(valA.y == valB.y) return 0; if(valA.y > valB.y) return 1; return -1; } |
|
|||||
Цитата:
__________________
Я заклинаю вас действовать иначе. |
Часовой пояс GMT +4, время: 19:18. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|