用c ++编写的Pong游戏

时间:2011-08-19 06:18:12

标签: c++ collision-detection pong

现在我正在用c ++制作一个乒乓球游戏,现在我已经制作了一个paddleball,它们都来自entity,其中包含coordinates以及实体的bounding box(可以是圆形或多边形),我也实现了一个函数entity.isColliding(entity),它可以轻松地告知实体是否与任何两个实体发生冲突。

现在我想让球移动,当它与实体碰撞时,它将反转右速度坐标(x或y)。我想要制作一个函数canMove(),它会移动并检查碰撞,如果有移回,但我不知道如何检查我是否需要反转x或y速度坐标我所知道的就是那里曾经或将要发生碰撞。

有什么建议吗?

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

嗯,如果我正确理解你的问题......倒转正确的速度坐标使你的球恢复它的行进方式,而倒转另一个让它恢复进入墙壁(但是从不同的角度)。

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

答案 2 :(得分:0)

如果它是Pong克隆,当你碰撞桨时,总是反转水平速度,当你碰撞墙时,总是反转垂直。
要确定在球和桨碰撞时是否反转垂直速度,请查看球击中的半球。 你需要一种方法来找出碰撞点。

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

我还建议您在开始使用更逼真的碰撞模型让自己陷入困境之前,先得到一些可以正常运行的东西。
改进有效的东西比改善未来可能有效的东西更有趣。

答案 3 :(得分:-1)

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

我猜你试图像其他乒乓球游戏一样增加或减少球的速度?首先做以上事项然后担心根据碰撞角度改变速度。

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

对于多边形,它会变得更难。最好用圆圈或方框开始简单然后重构你的代码。在寻找具有不同形状的碰撞检测时,有很多理论和方法。你需要更具体地了解你的"多边形"装置

希望这有帮助