2

现在我正在用 C++ 制作一个乒乓球游戏,现在我已经制作了一个paddleball它都继承自entity它的实体的coordinatesbounding box(可以是圆形或多边形),我还实现了一个entity.isColliding(entity)很容易告诉的函数如果实体对任何两个实体发生碰撞。

现在我想让 Ball 移动,当它与实体碰撞时,它会反转正确的速度坐标(x 或 y)。我想制作一个函数canMove()来移动并检查碰撞以及是否有向后移动,但我不知道如何检查是否需要反转 x 或 y 速度坐标,我所知道的是存在或将会存在碰撞。

有什么建议吗?

4

4 回答 4

0

如果你有一个复杂的形状和一个碰撞,你必须做什么,你必须找出碰撞点的切线。这可以帮助您计算反射角。例如,如果您有矩形,则切线是垂直或水平的,并且反射角很容易计算:您可以否定您已经说过的速度坐标之一。如果你有圈子,它会变得复杂:) 即你需要一些sincos.. 你真的需要吗?

于 2011-08-19T07:58:47.647 回答
0

嗯,如果我正确理解了您的问题...反转正确的一个速度坐标会使您的球恢复它应有的运动方式,而反转另一个速度坐标会使它恢复进入墙壁(但从不同的角度)。

我不知道你的canMove()函数有多快,但如果它足够快,也许你可以这样尝试:
- 反转 x 坐标,如果它有效,那就是那个
- 如果它不起作用,然后反转 y 坐标
- 如果这两个都不起作用,那么你处于特殊情况(例如角落) - 反转两者:D

于 2011-08-19T08:02:31.930 回答
0

如果是 Pong 克隆,则在与桨碰撞时始终反转水平速度,并且在与墙壁碰撞时始终反转垂直速度。
当球和桨碰撞时,要确定是否反转垂直速度,看看球击中了哪一半的桨。
您将需要一种方法来找出碰撞点。

我建议你从一个方形球和矩形桨开始,就像原来的一样,因为它使碰撞计算更容易。

我还建议您在开始使用更逼真的碰撞模型陷入困境之前,先获得一些可以实际运行的东西。
改进可行的东西比改进将来可能会起作用的东西要有趣得多。

于 2011-08-19T14:53:25.103 回答
-1

首先计算球击中桨或任何击球时的速度。然后使用三角函数,球的方向和它的 x 和 y 坐标(耶,三角!)计算出球反弹的角度。根据该角度重新调整球的速度(提示:严重的触发量......这是可能的)。值得注意的是它的所有三角函数,这也适用于速度(而不是速度)。

我猜你想像在其他乒乓球比赛中那样提高或降低球的速度?首先执行上述操作,然后担心根据碰撞角度改变速度。

如果您告诉我您使用什么图形库,可能会有更简单的方法?

同样使用多边形它会更难。最好从一个圆圈或方框开始,然后重构你的代码。在寻找具有不同形状的碰撞检测时,有很多理论和方法。您需要更具体地了解“多边形”的含义。

希望这可以帮助

于 2011-08-19T08:24:36.703 回答