Isometric sorting
As3isolib обладает фатальным недостатком, потому написал свою =)
Что в ней хорошо: быстрая, около 70000 (ещё быстрее во 2-й версии) прямоугольников/сек сортирует на моем 5-летнем амд 2.8 ггц.
Что плохо: строго 2д сетка, вся сетка обязана быть покрыта прямоугольниками, сортирует только прямоугольники, вид только "ромб", никаких параллелограммов.
addChild и компания тормозят, можно считать 70к/сек - без них, хотя не совсем (один раз добавить можно). Я собираюсь рендерить в битмапу, так что мне не важно =)
Идея алгоритма - прямоугольник можно рендерить, когда его соседи сверху (т.е. непосредственно прилегающие к верхней левой и верхней правой стороне клетки) отрендерены. Они как-то там считаются, выкидываются отрисованные, добавляются кандидатов в рисование. Думаю код не оч. страшен, если кто-то разбираться будет. Вроде бы довольно линеен алгоритм по числу клеток сетки/числу прямоугольников на рандомных полях.
Собираюсь применять в игрушке типа сим сити, интересно, что может плохого всплыть.
UPD: 2-я версия. В ней предварительно находятся соседи каждого ректа и другое по мелочи, отчего она быстрее раза в 3-4 (предрасчет соседей не считая). Плюс добавилась функция "отсортировать ректы, имеющие общие клетки с прямоугольником". Самый медленный случай поля 50х50 (это каждая клетка - рект) считает за 8 мсек или 300000клеток/сек.
Код сортировки всего поля стал намного читабельнее (71 строка метод). Функция, сортирующая в ректе дёргает его же, но перед тем затирает соседей, не входящих в этот рект, а потом восстанавливает их.
Использование естессно свободное, если вдруг в чём-то большом, то напишите в лс., оч. интересно.
FD проект, картинка для привлечения внимания:
Всего комментариев 6
Комментарии
23.05.2011 02:38 | |
спс, на днях гляну, как раз as3isolib немного не устраивает.
|
23.05.2011 12:15 | |
Неплохо. Хотел найти косячок на картинке - не нашел - все честно отсортировано.
|
03.06.2011 22:20 | |
Апдейт - теперь в 3 какбэ раза быстрее, чуток юзабельнее и значительно понятнее код)
|
28.11.2011 23:27 | |
Цитата:
As3isolib обладает фатальным недостатком
можно 3ю версию увидеть, код пересмотрю, у меня гаксагонная сетка.. попробую переделать, а вообще впечатляет |
29.11.2011 01:55 | |
Цитата:
а каким недостатком?
|
Последние записи от -De-
- Про память, занимаемую Object и Array и что такое Array (28.08.2011)
- Isometric sorting (23.05.2011)
- разбиралка мат. выражений (28.12.2010)
- как передать параметр в слушатель (14.09.2010)