因此,我对玩家 Racket 和敌人 Racket 进行了两次单独的碰撞检测,并且在玩家 Racket 中,我已经注释掉了根据球击中的位置反弹球所需的数学计算。没有注释的代码只是让球在屏幕上弹跳,就像您在每次弹跳时反转速度(它的速度是一个浮点值)时所期望的那样。那么对于初学者来说,注释掉的公式实际上是正确的公式吗?如果是这样,当它与桨碰撞时是否需要同时应用于 xSpeed 和 ySpeed?
当我看到这个公式时,它以 BallAngle 或 PaddleAngle 作为参数(老实说我不记得了)。现在,如果这是正确的公式,我如何首先获得该角度?我只是在那里使用整数(用于测试),因为我不知道如何获得角度。
if (ball.getPosition().x < (player.getPosition().x) //PLAYER COLLISION DETECTION
&& (ball.getPosition().y + (ball.getRadius() * 2)) >= player.getPosition().y
&& ball.getPosition().y <= (player.getPosition().y + player.getSize().y))
{
xSpeed = -xSpeed;
//xSpeed = xSpeed*cos(91);
//ySpeed = ySpeed*sin(90);
ball.move(xSpeed, ySpeed);
}
if (ball.getPosition().x > enemy.getPosition().x - 30 //ENEMY COLLISION DETECTION
&& (ball.getPosition().y + (ball.getRadius() * 2)) >= enemy.getPosition().y
&& ball.getPosition().y <= (enemy.getPosition().y + enemy.getSize().y))
{
xSpeed = -xSpeed;
ball.move(xSpeed, ySpeed);
}
最佳答案
cos(91)
刚好低于-1,估计是为了反转X方向,受冲击减慢速度。 sin(90)
几乎是一个,所以大概是为了让它慢一点。
当然,这些函数实际上计算起来非常昂贵,因此您也可以对这些值进行硬编码。
const float xBounce = -0.99436746092
const float yBounce = 0.8939966636
...
xSpeed *= xBounce;
ySpeed *= yBounce;
ball.move(xSpeed, ySpeed);
关于c++ - 如何根据球击中 Racket 的位置使球以特定角度从 Racket 上反弹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26960039/