|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jul 2011
Сообщений: 169
|
Как сделать сортировку по координатам.
В общем проблема:я в данный момент делаю игру,и там появилась задача сделать так,чтобы юнит с меньшим y(ниже по экрану) всегда закрывал юнита с более высоким y(выше по экрану),как это сделать?Ведь обычно позднее созданный юнит закрывает ранее созданного,а мне это не нужно!=)
|
|
|||||
Регистрация: Jul 2011
Сообщений: 169
|
окей, но это не очень помогает моей проблеме=)
|
|
|||||
1. сложить ссылки на все объекты в один массив
2. посортировать объекты в этом масссиве по свойству .y 3. поменять глубину каждого объекта согласно новой позиции в массиве
__________________
Хороший отдых - половина работы. |
|
|||||
Регистрация: Nov 2010
Сообщений: 150
|
Как вариант
private function reorder(): void { var iS:Boolean = true; var i: int; var n: int = _childs.length; while(iS) { iS = false; for (i = 1; i < n; i++) { if (_childs[i - 1].y > _childs[i].y) { this.swapChildren(_childs[i], _childs[i - 1]); var tmp: DisplayObject = _childs[i]; _childs[i] = _childs[i - 1]; _childs[i - 1] = tmp; iS = true; } } } } |
|
|||||
4. Разбить карту, на более на более мелкие зоны.
Но эта не лучшая идея, так как персонаж двигается, придется в каждом кадре, это повторять. Лучше двигать, персонажа по массиву (с координатой Y)и менять только глубину персонажа, там надо будет делать проверки, сделать это будет не просто, но можно. вот этой функцией менять глубину. setChildIndex(); С объектами примерно также, проверяешь координаты по Y, проверяешь, в какую ячейку массива он попадет, и ставишь объект на нужную глубину, все остальные объекты выше вставляемого объекта сами поменяют глубину.
__________________
Книги и желание лучшие учителя. |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Я такой способ юзаю.
private function arrange():void { var sortedItems:Array = []; var i:int = numChildren; while (i--) { sortedItems.push(getChildAt(i)); } sortedItems.sortOn("y", Array.NUMERIC); i = sortedItems.length; while(i--){ if (getChildIndex(sortedItems[i]) != i) { setChildIndex(sortedItems[i], i); } } } Для увеличения скорости сортировки, можно менять глубину (в дисплей листе) только заданного объекта |
Часовой пояс GMT +4, время: 15:18. |
|
« Предыдущая тема | Следующая тема » |
|
|