非基于图块的地图如何运作?

Vic*_*uty 2 dictionary sdl render tile

好的,这就是事情.最近我决定我想了解随机地图生成的工作原理.我发现了一些论文和一些论点.最有趣的是"Diamond Square算法"和"Midpoint Displacement".我仍然需要尝试将这些应用到软件中,但除此之外,我遇到了这个网站:http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

如您所见,我们的想法是使用多边形.但我不知道如何应用基于Tile的地图,甚至不知道如何使用我拥有的工具(c ++和sdl)创建这些多边形.我假设没有办法做到这一点(如果我错了,请纠正我.)但如果我不是,非瓦片地图是如何工作的,这些多边形是如何生成的?

ema*_*tel 5

这个答案不会直接给你你想要的答案,但希望能让你足够接近!

问题

我认为阻止你的是如何表示数据.您可能习惯于只表示每个图块类型的2D网格.如您所知,这可以很好地处理基于图块的地图,但不能正确地允许您对图块具有不同形状的世界进行建模.

图表

我建议你,看到问题有点不同.网格只不过是一个图形(更多信息),其中节点具有4个(如果允许对角线则为8个)隐式邻居节点.首先,如果我是你,我会做什么,将是从严格的标准2D网格转移到更"松散"的图形,其中每个节点都有一个position,a position,一个列表neighbors(在大多数情况下,你会有角落)有2个邻居,3个边框和4个"中间"瓷砖,最后一个rendering component只是在给定的屏幕上绘制你的瓷砖position.完成此操作后,您应该能够在屏幕上获得与"2D Tile-Based"引擎相同的结果,只需调用rendering component每个node人的边框(没有触及它应该添加的内容)到你的节点,但我稍后会回到这里与相机的平截头体相交(在2D世界中,如果位置+/-大小与RECT当前正在绘制的位置相交,则很可能).

搜索

更通用的方法也可以帮助您使用通用算法进行nodes路径寻找等操作,直到找到有效路径(参见A*Dijkstra).即使您决定坚持使用旧的2D Tile Map游戏,这些技术仍然有用!

是的,但我想要多边形

我听到你了!因此,如果你想要多边形,基本上你需要做的就是添加nodes一个顶点列表和你可能需要渲染多边形的适当数据(顶点颜色,纹理和U/V贴图等等... )并更新您rendering component做相应的OpenGL(例如应帮助)调用来绘制你的节点.再次,迭代地将2D平铺引擎升级到多边形地图引擎的第一步是,对于地图中的每个平铺,给出nodes两个三角形中的每一个,纹理资源(平铺)和U/V映射( 0,0 - 0,1 - 1,0和1,1).再一次,当完成此步骤时,您应该有一个"通用"基于多边形的平铺贴图引擎.通过基于图块位置,图块大小等计算坐标,可以在程序上创建大部分此类数据.

凸多边形

如果你决定你可能需要NPC在你的地图上导航或想让你的玩家通过点击地图来导航,我建议你总是使用多边形(三角形是最简单的凸多边形).这允许您的代码假设同一多边形上的两个不同位置可以直线导航.

复杂地图

根据您提供的链接,您希望拥有相当复杂的地图.在这种情况下,作者使用Voronoi Diagrams生成地图的多边形.已经有像这样的三角测量解决方案,但是如果你只是像这样切换到3D,你可能还想使用更容易使用的其他技术.一旦获得有趣的结果,您应该考虑实施serialization从游戏中保存/打开地图数据.如果您想创建一个编辑器,请注意它可能需要做很多工作,但如果您希望人们帮助您创建地图或向地图添加元素(例如不属于地形的几何体),则可能值得.

我带着这个答案去了各地,但希望它有所帮助!