用程序生成的结构生成现实世界

时间:2017-03-03 11:56:28

标签: lua noise procedural-generation

我想在Lua进行程序生成的2d自上而下的僵尸启示录游戏。

使用多个噪声贴图,我可以轻松获得高度图,湿度图和温度图的二维数组,我可以使用它生成逼真的生物群系。 这很容易做到,但是,为了减少延迟,我需要将地图划分为块,所以我只生成一次块。我也可以这样做,但我想要的是一个巨大的开放世界,有河流,树木(森林中更多的树木),农场和其他特殊建筑,村庄,城市,道路,......

我目前的想法是,为不同的结构设置其他较小的2d数组,并随机地将它们与另一个结构图放在一起,但我不知道该怎么做,但是那时建筑物和道路也可能重叠,我不想要。而且我认为我不能生成一个在2个或更多块内的单个结构(因为原理图会覆盖地图,结构在哪里)

那么我怎么能这样做,有人可以帮忙吗?  谢谢!

1 个答案:

答案 0 :(得分:2)

世界是静态的还是动态的?如果树木可以燃烧,村庄被毁坏但是在其他地方重建,等复杂性会跳跃。此外,如果村民在场并且有任何类型的人工智能,他们就需要“知道”他们周围的东西,这可能会随着程序的产生而变得棘手。

一个“技巧”是创建世界块,当需要创建新块时,生成并保存结构数据。您还可以将此作为“周边”功能发生,如果玩家在块A中,则在后台生成并保存其周围尚未生成的任何块。

放置结构应该是微不足道的。结构的块ID和(块特定的)xy坐标是放置它们所需的全部。您可以包括结构“区域”宽度和高度,以帮助进行结构放置碰撞检测。比方说,在农场围栏,你可以只在那里渲染围栏,玩家可以在它周围或其他任何地方走动。对于像洞穴入口山中的地牢这样的东西,你需要一个“入口结构”,当玩家与之交互时,将玩家放入地下城。

努力让这些机制找到 BEFORE 试图让开放世界超级巨大。首先使用2x2或3x3块世界,然后单独测试结构。这比最初的景观决策更重要,因为游戏玩法可能围绕这些结构而不是景观。

Lua是实现游戏的绝佳选择,但您最终可能希望在C / C ++中执行程序生成/结构布局/等。 Use C/C++ to do the heavy lifting like the procedural generation,并将其转换为Lua / C-call消耗的LOVEHere's some code不是2D自上而下,但考虑到可能有用的生成,时间等。 {/ 3}}在Lua / LOVE中。来自斯坦福的Here's a city generatorMore on map generationStackoverflow post

玩得开心!