Обнаружение столкновений и отказов из массива точек - PullRequest
1 голос
/ 18 сентября 2011

У меня есть массив точек, которые я буду использовать для создания замкнутого полигонального забора снаружи игровой площадки (2D).Я хочу, чтобы обнаружение столкновений между этим забором и прыгающим шарикоподобным объектом было внутри.

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

Я подумал о том, чтобы нарисовать Sprite / Shape из точек и провести HitTest в каждом кадре, чтобы проверить, отскочить или нет.

Мой вопрос: это лучше /правильный способ достижения этой цели?Представьте себе что-то вроде JezzBall с диагональными линиями под любым углом, симуляцию того, что я пытаюсь сделать.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2011

Матем будет твоим другом здесь. Выполните быстрый поиск коллизии между точками и линиями (вот такая: Алгоритм обнаружения коллизии между отрезками и линиями? ).

То, что вы делаете, это бегите по массиву точек, создавая линии. Таким образом, линия 1 будет точками [0] и точками [1], а линия 2 будет точками [1] и точками [2]. После этого вы проверяете каждую линию против своего мяча (если вы хотите правильное столкновение, которое будет работать независимо от частоты кадров, то вы создаете линию шарика , которая является линией, по которой проходил мяч между последним кадр и этот). Сделайте свое обнаружение столкновения против линии шара и каждой линии, сделанной из ваших пунктов (есть тонны алгоритмов обнаружения столкновения линия-линия в сети). Из алгоритма, подобного этому, вы получите время, когда происходит столкновение на текущем временном шаге, а также нормали линии столкновения, которая даст вам угол отражения.

Если вы не знаете векторную математику, изучите ее, это сделает вашу жизнь намного проще. Опять же, в сети существует множество реализаций класса Vector2.

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

Другим ленивым решением было бы использование физического движка, такого как Box2D http://box2dflash.sourceforge.net/ или Nape: http://code.google.com/p/nape/ - это может быть излишним для того, что вы хотите для своей игры, но эй, это просто.

Для получения бонусных баллов другой техникой, которая может быть проще для вас, является Теорема о разделяющей оси, которая используется во флэш-игре N: http://www.metanetsoftware.com/technique.html

0 голосов
/ 18 сентября 2011

Проверьте углы вашего прыгающего мяча с четырьмя HitTestPoints. Если это удастся, тогда сделайте hitTestPoints из забора с shapeflag, установленным в true.

Могут быть и лучшие решения, так как я не знаю влияния shapeflag на производительность, но в сочетании с оптимизацией углов я думаю, что это будет хорошо, но мне также интересно, есть ли лучший способ.

...