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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.04.2006, 01:45
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 1  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
По умолчанию Как отсортировать 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?
Или другой алгоритм для устранения налезаний движущихся объектов на карте?

Старый 21.04.2006, 02:21
Takato вне форума Посмотреть профиль Отправить личное сообщение для Takato Посетить домашнюю страницу Takato Найти все сообщения от Takato
  № 2  
Ответить с цитированием
Takato
 
Аватар для Takato

Регистрация: Aug 2005
Адрес: не дом и не улица
Сообщений: 1,204
Гы-гы, РТС, да еще на флэше, да еще 50 объектов, да еще чтоб не тормозило... ))) Забудь
__________________
Давайте нанесем по ним ядерный удар!

Старый 21.04.2006, 02:51
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Косоугольная проекция это ты про изометрию?
На сам деле все просто. Надо сразу назначать глубину по координатам:
Код:
имя_элемента.swapDepths (y * noCollision + x * offsetMax + offset);
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]

И главное, центры координат различных объектов находящихся в одной ячейке должны совпадать.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 21.04.2006 в 02:54.
Старый 21.04.2006, 02:53
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от Takato
Гы-гы, РТС, да еще на флэше, да еще 50 объектов, да еще чтоб не тормозило... ))) Забудь
Вспоминаешь про делаю стратегию - пара вопросов ?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.04.2006, 03:11
sergwizard вне форума Посмотреть профиль Отправить личное сообщение для sergwizard Посетить домашнюю страницу sergwizard Найти все сообщения от sergwizard
  № 5  
Ответить с цитированием
sergwizard
 
Аватар для sergwizard

Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
Вот неплохой пример Эриклина. Он поможет тебе разобраться с тем, что сказал iNils.
Вложения
Тип файла: zip isoKeyDepth5.zip (9.6 Кб, 126 просмотров)
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный.
(S.Wizard)

Старый 21.04.2006, 10:17
Takato вне форума Посмотреть профиль Отправить личное сообщение для Takato Посетить домашнюю страницу Takato Найти все сообщения от Takato
  № 6  
Ответить с цитированием
Takato
 
Аватар для Takato

Регистрация: Aug 2005
Адрес: не дом и не улица
Сообщений: 1,204
Цитата:
Вспоминаешь про делаю стратегию - пара вопросов ?
Гы, ну да. Я бы и сделала её, но в какойто момент поняла, что нафиг эти тормоза и глюки. Объекты ж не только двигаться будут и глубину менять, но еще и взаимодействовать друг с другом, искать короткий путь и т д. А это кучи циклов в каждом кадре. Нафиг. Пошаговые стратегии в этом плане лучше ))
__________________
Давайте нанесем по ним ядерный удар!

Старый 22.04.2006, 00:46
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 7  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Спасибо, что подсказали! Попробовал по совету iNils - производительность раза в два-три возросла , тем более что у меня проекция только выглядит как изометрия, и предыдущий код вобще упрощается:
Код:
        var i=_root.grafica.length; while(i--){
			$=_root.grafica[i];
			$.swapDepths($._y*80+$.prior);
		};
Осталось только проверить, чтобы оъекты grafica поверх других не оказались, но это уже мелочи.
p.s.
Цитата:
Гы-гы, РТС, да еще на флэше, да еще 50 объектов, да еще чтоб не тормозило... ))) Забудь
- типа заказчикам так и скажу

Старый 22.04.2006, 00:50
Takato вне форума Посмотреть профиль Отправить личное сообщение для Takato Посетить домашнюю страницу Takato Найти все сообщения от Takato
  № 8  
Ответить с цитированием
Takato
 
Аватар для Takato

Регистрация: Aug 2005
Адрес: не дом и не улица
Сообщений: 1,204
Цитата:
- типа заказчикам так и скажу
Ну ты же флэшер, а не они, ты и должен сказать, что будет работать, а что тормозить.
__________________
Давайте нанесем по ним ядерный удар!

Старый 25.04.2006, 23:25
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 9  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Не ну раз сказал, что смогу сделать, такие атмазы не прокатят
Хотя после последнего отчета у заказчиков воображение разыгралось , что несколько пугает...

Старый 26.04.2006, 00:01
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Все приходит с опытом, умением пользоваться поиском и смекалкой.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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