![]() |
Попиксельная проверка пересечения объектов
При использовании ф-ии hitTestObject() проверка делается только на габаритные контейнеры клипов, а не попиксельно. Мне нужно провести попиксельную проверку, при этом графика в клипах как векторная, так и растровая. Подскажите, может решили уже эту проблему или какие сторонние решения-классы есть, чтобы подключить (физические движки исключаются).
|
|
По ссылке приводится hitTestPoint(), т.е. точка - клип, а мне нужна попиксельная проверка клип - клип
|
http://help.adobe.com/ru_RU/FlashPla...#hitTest%28%29
Как Вы хотите можно сделать, нарисовав объекты на BitmapData. Для растра, понятное дело, можно сразу BitmapData использовать. Но, насколько знаю, в аркадах обычно не этот метод используется, а просто геометрический примитив подбирают для объекта и проверяют столкновение математически. Если у вас там только что-то более специфическое, требующее точного определения пересечения объектов... |
expl
Да можно перевести векторный клип в битмапу и далее применить hitTest(), но конечно это условно накладно и для производительности и оперативной памяти, хотя в моем случае редактор уровней, это не критично, но хотелось бы иметь менее ресурсоемкий подход. К слову, для игры я использую сторонний физический движок, определение попиксельного пересечения нужно только для редактора уровней. |
ну в редакторе уровней используйте, Вы же там один объект перемещаете - тормозить не будет
А примеры - за время которое не жалко потратить - я не рожу лучше чем в справке (там он - нормальный пример, вроде) |
expl
Попробовал с отрисовкой вектора в растр и hitTest(), при групповом выделении объектов (рамкой), задержка перед выделением 1-2 секунды (растеризация), если векторные объекты относительно сложные, несколько не удобно, но терпимо, хотя если редактор выпускать для игроков, то это конечно не очень хорошо. >>А примеры - за время которое не жалко потратить - я не рожу лучше чем в справке Скажите, а что за пример? Т.е. в этом примере как-то избегается растеризация (перевод вектора в растр)? |
Можете сначала определять пересечения прямоугольников.
Если их нет, то сразу возвращаем false. Если есть пересечение прямоугольников, то отрисовываем в битмапу только куски, которые попадают в пересечение. Параметр matrix в методе Bitmapdata:draw вам в помощь. Должно неплохо снизить нагрузку. Если уж очень сильно хочется оптимизировать, то можно попробовать разбивать прямоугольник-пересечение на более мелкие сектора фиксированного размера, если он сам довольно велик. И с примитивными секторами проводить ту же проверку. Не уверен, правда, что приложение какого-нибудь скроллректа (первое решение, которое приходит в голову, для того, чтобы стравить два маленьких сектора) не даст еще большую задержку, но попробовать можно. А если еще сильнее заморочиться, то можно попробовать кешировать результаты проверки пересечения и предыдущие координаты объектов. Цитата:
|
ChuwY
Спасибо за варианты-наводки. >>А что насчет того, чтобы взять и пройти по ссылке? Не совсем пойму, вы имеете ввиду этот пример по ссылке: "В следующем примере создается объект BitmapData, являющийся непрозрачным только в прямоугольной области с координатами (20, 20, 40, 40), и вызывается метод hitTest()" |
| Часовой пояс GMT +4, время: 01:15. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.