Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Система определения столкновений. Быстрая. (http://www.flasher.ru/forum/showthread.php?t=137198)

SeaQuest 07.03.2010 03:06

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

MrPoma 07.03.2010 05:32

Box 2D

expl 07.03.2010 14:11

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

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

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

Division 07.03.2010 14:47

Я бы просто AABB проверял. ИМХО можно особо над broad phase не заморачиваться, всё равно самым тормозным участком будет попиксельная проверка.
И вообще постарался бы избавиться от попиксельной проверки, заюзав box2d и заменив pngшки телами соответствующей формы. Если задача позволяет.

VVall 07.03.2010 14:51

Не решает всей проблемы, но необязательно проверять прямо попиксельно - разрешение масок столкновений вполне можно понизить раза в 4.

SeaQuest 07.03.2010 18:22

MrPoma, писал же геометрически неправильных объектов. С боксом работал.
expl, у меня еще круче алгоритмы с предварительным кешированием объектов в 2 представлениях с несколькими этапами приближений.
Цитата:

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

Цитата:

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

Цитата:

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

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


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

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