突破桨碰撞角度

时间:2013-10-02 19:54:11

标签: xna xna-4.0 breakout

我正在制作一个Breakout克隆并且在球到桨的碰撞中遇到一些麻烦。我有一个矩形表示球和球拍,当它们相交时,表示球速度的Y矢量被否定(如下所示)。一切正常。问题是当桨叶向右移动时我希望它向右轻微推动球(而不是正常反射)并且我希望在相反方向发生同样的事情是桨移动到左边。我不知道怎么做这个,我看了一遍。任何帮助,将不胜感激。感谢。

if (paddleRectangle.Intersects(ballRectangle))
{
    ballVelocity.Y *= -1;
    collision.Play(); //a collision sound
}

编辑:基本上我想根据球拍移动的方向稍微改变球从球拍上反弹的角度。如果球拍没有移动,那么球将正常弹跳(通过反转球的速度的Y分量)

3 个答案:

答案 0 :(得分:4)

将桨叶的速度矢量添加到桨叶的法向量(这基本上使桨叶移动方向的法线弯曲)并将结果标准化。使用此作为反射的碰撞法线。

Vector2 collisionNormal = Vector2.Normalize(paddleNormal + (paddleVelocity * desiredEffectAmount));
ballVelocity = Vector2.Reflect(ballVelocity, collisionNormal);

答案 1 :(得分:1)

我在脑子里做了一些磨练......这是结果。实现你需要的,移动桨的方向,桨的速度,球的速度,球的方向。然后通过一些数学函数calucalte角度和反弹速度。

我认为这张图片(如果弹跳是phisicaly正确的)会让你知道如何创建它。无法帮助你处理这个问题的功能,但我会像在图像中一样尝试这种方式。

enter image description here

答案 2 :(得分:0)

你想要一点摩擦,但可能不是真正的摩擦。

尝试将桨速降低一些因子并将其加到球速上。