1

我正在尝试创建一个新游戏,其中车辆沿地面行驶,但也有能力使用推进器暂时悬空。

我对游戏编程比较陌生,但我很擅长用 Java、C、C++ 等进行编码,所以我认为这不是问题(认为游戏的第一次迭代是用 Java 编写的)。我的问题是我从头开始,想不出一种方法让地形成为障碍,这样车辆就不会直接穿过它。我怎样才能让他们受到坠落伤害?

过去人们把我引向复制岛源,因为它已经在里面了,我看到了整个碰撞系统,但到目前为止我还无法理解它,我希望有人愿意帮我一把。

谢谢

-罗芙拉

4

2 回答 2

5

你用什么来开发游戏?引擎还是图形库?基本上有三个级别(我喜欢这样想):图形库、图形引擎和游戏引擎。

  • 图形库几乎是你能得到的低级:OpenGL 或 DirectX。当您想绘制地形时,您将绘制为三角形网格,并定义这些三角形的顶点等。

  • 图形引擎是其上的一层。这些例子(至少对于 C++)是 Ogre3D、Horde3D 和 Irrlicht。他们将处理许多较低级别的命令,并让您从更高级别的角度关注图形。

  • 游戏引擎几乎可以处理任何与图形相关的事情。这些(同样是 C++)的例子是 Unity 和 UDK。他们通常可以为你做很多游戏编程。您可能会在建模程序(3dsmax 等)中绘制地形,将其导出为某种格式,然后引擎将对其进行处理并确切知道如何处理它。

这三个我都玩过,发现图形库最有趣。但是,他们可能会花费最长的时间来制作游戏。它们还涉及更多的数学(线性代数)。

至于与地形的碰撞检测。您必须了解构成该地形的三角形。如果您使用的是游戏引擎,您应该能够将地形网格和角色网格存储在某种“场景节点”中,它会自动处理碰撞检测。但是,如果您自己处理所有事情,有许多流行的算法可以做到这一点:

  • 边界框:即使您的角色形状像人(或动物等),您仍将它们视为一个框,并检查该框何时与构成地形的网格的三角形相交。
  • Bounding Sphere:将您的角色视为一个球体,因为球体更容易看到它们是否发生碰撞。您只需检查“球体半径”和“从球体中心到另一个网格的距离”。然后,如果该球体发生碰撞,则将其分解为更准确地代表您的角色的较小球体。您从那里递归 3 或 4 次迭代,或者尽可能准确地表示您的角色。但请记住,游戏中的一切都需要快速快速,这就是限制递归的原因。

关于边界球碰撞检测的优秀文章

我编写了一个示例 OpenGL 程序,它基本上让一个由边界框表示的角色在需要碰撞检测的地形周围行走。如果您对它的工作原理更感兴趣,请告诉我。

您可以通过多种方式处理坠落损坏:

  1. 如果角色没有飞行,您可以使用简单的状态机。一旦它们进入空中,将状态更改为“IN AIR”,并且在运行游戏外观时,设置一个计时器并跟踪它们在空中停留的时间。如果它们在空中停留的时间过长,则根据它们在空中停留的时间计算不同的伤害量。
  2. 更准确的方法是跟踪角色的 y 速度。这在现实生活中是准确的。如果你是缓慢坠落,那么坠落伤害是没有意义的。如果你摔得快,你走得越快,你受伤的就越多。所以想出某种方程式,将falling_speed与损坏联系起来。然后,一旦它们落地,将状态机改回“ON_GROUND”并检查fall_speed(可能是y_velocity)。
于 2011-04-15T20:22:03.123 回答
2

您可能还想尝试 Nvidia PhysX,除了它的名字所暗示的(你想对汽车物理建模是我想到的),某些实用程序还提供了许多功能,例如碰撞检测、四元数数学等

我将它与 Ogre 一起使用,这是一个开源图形引擎(到目前为止 ;-)...使得 OpenGL-DirectX 和 Linux-Microsoft 之间的切换相对容易),它也有很多内容。

既然您已经知道如何编写代码,我建议上述内容是可行的,不是替代品,而是开放式源代码;这样你就只需要重新发明你想要的轮子的部分。

于 2011-08-10T20:49:44.323 回答