![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 12
|
задался задачей проверки на пересечение или касание двух спрайтов/мувиков/шейпов произвольной формы.
Неужели для проверки надо будет использовать hitTestPoint()? т.к. hitTestObject выдает: package { import flash.display.*; public class Hit extends Sprite { public function Hit() { var shape1:Shape = new Shape(); shape1.graphics.beginFill(0xFF0000); shape1.graphics.drawCircle(100,100,100); shape1.graphics.endFill(); addChild(shape1); var shape2:Shape = new Shape(); shape2.graphics.beginFill(0xFFF000); shape2.graphics.drawRect(180,180,100,100); shape2.graphics.endFill(); addChild(shape2); trace(shape1.hitTestObject(shape2)); } } } Есть ли способ проверять столкновения с наименьшими затратами от процессора? Последний раз редактировалось seraphim; 03.05.2010 в 22:50. |
|
|||||
|
hitTestObject возвращает true в том случае, если пересекаются габаритные прямоугольники объектов.
Нужно получить область пересечения (еще один прямоугольник), внутри которой проверять каждую точку на пересечение с обоими объектами (то есть если точка пересекается и с тем, и с другим - значит оба объекта есть в этой точке - значит они пересекаются) Однако это очень грубо и тут есть что оптимизировать
__________________
...вселенская грусть |
|
|||||
|
короче, когда увидишь что hitTestObject возвращает true, делаешь следующее:
1)находишь bounds обоих объектов относительно чегото одного. Находим координаты центров двух объектов и смотрим где первый относительно другого. Если с верху и с лева (как на рисунке), находим правый край первого и левый второго, также нижний первого и верхний второго. таким образом мы можем определить зону где теоретически могло быть столкновение для каждого объекта. 2)ту зону рисуем в прозрачной битмапдате. находим точки с альфой имеющей не нулевое значение, граничащие с пикселем с нулевой альфой - это граница. каждый такой пункт загоняем в массив. и прибавляем к нему координаты самого объекта. 3)Таким образом мы получили 2 массива с поинтами в цикле просто проверяем на совпадения. Если границы не имеют общих точек - объекты не пересекаются и нааборот. Как видите - ничего невероятного. |
|
|||||
|
strange mood
|
http://noregret.org/tutor/n/collision/#2.2
На здоровье.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
|
|
|||||
|
.
|
тоже штоле кинуть линк ) http://www.coreyoneil.com/portfolio/index.php?project=5
|
|
|||||
|
Регистрация: Apr 2010
Сообщений: 12
|
спасибо огромное за ответы.... будем тестить
)) |
|
|||||
|
А ещё можно попиксельный хиттест битмапдатами ) *на правах разнообразия*
UUps, dimarik дал двиг именно на пиксельную )
__________________
Тут мужик танцует и поёт про флэш Последний раз редактировалось Psycho Tiger; 05.05.2010 в 15:01. |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|