|
|
|||||
Как отсортировать depth
Cуществует игра, отдаленно похожая на стратегию; Вид - подобие косоугольной проекции.
Чтобы элементы, стоящие сзади не налезали на передние использую двойную сортировку: сначала по _y(стандартную) и методом Шела (с использование оператора swapDepths. Все бы ничего, только тормоза идут. Метод Шела на быструю сортировку не стал заменять, т.к. не уверен, что для 40-50 элементов это будет эффективно. Код вот такой: _root.grafica.sort(function(o1,o2){return o1._y-o2._y}); var j, c, e; var n=_root.grafica.length-1; var g=int((n+1)/2); do{i=g; do{j=i-g; c = true; do{ if(_root.grafica[j].getDepth()<=_root.grafica[j+g].getDepth()){ c = false; }else{ _root.grafica[j].swapDepths(_root.grafica[j+g]); };j--; }while(j>=0&&c); i++; }while(i<=n); g=int(g/2); }while(g>0); Есть ли какой-нибудь стандартный способ сортировать свойство depth? Или другой алгоритм для устранения налезаний движущихся объектов на карте? |
|
|||||
Регистрация: Aug 2005
Адрес: не дом и не улица
Сообщений: 1,204
|
Гы-гы, РТС, да еще на флэше, да еще 50 объектов, да еще чтоб не тормозило... ))) Забудь
__________________
Давайте нанесем по ним ядерный удар! |
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Косоугольная проекция это ты про изометрию?
На сам деле все просто. Надо сразу назначать глубину по координатам: x,y - координата объекта noCollision - разрядность поля. число позволяющие избегать совпадения значений глубин при разных координатах, но с одинаковой суммой 3(x)+4(y)=7=7=4(x)+3(y). С noCollision = 10 будет так 3(x)+4(y)*10=43!=34=4(x)+3(y)*10. Так как максимальная глубина может быть 1048575, то y * noCollision + x * offsetMax + offset с максимальными значениями, не должен это число превышать. offsetMax - максимальное число объектов которые могут находится на одной ячейке игрового поля (например поверх дороги можно поставить телегу) offset - уровень приоритета объекта при одинаковых координатах (это значит, что если у тебя на дорогу (offset=1) наедет телега (offset=2), то телега будет выше дороги. если дорога (offset=2), а телега (offset=1), то телега окажется под дорогой). offset=[0;<offsetMax] И главное, центры координат различных объектов находящихся в одной ячейке должны совпадать. Последний раз редактировалось iNils; 21.04.2006 в 02:54. |
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Цитата:
|
|
|||||
Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
|
Вот неплохой пример Эриклина. Он поможет тебе разобраться с тем, что сказал iNils.
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный. (S.Wizard) |
|
|||||
Регистрация: Aug 2005
Адрес: не дом и не улица
Сообщений: 1,204
|
Цитата:
__________________
Давайте нанесем по ним ядерный удар! |
|
|||||
Спасибо, что подсказали! Попробовал по совету iNils - производительность раза в два-три возросла , тем более что у меня проекция только выглядит как изометрия, и предыдущий код вобще упрощается:
Осталось только проверить, чтобы оъекты grafica поверх других не оказались, но это уже мелочи. p.s. Цитата:
|
|
|||||
Регистрация: Aug 2005
Адрес: не дом и не улица
Сообщений: 1,204
|
Цитата:
__________________
Давайте нанесем по ним ядерный удар! |
Часовой пояс GMT +4, время: 01:35. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|