Угол столкновения лопасти прорыва

Я делаю клон Breakout и у меня небольшие проблемы с столкновениями мяча с веслом. У меня есть прямоугольник, представляющий и шар, и весло, и когда они пересекаются, вектор Y, представляющий скорость мяча, сводится на нет (как показано ниже). Это все работает отлично. Проблема в том, что когда весло движется вправо, я хочу, чтобы оно слегка подталкивало мяч вправо (в отличие от обычного отражения), и я хочу, чтобы то же самое происходило в противоположном направлении, когда весло движется к левый. Я не уверен, как это сделать, и я посмотрел все. Любая помощь будет оценена. Благодарю.

if (paddleRectangle.Intersects(ballRectangle))
{
    ballVelocity.Y *= -1;
    collision.Play(); //a collision sound
}

РЕДАКТИРОВАТЬ: В основном я хочу немного изменить угол, под которым мяч отскакивает от весла в зависимости от того, в каком направлении движется весло. Если весло не движется, то мяч будет нормально подпрыгивать (инвертируя Y-компоненту скорости шара)

3 ответа

Добавьте вектор скорости весла к вектору нормалей весла (это в основном изгибает нормаль в направлении движения весла) и нормализуйте результат. Используйте это как нормаль столкновения для отражения.

Vector2 collisionNormal = Vector2.Normalize(paddleNormal + (paddleVelocity * desiredEffectAmount));
ballVelocity = Vector2.Reflect(ballVelocity, collisionNormal);

Я сделал некоторые заточки в моей голове... и вот результаты. для достижения этого вам понадобится: направление движения весла, скорость весла, скорость мяча, направление мяча. а затем с помощью некоторой математической функции угол calucalte и скорость отскока.

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

введите описание изображения здесь

Вы хотите немного трения, но, вероятно, не настоящее трение.

Попробуйте уменьшить скорость вращения лопасти до некоторой степени и прибавить ее к скорости мяча.

Другие вопросы по тегам