【发布时间】:2015-11-25 03:30:15
【问题描述】:
我知道互联网上有很多关于此的内容,并且我已经查看了很多内容,但我无法让它与我的代码一起使用。我有点知道它背后的数学原理,但再次努力将它变成代码。
我有 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;
}
(这会以一个(可能不正确的)角度发生,并且在第一次击球后直接向上) 感谢您的帮助:)
【问题讨论】: