Lua 使用程序生成的结构生成真实世界

Lua 使用程序生成的结构生成真实世界,lua,noise,procedural-generation,Lua,Noise,Procedural Generation,我想制作一个2d自上而下的僵尸启示录游戏,在Lua中使用程序生成 使用多个噪波贴图,我可以很容易地得到一个二维阵列,用于高度贴图、湿度贴图和温度贴图,我可以用它生成真实的生物群落。 这很容易做到,但是,为了减少延迟,我需要将地图分成块,所以我只生成一次块。我也可以这样做,但我想要的是一个巨大的开放世界,有河流、树木(森林中有更多的树木)、农场和其他特殊建筑、村庄、城市、道路 我目前的想法是,为不同的结构使用其他较小的2d阵列,并随机将它们与另一个结构贴图一起放置,但我不知道如何做到这一点,而且建

我想制作一个2d自上而下的僵尸启示录游戏,在Lua中使用程序生成

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

我目前的想法是,为不同的结构使用其他较小的2d阵列,并随机将它们与另一个结构贴图一起放置,但我不知道如何做到这一点,而且建筑物和道路可能会重叠,这是我不想要的。我不认为我可以生成一个包含2个或更多块的单一结构(因为示意图会覆盖结构所在的地图)

那么我该怎么做,有人能帮忙吗?
谢谢大家!

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

一个“技巧”是创建世界块,当需要创建新块时,生成并保存结构数据。您还可以将其作为“周界”函数来实现,如果播放器位于块a中,则在后台生成并保存周围尚未生成的块

放置结构应该很简单。结构的块id和(特定于块的)xy坐标就是放置它们所需的全部。可以包括结构“区域”的宽度和高度,以帮助进行结构放置碰撞检测。比如说,一个有围栏的农场,你只需要在那里渲染围栏,玩家就可以绕着它走或者其他什么。对于像山中有洞穴入口的地牢这样的东西,你需要一个“入口结构”,当玩家与之交互时,它会将玩家放在地牢中

在试图让开放世界变得超级巨大之前,先弄清楚这些机制。首先使用2x2或3x3区块世界,并在其中单独测试结构。这比最初的景观决策更重要,因为游戏大概会围绕这些结构而不是景观展开

Lua是实现游戏的最佳选择,但您可能最终希望在C/C++中完成程序生成/结构布局等,并将其转化为Lua/消耗的数据。这不是2D自上而下,而是考虑了生成、计时等因素,这可能会有所帮助。在卢阿/爱。斯坦福大学的,还有


玩得开心

你能详细解释一下为什么C/C++更适合这些任务吗?@MikeLyons不一定更好。算法就是算法。但是根据我上面松散的建议,随着世界一代中加入了更多的功能,处理负担会越来越大,而你需要的只是游戏性能。当然可以使用Lua来充实生成算法,特别是如果您更习惯使用该语言,但最终随着生成变得更复杂,您将看到性能开始受到很大影响。@MikeLyons(con't)当性能开始下降时,您需要一些较低级别的东西来接管。它甚至不需要是C/C++——您可以使用任何具有Lua绑定的低级语言。此外,我还应该补充一点,当我在不断老化的大脑中描绘这一点时,我想到的是“实时”程序生成(例如,根据请求重新组合并在内存中分段)。如果区块是磁盘上的静态数据,那么实际上您只需要跟踪该数据的状态变化(例如,在地面瓷砖上挖一个洞)。您可以依靠高度地图矩阵来选择一些“理想”的点,靠近水面的点越大,山区地形的点越小。也包括一些城镇之间的最小距离。