我正在制作一个Breakout克隆并且在球到桨的碰撞中遇到一些麻烦。我有一个矩形表示球和球拍,当它们相交时,表示球速度的Y矢量被否定(如下所示)。一切正常。问题是当桨叶向右移动时我希望它向右轻微推动球(而不是正常反射)并且我希望在相反方向发生同样的事情是桨移动到左边。我不知道怎么做这个,我看了一遍。任何帮助,将不胜感激。感谢。
if (paddleRectangle.Intersects(ballRectangle))
{
ballVelocity.Y *= -1;
collision.Play(); //a collision sound
}
编辑:基本上我想根据球拍移动的方向稍微改变球从球拍上反弹的角度。如果球拍没有移动,那么球将正常弹跳(通过反转球的速度的Y分量)
答案 0 :(得分:4)
将桨叶的速度矢量添加到桨叶的法向量(这基本上使桨叶移动方向的法线弯曲)并将结果标准化。使用此作为反射的碰撞法线。
Vector2 collisionNormal = Vector2.Normalize(paddleNormal + (paddleVelocity * desiredEffectAmount));
ballVelocity = Vector2.Reflect(ballVelocity, collisionNormal);
答案 1 :(得分:1)
我认为这张图片(如果弹跳是phisicaly正确的)会让你知道如何创建它。无法帮助你处理这个问题的功能,但我会像在图像中一样尝试这种方式。
答案 2 :(得分:0)
你想要一点摩擦,但可能不是真正的摩擦。
尝试将桨速降低一些因子并将其加到球速上。