用于生成2D游戏世界的技术

时间:2010-02-26 09:51:09

标签: c++ 3d 2d irrlicht

我想使用 Irrlicht 引擎在 C ++ 中制作2D游戏。在这个游戏中,你将控制某个洞穴中的一艘小船。这个洞穴将自动创建(游戏将具有随机级别),并且将如下所示:

Cave

假设我已经拥有洞穴内部多边形的点(白色部分)。如何在屏幕上渲染此形状并将其用于碰撞检测?根据我在不同地点阅读的内容,我应该使用三角测量算法,使用洞穴内部的多边形(白色部分)制作洞穴(黑色部分)的网格。然后,我也可以使用这些网格进行碰撞检测。这真的是最好的方法吗?你知道Irrlicht是否有一些内置功能可以帮我实现这个目标吗?

任何建议都会被贬低。

3 个答案:

答案 0 :(得分:3)

描述如何使用给定的3D引擎渲染任意多边形形状是一个漫长的过程。可以说几乎所有的3D渲染都是以三角形的形式完成的,如果你没有使用工具来生成已经由三角形组成的模型,你需要根据你拥有的任何数据生成三角形。三角测量黑色空间或白色空间可能是最好的方法,是的。然后,您可以从中构建网格或顶点列表,并以这种方式渲染这些三角形。然后列表中的三角形也会加倍以进行碰撞检测。

我怀疑Irrlicht是否有任何三角测量,因为它对你的游戏设计非常具体,而不是大多数人会采取的一般方法。 (通常他们会有一个工具,允许并排生成游戏几何体和导航几何体。)看起来,考虑到那里的形状,它可能会非常棘手。

答案 1 :(得分:1)

一种选择是直接使用地图(图像蒙版)来测试碰撞。

例如,

if map_points[sprite.x sprite.y] is black then
   collision detected

假设您的对象是图像而它们不是真正的多边形。

如果你使用真正的多边形,你可以为每个对象形状都有一个“点样本”,
并检查样品是否有碰撞。

答案 2 :(得分:1)

要检查点是在多边形内部还是外部,您可以简单地计算交叉点。你知道(0,0)在你的多边形之外。现在从那里画一条线到你的测试点(X,Y)。如果该线穿过奇数个多边形边(例如1),则它在多边形内。如果线穿过偶数个边(例如0或2),则点(X,Y)在多边形之外。在纸上运行此算法一次以说服自己是有用的。