Xna 分接桨碰撞角

Xna 分接桨碰撞角,xna,xna-4.0,breakout,Xna,Xna 4.0,Breakout,我正在做一个突破克隆,在球到桨的碰撞中遇到了一点小麻烦。我有一个矩形代表球和桨,当它们相交时,代表球的速度的Y向量为负数(如下所示)。一切正常。问题是当球拍向右移动时,我希望它将球稍微向右移动一点(与它正常反射相反),我希望在相反方向发生相同的情况,即球拍向左移动。我不知道该怎么做,我已经找遍了。任何帮助都将不胜感激。谢谢 if (paddleRectangle.Intersects(ballRectangle)) { ballVelocity.Y *= -1; collisio

我正在做一个突破克隆,在球到桨的碰撞中遇到了一点小麻烦。我有一个矩形代表球和桨,当它们相交时,代表球的速度的Y向量为负数(如下所示)。一切正常。问题是当球拍向右移动时,我希望它将球稍微向右移动一点(与它正常反射相反),我希望在相反方向发生相同的情况,即球拍向左移动。我不知道该怎么做,我已经找遍了。任何帮助都将不胜感激。谢谢

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

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

您需要一点摩擦力,但可能不是真正的摩擦力


尝试将桨叶速度降低一些因子,并将其添加到球的速度中。

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

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

我在脑子里磨了磨。。。下面是结果。要实现这一点,你需要,球拍的移动方向,球拍的速度,球的速度,球的方向。然后通过一些数学函数计算出弹跳的角度和速度

我认为这张图片(如果反弹在物理上是正确的)会让你知道如何创建它。无法帮助您处理这个问题,但我会像图中那样尝试


我不想改变球速或桨速。我想根据球拍移动的方向稍微改变球从球拍反弹的角度。对不起,如果我不清楚,你想改变球的速度。“角度”是不存在的,它是从单独的X和Y速度的比率衍生出来的一个概念。我生活在现实世界中,你正在存储表示X和Y速度的数据位。是的,它们确实存在于物理现实中,现在你是在试图解决你的问题还是造成问题?@MickLH我是说看看标签− XNA有两次。在XNA游戏中,大部分时间速度由
Vector2
表示,这不是一个坏主意,因为
Vector2
类有大量有用的内置方法。SteveH以这样一种方法为例给出了一个很好的答案。你的答案实际上更像是一个评论,但我不会标记它,我将由你自行决定你是否认为这是一个值得的答案。考虑到这两者,你可以实现它,并且在我的测试中提供最令人满意的游戏性,我将把它留给那些寻求简单解决方案的人,而不是试图以牺牲乐趣为代价,将伪物理正确的现实主义引入完全幻想的2D游戏中如果OP想要保存能量,他仍然可以使用Normalize来保持正常速度的大小,但有趣的是在我的测试中能够为球添加能量。