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

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

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

Регистрация: Jun 2007
Адрес: Москва
Сообщений: 86
По умолчанию Система определения столкновений. Быстрая.

Вроде бы стандартный вопрос со стандартным решением для геметрических, правильных объектов и это есть во всех физических движках.
Но стоит задача сделать обработку коллизий/столкновений в реальном времени для объектов неправильной геометрической формы: изображения различных предметов, имеющие свой уникальный контур, хранящиеся в png в 32 битном представлении. И таких объектов много. Делать попиксельный хиттест для каждого объекта в каждый момент времени - флеш повесится. Поэтому в ход идут алгоритмы, отсеивающие большинство объектов и я уже немало сделал. Но тяжко это, посему есть ли готовые решения подобного плана?
Поправка: в каждый момент времени может двигаться только один обьект и двигать его будет пользователь мышой. То есть обработка столкновений не всех со всеми, а одного со всеми.

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

Регистрация: Jul 2006
Адрес: Питер
Сообщений: 2,083
Отправить сообщение для MrPoma с помощью Skype™
Box 2D
__________________
жж | твттр | гглплс | фсбк | вкнткт | гтхб

Старый 07.03.2010, 14:11
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 3  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
1. Проверяем объекты сначала по пересечению их прямоугольников (можно DisplayObject::hitTestObgect() - можно тупо if (object.x < objects[i].x && ...
2. Если прямоугольники таки пересекаются, тогда уже проверяем BitmapData::hitTest()

Примечание:
Если объектов более 9000 и пункт первый затратен - используем сетку и реализуем пункт 1 с помощью нее.

P.S. Другое дело - что потом делать с объектами, ну пересеклись и что? Красным подсвечивать - без проблем. А вот пододвигать чтобы не налазили - нужен подход посерьезней, представлении объектов более протыми фигурами, Box2D, и т.д. и .т.п.

Старый 07.03.2010, 14:47
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 4  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Я бы просто AABB проверял. ИМХО можно особо над broad phase не заморачиваться, всё равно самым тормозным участком будет попиксельная проверка.
И вообще постарался бы избавиться от попиксельной проверки, заюзав box2d и заменив pngшки телами соответствующей формы. Если задача позволяет.
__________________
while(1) {}


Последний раз редактировалось Division; 07.03.2010 в 19:35.
Старый 07.03.2010, 14:51
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 5  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
Не решает всей проблемы, но необязательно проверять прямо попиксельно - разрешение масок столкновений вполне можно понизить раза в 4.

Старый 07.03.2010, 18:22
SeaQuest вне форума Посмотреть профиль Отправить личное сообщение для SeaQuest Найти все сообщения от SeaQuest
  № 6  
Ответить с цитированием
SeaQuest
 
Аватар для SeaQuest

Регистрация: Jun 2007
Адрес: Москва
Сообщений: 86
MrPoma, писал же геометрически неправильных объектов. С боксом работал.
expl, у меня еще круче алгоритмы с предварительным кешированием объектов в 2 представлениях с несколькими этапами приближений.
Цитата:
P.S. Другое дело - что потом делать с объектами, ну пересеклись и что? Красным подсвечивать - без проблем.
- да так и нужно по сути. Причем с красным даже почти угадали. Главное первый этап с минимальными затратами ресурсов пройти, а чтобы потом двигать - это уже фигня.

Цитата:
И вообще постарался бы избавиться от попиксельной проверки, заюзав box2d и заменив pngшки телами соответствубщей формы. Если задача позволяет.
- не позволяет. Я больше времени потрачу на алгоритм представления объектов в виде геометрических форм, соблюдения масштабов и увязкой box2d в проект. И это костыль. Задача явно другого плана и требует своего решения.

Цитата:
разрешение масок столкновений вполне можно понизить раза в 4
- осталось разьве что это сделать и сделать хитрую попиксельную нелинейную проверку.

Ну а пока 100 предметов 100*200 полет нормальный! Всем спасибо, понял готовых крутых известных решений пока что нет.

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

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

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


 


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


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