我正在制作一个突破克隆,但在球与 Racket 碰撞方面遇到了一些麻烦。我有一个矩形代表球和桨,当它们相交时,代表球速度的 Y 向量被取负(如下所示)。一切都很好。问题是,当 Racket 向右移动时,我希望它将球稍微向右推(而不是正常地反射),并且我希望在 Racket 移动到的相反方向上发生同样的情况左边。我不知道如何去做这件事,我已经到处看了。任何帮助,将不胜感激。谢谢。
if (paddleRectangle.Intersects(ballRectangle))
{
ballVelocity.Y *= -1;
collision.Play(); //a collision sound
}
编辑:基本上我想根据 Racket 移动的方向稍微改变球从 Racket 弹起的角度。如果 Racket 没有移动,那么球将正常弹跳(通过反转球速度的 Y 分量)
最佳答案
将桨的速度矢量添加到桨的法线矢量(这基本上使法线沿桨移动的方向弯曲)并对结果进行归一化。使用它作为反射的碰撞法线。
Vector2 collisionNormal = Vector2.Normalize(paddleNormal + (paddleVelocity * desiredEffectAmount));
ballVelocity = Vector2.Reflect(ballVelocity, collisionNormal);
关于xna - 突破桨碰撞角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19145678/