Обнаружение того, где мяч попал в ограничивающую рамку? XNA

только начали работать с XNA, и этот пример очень поможет!

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

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

Короткий глюк кода прямо сейчас:

if (playerOne.BoundingBox.Intersects(terrain.BoundingBox)

   playerOne.Position.Y = terrain.BoundingBox.Top;

Где playerOne — это мяч.

Заранее спасибо!


person Lucas Arrefelt    schedule 14.09.2011    source источник
comment
Просто чтобы вы знали: обмен стеками существует только для игр: gamedev.stackexchange.com   -  person v42    schedule 15.09.2011


Ответы (2)


В XNA BoundingBox нет встроенного способа, помогающего определить, какая сторона столкнулась. Некоторые люди разбили ограничительную рамку на 6 рамок (по одной для каждой грани вашей текущей рамки, например стены вокруг комнаты), но это все еще создает небольшие проблемы вблизи углов, где у вас может быть перекрытие, и вам нужно решить, какую рамку вы думаете. ударить первым.

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

person Steve H    schedule 15.09.2011
comment
Спасибо за подсказку, отличное объяснение :) - person Lucas Arrefelt; 19.09.2011

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

http://ross-warren.co.uk/pong-clone-in-xna-4-0-for-windows/6/ 

Это не так, но вы должны быть в состоянии адаптировать принципы.

person alistair    schedule 15.09.2011
comment
Большое спасибо! действительно помог мне - person Lucas Arrefelt; 19.09.2011