Обнаружьте коллизию между движущимся объектом и неподвижным

В первую очередь, мой вопрос не действительно характерен для C# или XNA, но мои примеры кода будут использовать их.

Я в настоящее время пытаюсь заставить Вонь клонироваться, и я столкнулся с проблемой с обнаружением коллизий.

Каждый объект basicly имеет определенную Скорость (который является Vector2), Положение (Vector2, также) и Скорость (просто плавание). На каждом Обновлении () вызов объекта, положение сменилось этот путь:

Velocity.Normalize();
Position += Velocity * Speed;

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

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

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

Спасибо за внимание.

6
задан Steven 7 November 2017 в 14:05
поделиться

5 ответов

Думаю, эта ссылка: http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php может быть тем, что вы ищете. Он описывает тест развертки сфера-плоскость, полезный, когда у вас есть быстро движущиеся объекты, которые могут проходить через плоскость с интервалом в один кадр.

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

2
ответ дан 10 December 2019 в 02:42
поделиться

В качестве отправной точки посмотрите здесь.

http://www.flipcode.com/archives/Theory_Practice-Issue_01_Collision_Detection.shtml

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

3
ответ дан 10 December 2019 в 02:42
поделиться

У вас проблема с тем, что если один объект слишком быстр, он может пройти мимо неподвижного объекта до вызова Update() с обнаружением (как будто он проходит сквозь неподвижный объект).

Расширьте форму объекта вдоль вектора перемещения с размером скорости: Квадрат [0,0][2,2] со скоростью [1,0] и скоростью 10 создаст форму Прямоугольника [0,0][12,2] => теперь он позиционируется по коорд [0,0] с размером [12,2].

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

2
ответ дан 10 December 2019 в 02:42
поделиться

Если два точечных объекта имеют одинаковое положение, то они столкнулись.

-1
ответ дан 10 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: