【问题标题】:Generating realistic worlds with structures with procedural generation使用程序生成的结构生成现实世界
【发布时间】:2017-07-23 12:40:10
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您可以依靠您的高度图矩阵来选择一些“理想”的地点,靠近水边较大,山区较小。还涉及城镇之间的最小距离。

标签: lua noise procedural-generation


【解决方案1】:

世界是静态的还是动态的?如果树木可以烧毁,村庄被摧毁但在其他地方重新创建,等等,复杂性就会跳跃。此外,如果村民在场并拥有任何类型的 AI,他们将需要“了解”他们周围的情况,这可能会在程序生成中变得棘手。

一个“技巧”是创建世界区块,然后在需要创建新区块时生成并保存结构数据。您也可以将这种情况作为“周边”功能发生,如果玩家在区块 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 自上而下的,但考虑到生成、时间等可能会有所帮助。 Here's a city generator 在 Lua/LOVE 中。 More on map generation 来自斯坦福大学,Stackoverflow postNPC movement in 2d map.

玩得开心!

【讨论】:

  • 您能否详细说明为什么 C/C++ 更适合这些任务?
  • @MikeLyons 不一定更好。算法就是算法。但是根据我上面的松散建议,随着世界生成中包含更多功能,处理负担会变得更大,而您只需要它来提高游戏性能。当然可以使用 Lua 来充实生成算法,特别是如果您更愿意使用该语言执行此操作,但最终随着生成变得更加复杂,您会看到性能开始受到很大影响。
  • @MikeLyons(续)当性能开始下降时,您将需要一些较低级别的东西来接管。它甚至不需要是 C/C++ - 你可以使用任何具有 Lua 绑定的低级语言。另外,当我在我不断老化的大脑中描绘这一点时,我应该补充一点,我正在考虑“实时”程序生成(例如,根据请求重新组装并在内存中上演的块)。如果块是磁盘上的静态数据,那么实际上您只需要跟踪该数据的状态变化(例如在地砖上挖一个洞)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多