Java 游戏中的地形和碰撞

Java 游戏中的地形和碰撞,java,android,game-physics,terrain,Java,Android,Game Physics,Terrain,我正在尝试创建一个新游戏,在这个游戏中,一辆汽车可以在地面上行驶,但也可以使用推进器暂时在空中飞行 我对游戏编程比较陌生,但是我在爪哇、C、C++等方面相当擅长,所以我不认为这应该是一个问题(认为游戏的第一次迭代是在java中)。我的问题是,我是从零开始的,我想不出一个办法,让地形成为一个障碍物,这样车辆就不会直接穿过它。我怎样才能让他们承受坠落伤害呢 在过去,人们把我引向复制岛的源头,因为它已经在里面了,我看到了整个碰撞系统,但到目前为止,我还不能理解它,我希望有人愿意帮我一把 多谢各位 -R

我正在尝试创建一个新游戏,在这个游戏中,一辆汽车可以在地面上行驶,但也可以使用推进器暂时在空中飞行

<>我对游戏编程比较陌生,但是我在爪哇、C、C++等方面相当擅长,所以我不认为这应该是一个问题(认为游戏的第一次迭代是在java中)。我的问题是,我是从零开始的,我想不出一个办法,让地形成为一个障碍物,这样车辆就不会直接穿过它。我怎样才能让他们承受坠落伤害呢

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

多谢各位


-Roflha

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

  • 图形库与 低级别:OpenGL或 DirectX。当你想抽的时候 您的地形,您将绘制为 三角形网格,并定义 这些三角形的顶点,等等

  • 图形引擎是顶层的一层 当然。那些例子(对于C++) 至少)是Ogre3D、Horde3D和 埃尔利希特。他们会照顾一个孩子 许多较低级别的命令,以及 让您从更多方面关注图形 站在更高的立场

  • 游戏引擎需要花费大量时间 处理任何与图形相关的事情。 这些(同样是C++)的示例如下 团结和民主联盟。他们通常能做到 很多游戏编程都是为了 你。你可能会画你的 地形建模程序 (3dsmax等),将其导出到一些 格式化,然后引擎将发出咕噜声 站起来,确切地知道如何处理它

我已经使用了这三个工具,并且发现图形库最有趣。然而,他们可能需要最长的时间来制作一个游戏。它们还涉及更多的数学(线性代数)

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

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

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

您可以通过以下几种方式处理坠落伤害:

  • 如果角色没有飞行,可以使用简单的状态机。一旦它们进入空中,将状态更改为“空中”,当游戏外观运行时,设置计时器并记录它们在空中的时间。如果它们在空中停留的时间过长,则根据它们在空中停留的时间计算不同的伤害量
  • 更准确的方法是跟踪角色的y轴速度。这是对现实生活的准确描述。如果你正在缓慢地下落,那么造成坠落伤害是没有意义的。如果你跌得很快,你走得越快,受伤的就越多。所以,想出一个方程式,把下落速度和伤害联系起来。然后,一旦它们撞到地面,将状态机更改回“在地面上”,并检查下降速度(可能是y速度)

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

    • 图形库与 低级别:OpenGL或 DirectX。当你想抽的时候 您的地形,您将绘制为 三角形网格,并定义 这些三角形的顶点,等等

    • 图形引擎是顶层的一层 当然。那些例子(对于C++) 至少)是Ogre3D、Horde3D和 埃尔利希特。他们会照顾一个孩子 许多较低级别的命令,以及 让您从更多方面关注图形 站在更高的立场

    • 游戏引擎需要花费大量时间 处理任何与图形相关的事情。 这些(同样是C++)的示例如下 团结和民主联盟。他们通常能做到 很多游戏编程都是为了 你。你可能会画你的 地形建模程序 (3dsmax等),将其导出到一些 格式化,然后引擎将发出咕噜声 站起来,确切地知道如何处理它

    我已经使用了这三个工具,并且发现图形库最有趣。然而,他们可能需要最长的时间来制作一个游戏。它们还涉及更多的数学(线性代数)

    就与地形的碰撞检测而言。你必须知道组成地形的三角形。如果您使用的是游戏引擎,您应该能够将地形的网格和角色的网格存储在某种“场景节点”中,它将处理