|
|
|||||
Регистрация: Dec 2011
Сообщений: 70
|
Проверка "видимости" объекта
Здравствуйте.
У меня есть сцена, на которой содержится много препятствий неправильной формы. Препятствия считаются непрозрачными. По сцене летает корабль, а в определенном месте сцены стоит пушка. Хочу сделать так, чтобы пушка стреляла только тогда, когда корабль и пушка находятся на прямой видимости (то есть прямой отрезок, соединяющий корабль и пушку, не пересечется ни с одним из препятствий). Можно ли такое сделать и если можно, то как? Пока что придумал только такое решение: конвертировать препятствия в BitmapData, нарисовать линию (с прозрачностью 1%) между кораблем и пушкой и её тоже конвертировать в BitmapData, а потом использовать bitmapData.hitTest c порогом 1. Надеюсь, что есть более быстрый и менее извращенный вариант. |
|
|||||
Можно по двум точкам найти уравнение прямой, соединяющей пушку и игрока.
и проверить простым хиттестом столкновение этой прямой с баундинг боксом препятствий Насчет проверки столкновения линии (по уравнению) и баундинг бокса объекта еще надо подумать |
|
|||||
Уравнение прямой проходящей через 2 точки
A(x2 -x2) + B(y2- y1) = 0 У вас есть: 1. уравнение прямой 2. Координаты точек вершин многоугольника из них не сложно получить уравнение строн прмоугольника. Для того что бы найти пересекаются ли прямые нужно приравнять 2 уравнения прямой A1(x2 -x2) + B1(y2- y1) = A2(xi -xj) + B2(yi- yj) 3. Находите точки пересечения каждой из сторон прямоугольника и проверяете что бы эта точка попадала в на отрезок прямой входящий в сторну многоугольника (т.е между вершинами, а не где-то в бесконечности) 4. Проделываете это для каждой стороны и как-только встречаете пересечение выходите из цикла Если у вас случай где прямая горизонтальна, то все просто: смотрите что бы у координата была между верхней и нижней точкой многоугольника.
__________________
... |
|
|||||
Регистрация: Dec 2011
Сообщений: 70
|
Цитата:
В любом случае, такой вариант скорее всего не подойдет. Потому что будет очень много случаев, когда отрезок пересечет контейнер, но не пересечет само препятствие. Как я понимаю, я предложил очень похожее решение, которое более точное и менее производительное за счет использования BitmapData. |
|
|||||
Да, этот случай подходит, если препятствия представляют собой прямоугольники. Собственно, я и думал, что препятствия это прямоугольники, так как вы не указали ничего более конкретного)
В гугле кстати очень много результатов на запрос Цитата:
http://stackoverflow.com/questions/7...hittest-object |
|
|||||
Регистрация: Dec 2011
Сообщений: 70
|
Цитата:
Добавлено через 12 минут Цитата:
|
|
|||||
Вот это посмотрите, там есть алгоритмы и реализация на Haxe. Haxe, насколько я знаю, можно компилировать в AS3 и посмотреть
|
|
|||||
Регистрация: Dec 2011
Сообщений: 70
|
Цитата:
|
|
|||||
Цитата:
Самое простое это к графике со сложной формой добавить невидимые точки апроксиммировав линию в прямоугольник (вручную раставить на сцене спрайтики кружочки или алгоритмом)
__________________
... |
|
|||||
Регистрация: Dec 2011
Сообщений: 70
|
Цитата:
В любом случае, готовых решений "из коробки" нет, как я понимаю, поэтому придется пробовать разные варианты и искать определенный компромисс между сложностью решения и его точностью. |
Часовой пояс GMT +4, время: 15:45. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|