Форум 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=184045)

Alexmody 08.09.2012 21:33

Попиксельная проверка пересечения объектов
 
При использовании ф-ии hitTestObject() проверка делается только на габаритные контейнеры клипов, а не попиксельно. Мне нужно провести попиксельную проверку, при этом графика в клипах как векторная, так и растровая. Подскажите, может решили уже эту проблему или какие сторонние решения-классы есть, чтобы подключить (физические движки исключаются).

spirit2 09.09.2012 08:21

http://help.adobe.com/ru_RU/FlashPla...estPoint%28%29

Alexmody 09.09.2012 13:27

По ссылке приводится hitTestPoint(), т.е. точка - клип, а мне нужна попиксельная проверка клип - клип

expl 09.09.2012 14:18

http://help.adobe.com/ru_RU/FlashPla...#hitTest%28%29
Как Вы хотите можно сделать, нарисовав объекты на BitmapData. Для растра, понятное дело, можно сразу BitmapData использовать.

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

Alexmody 09.09.2012 14:57

expl

Да можно перевести векторный клип в битмапу и далее применить hitTest(), но конечно это условно накладно и для производительности и оперативной памяти, хотя в моем случае редактор уровней, это не критично, но хотелось бы иметь менее ресурсоемкий подход.

К слову, для игры я использую сторонний физический движок, определение попиксельного пересечения нужно только для редактора уровней.

expl 09.09.2012 15:12

ну в редакторе уровней используйте, Вы же там один объект перемещаете - тормозить не будет

А примеры - за время которое не жалко потратить - я не рожу лучше чем в справке (там он - нормальный пример, вроде)

Alexmody 10.09.2012 16:56

expl
Попробовал с отрисовкой вектора в растр и hitTest(), при групповом выделении объектов (рамкой), задержка перед выделением 1-2 секунды (растеризация), если векторные объекты относительно сложные, несколько не удобно, но терпимо, хотя если редактор выпускать для игроков, то это конечно не очень хорошо.

>>А примеры - за время которое не жалко потратить - я не рожу лучше чем в справке
Скажите, а что за пример? Т.е. в этом примере как-то избегается растеризация (перевод вектора в растр)?

ChuwY 10.09.2012 17:15

Можете сначала определять пересечения прямоугольников.
Если их нет, то сразу возвращаем false.
Если есть пересечение прямоугольников, то отрисовываем в битмапу только куски, которые попадают в пересечение.
Параметр matrix в методе Bitmapdata:draw вам в помощь.
Должно неплохо снизить нагрузку.

Если уж очень сильно хочется оптимизировать, то можно попробовать разбивать прямоугольник-пересечение на более мелкие сектора фиксированного размера, если он сам довольно велик.
И с примитивными секторами проводить ту же проверку.
Не уверен, правда, что приложение какого-нибудь скроллректа (первое решение, которое приходит в голову, для того, чтобы стравить два маленьких сектора) не даст еще большую задержку, но попробовать можно.

А если еще сильнее заморочиться, то можно попробовать кешировать результаты проверки пересечения и предыдущие координаты объектов.

Цитата:

Скажите, а что за пример? Т.е. в этом примере как-то избегается растеризация (перевод вектора в растр)?
А что насчет того, чтобы взять и пройти по ссылке?

Alexmody 10.09.2012 20:11

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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.