Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.05.2011, 18:45
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 1  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Question Наиболее оптимальная Y сортировка

Решил перейти в своей игре с виду сверху на вид под углом 45 градусов, почти как в изометрии, но тут сразу же уперся в необходимость Y-сортировки. Вся фишка в том, что объектов у меня целая куча, как разных деревьев и домов, так и персонажей, а учитывая то, что игра работает на Box2D, да еще и Union, который тоже проводит огромное количество расчетов, покадровая сортировка массива объектов простым способом sortOn("y", Array.NUMERIC) мне представляется не самой лучшей идеей.
Но есть ли что-то лучше? Или мне прийдется "изобретать велосипед"?

Старый 18.05.2011, 20:53
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Вектор, к слову, сортируется существенно быстрее массива.
__________________
Поймай яблоко 2!

Старый 18.05.2011, 20:57
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 3  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Только что мне даст вектор? Мне нужно сортировать разные типы объектов.
Хотя.. если попробовать добавлять их как DisplayObject.
Но в этом случае прийдется приводить все к типу DisplayObject, так как если верить справке адоби
Цитата:
Переменная, объявленная вместе с экземпляром вектора.Тип данных <T> может хранить экземпляр Vector только в том случае, если он создан с идентичным базовым типом T. Например, вектор, созданный путем вызова методаnew Vector.<String>() нельзя присвоить переменной, которая объявлена вместе с ним.Тип данных <int>. Базовые типы должны быть полностью идентичны. Например, следующий код не компилируется, поскольку базовый тип объекта отличается от базового типа, объявленного для переменной (несмотря на то, что Sprite — подкласс класса DisplayObject):
Код AS3:
 // This code doesn't compile even though Sprite is a DisplayObject subclass
 var v:Vector.<DisplayObject> = new Vector.<Sprite>();
Боюсь это сведет на нет всю экономию в скорости


Последний раз редактировалось goodguy; 18.05.2011 в 21:00.
Старый 18.05.2011, 21:08
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 4  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Можно создать объект с полями id и y (к примеру) и работать с ним при сортировке.
__________________
Поймай яблоко 2!

Старый 18.05.2011, 21:13
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 5  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Это все равно будет отжирать много ресурсов. Нужно же еще индексы всех этих объектов менять в контейнере. А карты там есть огромные.
Думаю нужно написать код, который позволит сортироваться только тем объектам, которые находятся в видимом поле, а остальные хранить в отдельном массиве. Не знаю, на сколько это будет эффективно, надо попробовать

Старый 18.05.2011, 21:39
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 6  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Может я недостаточно вник, но насколько велика нагрузка от следующего алгоритма:

1. создать новый вектор
2. внести в него id и y видимых объектов (как я написал выше)
3. отсортировать вектор по y

Нормальный fps должен проглотить эту схему только так.
__________________
Поймай яблоко 2!

Старый 18.05.2011, 21:42
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 7  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
3. отсортировать вектор по y
Зачем мне это?

У меня там есть джунгли, и отряд солдат, нужно с каждым их шагом просчитывать обстановку так, чтобы джунгли не росли у них из головы, или наборот они не лазили по кронам деревьев. И это при том, что там еще и несколько видов транспортных средств управляемых с помощью бокс2д и юниона, да и сам фон, представляющий из себя довольно большую битмапку

Старый 19.05.2011, 02:12
surlac вне форума Посмотреть профиль Отправить личное сообщение для surlac Найти все сообщения от surlac
  № 8  
Ответить с цитированием
surlac
 
Аватар для surlac

блогер
Регистрация: Nov 2010
Сообщений: 143
Записей в блоге: 1
Цитата:
Сообщение от Zebestov Посмотреть сообщение
Вектор, к слову, сортируется существенно быстрее массива.
Я так понимаю, Вы говорите о сортировке примитивных типов?

Цитата:
Сообщение от goodguy Посмотреть сообщение
Только что мне даст вектор?
Мне нужно сортировать разные типы объектов. Хотя.. если попробовать добавлять их как DisplayObject.
Ничего не даст, т.к. Vector сортирует объекты не быстрее, чем Array.

И еще, раз уж тема об оптимальной сортировке: подскажите, каким алгоритмом Vector сортирует свои элементы? Возможно иной раз эффективнее самому реализовать например quicksort для сортировки, чем пользоваться "зашитым" алгоритмом.

Старый 19.05.2011, 07:03
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 9  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от surlac Посмотреть сообщение
Я так понимаю, Вы говорите о сортировке примитивных типов?
Я сортировал вектор массивов с двумя элементами z:Number и item:SomeClass. Скорость была существенно выше сортировки массива.

Цитата:
Сообщение от surlac Посмотреть сообщение
подскажите, каким алгоритмом Vector сортирует свои элементы? Возможно иной раз эффективнее самому реализовать например quicksort для сортировки, чем пользоваться "зашитым" алгоритмом.
У класса Vector как раз нет алгоритма сортировки. Его нужно описать самостоятельно и передать в sort().
__________________
Поймай яблоко 2!

Старый 19.05.2011, 09:59
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
могу и ошибаться, просто собственные ощущения:
когда ковырял подобную тему, пришел к выводу, что время на саму сортировку не столь важно, потому как затраты на перемещение отсортированных объектов в дисплейлисте все равно все перекрывают
к слову, для сортировки остановился на http://artman.fi/2009/06/as3-sorting...ative-sorting/ , модифицировав его под сортировку по полю объекта

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:08.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:08.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.