2017-03-03 56 views
2

我想在Lua中制作一个2D程序生成的僵尸启示录游戏。生成具有程序生成结构的现实世界

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

我目前思想是,为不同结构的其他较小二维阵列,并随机将它们与另一个结构地图,但我不知道如何做到这一点,但也可能建筑物和道路重叠,我不想。我不认为我可以生成2个或更多块(因为原理图会覆盖结构所在的地图)的单个结构,所以我该如何做到这一点,有人可以帮忙吗? 谢谢!

+0

你可以依靠你的高度图矩阵来支持一些'理想'的景点,更大的水面,更小的山地。还涉及一些城镇之间的最小距离。 –

回答

2

世界是静态还是动态?如果树木烧毁,村庄被毁坏,但在别处重新创建,等等。复杂性会跳跃。此外,如果村民在场并拥有任何类型的人工智能,他们需要“知道”周围的事物,这些事情可能会随着程序生成而变得粘稠。

一个“诀窍”是创建世界块,当创建一个新的块时,然后生成并保存结构数据。您也可以将此作为“外围”功能发生,其中如果播放器位于区块A中,则在后台生成并保存尚未生成的任何区块。

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

努力让这些力学计算出来之前试图让开放世界超级巨大。首先使用2x2或3x3块世界并单独测试结构。这比最初的景观决策更重要,因为游戏玩法大概会围绕这些结构而不是景观。

Lua是实现你游戏的好选择,但你最终可能会想在C/C++中做程序生成/结构布局/等。 Use C/C++ to do the heavy lifting like the procedural generation,并将其转化为Lua/LOVE消耗的C-callHere's some code这不是2D自上而下,但考虑到可能有用的生成,计时等。在Lua/LOVE中的Here's a city generator。来自Stanford的More on map generationStackoverflow postNPC movement in 2d map

玩得开心!

+0

你能详细介绍一下_why_ C/C++对于这些任务更好吗? –

+0

@MikeLyons不一定更好。算法是一种算法。但是根据我上面的松散建议,随着更多功能纳入世代,处理负担变得更大,您只需要为游戏性能做好准备。当然,使用Lua来充实代码算法,特别是如果你更习惯于用那种语言来做这件事,但最终当代人变得更加复杂时,你会发现性能开始受到重创。 – ZagNut

+0

@MikeLyons(con't)当表现开始下降时,你需要一些更低层次的东西来接管。它甚至不需要是C/C++ - 您可以使用任何具有Lua绑定的低级语言。另外,当我在我老化的大脑中描绘这个时,我应该补充一点,我正在考虑“实时”程序生成(例如根据请求重组并组装在内存中的块)。如果块是磁盘上的静态数据,那么实际上你只需要跟踪数据的状态变化(例如,在地面块上挖一个洞)。 – ZagNut