2

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

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

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

4

3 回答 3

4

将桨的速度向量添加到桨的法线向量(这基本上会在桨移动的方向上弯曲法线)并对结果进行归一化。将此用作反射的碰撞法线。

Vector2 collisionNormal = Vector2.Normalize(paddleNormal + (paddleVelocity * desiredEffectAmount));
ballVelocity = Vector2.Reflect(ballVelocity, collisionNormal);
于 2013-10-02T22:02:15.330 回答
1

我在脑海里做了一些磨砺……这是结果。为了实现你需要的,桨的移动方向,桨的速度,球的速度,球的方向。然后通过一些数学函数计算弹跳的角度和速度。

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

在此处输入图像描述

于 2013-10-03T08:38:46.213 回答
0

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

尝试将桨的速度按一定比例缩小,并将其添加到球的速度上。

于 2013-10-02T19:59:33.907 回答