生成2D游戏世界的技术

3
我想使用Irrlicht引擎在C++中制作一个2D游戏。在这个游戏中,你将控制一个小飞船穿越洞穴。这个洞穴将会自动生成(游戏将有随机关卡),并且看起来像这样:
[图片]
假设我已经有了洞穴内部多边形的点集(白色部分)。如何在屏幕上呈现这个形状并用于碰撞检测?从我在不同网站上阅读到的内容来看,我应该使用三角剖分算法使用洞穴内部多边形(白色部分)制作墙壁的网格。然后,我还可以使用这些网格进行碰撞检测。这真的是最好的方法吗?您是否知道Irrlicht是否有一些内置函数可以帮助我实现这一点?
任何建议都将不胜感激。
3个回答

3
描述如何使用给定的3D引擎渲染任意多边形形状是一个相当冗长的过程。可以说,几乎所有的3D渲染都是以三角形为单位完成的,如果您没有使用工具生成已经由三角形组成的模型,则需要从您拥有的任何数据中生成三角形。黑色空间或白色空间的三角剖分可能是最好的方法。然后,您可以从中构建一个网格或顶点列表,并以此方式渲染这些三角形。列表中的三角形也可用于碰撞检测。
我怀疑Irrlicht是否有三角剖分相关功能,因为它非常特定于您的游戏设计,而不是大多数人采取的一般方法。(通常他们会有一个工具,允许同时生成游戏几何图形和导航几何图形。)鉴于您所拥有的形状,这看起来可能相当棘手。

谢谢你的回答。我找到了一些应该能胜任这项工作的库:GPC(http://www.cs.man.ac.uk/~toby/alan/software/)和Triangle(http://www.cs.cmu.edu/~quake/triangle.html)。如果成功了,我会发帖子的。 :) - liviucmg
1
要是你想知道的话,我已经成功使用GPC和poly2tri(http://code.google.com/p/poly2tri/)生成了一个多边形并将其三角化。这里是一张图片:http://imgur.com/154kd.png。干杯! - liviucmg
很棒,听到你有进展感到开心。 - Kylotan

1
一种选择是直接使用地图(图像掩码)来测试碰撞。
例如,
if map_points[sprite.x sprite.y] is black then
   collision detected

假设您的对象是图像而不是真正的多边形。
如果您使用真正的多边形,可以为每个对象形状创建“点样本”,并检查样本是否发生碰撞。

1

要检查一个点是否在多边形内部或外部,你可以简单地计算交叉次数。你知道(0,0)在多边形外面。现在从那里画一条线到测试点(X,Y)。如果这条线穿过奇数个多边形边缘(例如1),则它在多边形内部。如果这条线穿过偶数个边缘(例如0或2),则点(X,Y)在多边形外部。最好在纸上运行一次此算法以确信。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接