Я знаю, что в Интернете так много всего в этом мире, и я просмотрел его довольно много, но я просто не могу заставить его работать с моим кодом. Я знаю математику за ней, но снова пытаюсь превратить ее в код. У меня есть 2 переменные скорости для мяча float xSpeed, ySpeed
. Оба равны 3 (или -3 в зависимости от столкновения - у меня просто есть базовый столкновение atm). Я также использую прямоугольник для шарика ballRect
, а также весло paddleRect
. Я обновляя позицию так:Лобовое столкновение с углом
ballRect.X += xSpeed; ballRect.Y += ySpeed;
я нашел биты кода, и пытался делать это сам, но они просто были действительно багги. Можно было бы (я думаю) работать над первым хитом, но когда дело дошло до следующего удара, он будет придерживаться весла.
double relativeBallPos = (paddleRect.X + ballRect.X);
double ballVelx = xSpeed;
double ballVely = ySpeed;
double angleRads = Math.Tan((ballVelx/relativeBallPos));
double angleInDeg = angleRads * (180/Math.PI);
double angleOfReflection = (angleInDeg * 2);
ballVelx = ballVelx * angleOfReflection;
if (ballRect.X + (ballRect.Width/2) < paddleRect.X + (paddleRect.Width/2))
{
xSpeed = (float)-ballVelx;
}
else if (ballRect.X + (ballRect.Width/2) > paddleRect.X + (paddleRect.Width/2))
{
xSpeed = (float)ballVelx;
}
(Это уходит на (возможно, неправильно) угле и просто идет прямо вверх, после первого удара) Спасибо за любую помощь :)
«Вы можете добавить немного больше полируют, изменяя угол мяч, когда он попадает весло, основанное на положении столкновения вдоль него. Вот что я пробовал для себя. (Поместите код в мой пост) –