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

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

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

Регистрация: Dec 2010
Сообщений: 177
По умолчанию Попиксельная проверка пересечения объектов

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


Последний раз редактировалось Alexmody; 08.09.2012 в 22:14.
Старый 09.09.2012, 08:21
spirit2 вне форума Посмотреть профиль Отправить личное сообщение для spirit2 Найти все сообщения от spirit2
  № 2  
Ответить с цитированием
spirit2

Регистрация: Dec 2009
Сообщений: 125
http://help.adobe.com/ru_RU/FlashPla...estPoint%28%29

Старый 09.09.2012, 13:27
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 3  
Ответить с цитированием
Alexmody

Регистрация: Dec 2010
Сообщений: 177
По ссылке приводится hitTestPoint(), т.е. точка - клип, а мне нужна попиксельная проверка клип - клип

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

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
http://help.adobe.com/ru_RU/FlashPla...#hitTest%28%29
Как Вы хотите можно сделать, нарисовав объекты на BitmapData. Для растра, понятное дело, можно сразу BitmapData использовать.

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

Старый 09.09.2012, 14:57
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 5  
Ответить с цитированием
Alexmody

Регистрация: Dec 2010
Сообщений: 177
expl

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

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

Старый 09.09.2012, 15:12
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

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

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

Старый 10.09.2012, 16:56
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 7  
Ответить с цитированием
Alexmody

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

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


Последний раз редактировалось Alexmody; 10.09.2012 в 18:42.
Старый 10.09.2012, 17:15
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 8  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Можете сначала определять пересечения прямоугольников.
Если их нет, то сразу возвращаем false.
Если есть пересечение прямоугольников, то отрисовываем в битмапу только куски, которые попадают в пересечение.
Параметр matrix в методе Bitmapdata:draw вам в помощь.
Должно неплохо снизить нагрузку.

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

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

Цитата:
Скажите, а что за пример? Т.е. в этом примере как-то избегается растеризация (перевод вектора в растр)?
А что насчет того, чтобы взять и пройти по ссылке?
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.


Последний раз редактировалось ChuwY; 10.09.2012 в 17:25.
Старый 10.09.2012, 20:11
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 9  
Ответить с цитированием
Alexmody

Регистрация: Dec 2010
Сообщений: 177
ChuwY
Спасибо за варианты-наводки.
>>А что насчет того, чтобы взять и пройти по ссылке?
Не совсем пойму, вы имеете ввиду этот пример по ссылке:
"В следующем примере создается объект BitmapData, являющийся непрозрачным только в прямоугольной области с координатами (20, 20, 40, 40), и вызывается метод hitTest()"

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

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

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


 


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


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