2011-04-15 111 views
1

我试图创建一个新的游戏,其中一辆车沿着地面行驶,但也有能力使用推进器暂时空降。我比较擅长编写Java,C,C++等,所以我不认为这应该是一个问题(认为游戏的第一次迭代是在Java中) 。我的问题是我从头开始,并且无法想象地形成障碍的方式,所以车辆不会穿过它。我怎么能让他们受到伤害?地形和碰撞在游戏中

过去人们已经指示我到副本岛的源头,因为它已经包含了它,我看到了整个碰撞系统,但到目前为止我还没有弄清楚它,我希望有人会愿意帮我一把。

谢谢

-Roflha

+0

您的游戏是2D还是3D?我假设你以任何方式使用OpenGL? – Maximus 2011-04-15 04:10:08

+0

@Maximus它将是2D,我将使用OpenGL。 – 2011-04-15 19:44:22

回答

5

什么是您使用来开发游戏?一个引擎或图形库?基本上有三个层次(我喜欢考虑它们):图形库,图形引擎和游戏引擎。

  • 图形库是相当多的 低的水平,你可以得到:OpenGL或DirectX的 。当你想绘制出 您的地形,你会被绘制为 三角形的网格,并定义这些三角形的顶点 等

  • 图形引擎是最重要的是 一层。那些例子(至少C++ )是Ogre3D,Horde3D和 Irrlicht。他们会照顾 许多较低级别的命令,并且 让您专注于更高级别角度的更多 的图形。

  • 游戏引擎几乎将 照顾任何图形相关。 这些(又是C++)的例子是 Unity和UDK。他们一般可以做 很多游戏编程为 你。你可能会在建模程序 (3dsmax等)中绘制你的 地形,将其导出为 的格式,然后引擎会将它sl到 并准确知道如何处理它。

我玩过所有三种,并找到图形库最有趣。但是,他们可能会花最长时间来制作一款游戏。他们还涉及更多的数学(线性代数)。

就地形碰撞检测而言。你必须知道组成这个地形的三角形。如果您正在使用游戏引擎,您应该能够在某种“场景节点”中存储地形的网格和角色的网格,并且它将自动处理碰撞检测。但是,如果你正在处理一切自己,有很多流行的算法来做到这一点:

  • 包围盒:即使你的角色的形状像一个人(或动物等),你把他们当作一个框,并检查该框与组成地形的网格的三角形相交的时间。
  • Bounding Sphere:将角色视为球体,因为如果球体相互碰撞,球体更容易看到。您只需使用“从球体中心到另一个网格的距离”来检查“球体半径”。然后,如果这个球体发生碰撞,你可以将它分解成更精确地代表你的角色的小球体。你可以从那里迭代3次或4次,或者像你想表达你的角色一样准确。请记住,游戏中的所有内容都必须快速快速地进行,所以这就是限制递归的原因。

An excellent article on bounding sphere collision detection

我写了一个样本的OpenGL程序,基本上可以让一个角色,这是由边界框表示,走动的地形,这需要碰撞检测。让我知道你是否对它的工作原理更感兴趣。

您可以处理秋天损害几种方法:

  1. 如果角色不飞,你可以使用一个简单的状态机。一旦它们进入空中,将状态改变为“IN AIR”,并且在游戏外观正在运行时,设置一个计时器并跟踪它们在空中的时间。如果他们在空中停留的时间太长,那么根据他们有多长时间计算不同的伤害量。
  2. 更准确的方法是跟踪角色的速度。这对现实生活是准确的。如果你慢慢坠落,坠落伤害没有意义。如果你快速坠落,你会受到更多的伤害。因此,想出一些将fall_speed与损害联系起来的等式。然后,一旦他们碰到地面,将状态机改回“ON_GROUND”并检查fall_speed(可能是y_velocity)。
+0

我从头开始编写所有的东西,并使用OpenGL作为图形。整个包围球的事情看起来是我正在寻找的东西。我对你的样品非常感兴趣。这听起来像我现在试图用这些车辆实施的。至于秋天的伤害,我打算有一些引力常数(如你所说的那么现实),但我仍然不知道什么时候加速游戏对象(找出他们没有接触地面的时候) – 2011-04-15 22:11:50

+0

那么我可以详细说明我的碰撞检测,如果你想。不过,我使用的是盒子,而不是球体。我的地形是作为一个高度图来实现的。您可以通过使用Google搜索“高度图”了解遍布互联网的全部内容。我检查是否与高度图碰撞的方式是找出我的角色垂直对齐哪个三角形,使用这些三角形的顶点计算每个三角形所在平面的方程,然后插入将字符的x,z坐标转换为平面方程并求解y。这给出了地图中特定点的高度。 – 2011-04-15 22:16:18

+0

现在我的地形是随机生成的(我提到它是2d)。我可以做很多和你所说的一样的事情,除非我只能用x来解决y。我看到的问题是,我的地形也是可变形的......呃,与这个结合起来并不会很有趣。每当我变形地形时,我都需要重新计算这个计划,对吗? – 2011-04-15 22:45:04

2

你可能也想尝试Nvidia PhysX,除了它的名字所暗示的那些(你想要模拟汽车物理学是我想到的),还有很多功能暴露在某些实用程序中,例如碰撞检测,四元数学等。

我将它与Ogre,一个开源图形引擎(到目前为止; - )......在OpenGL-DirectX和Linux-Microsoft之间切换相对简单)这也有很多内幕。

既然你已经知道如何编写代码,我会建议上述作为可行的,而不是替代品,但开放性的来源;所以你只能重新发明你想要的轮子的部分。