Показать сообщение отдельно
Старый 30.01.2010, 17:26
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Использовать BitmapData.

Когда на сцене появляется объект, с которым возможно столкновение, создавать BitmapData с копией этого объекта (методом BitmapData.draw()). Потом, например, BitmapDat`у сделать оттенками серого и размыть фильтром. А когда считать столкновения — брать значение цвета пикселя у картинки и по этому значению определять столкновение.

Я проиллюстрирую идею:
То, как должно происходить столкновение:
Название: 1.jpg
Просмотров: 335

Размер: 39.6 Кб

1. Создаем BitmapData с прозрачным фоном и убираем насыщенность и контраст.
Название: 2.jpg
Просмотров: 337

Размер: 28.2 Кб

2. Применяем блюр с параметрами размытия аналогичными тому, насколько другой объект может "въехать" в этот.

Название: 3.jpg
Просмотров: 341

Размер: 29.4 Кб

3. Когда необходим расчет столкновения, берем значение цвета пикселя у BitmapData c теми же координатами, что и у объекта, который сталкивается.

Название: 4.jpg
Просмотров: 338

Размер: 42.9 Кб

Вот как-то так. В принципе, для всех объектов, которые могут сталкиваться, можно создавать свойство с их BitmapData. И производить расчет "глубины" столкновения только когда hitTest() вернет true, то есть объекты габаритно пересекутся.

За оптимальность и изящность такого метода не ручаюсь, сам такое не пробовал, но, думаю, работать должно.
__________________
hauts.ru


Последний раз редактировалось Hauts; 30.01.2010 в 17:29.