通过程序生成结构生成现实世界

问题描述 投票:0回答:1

我想用 Lua 制作一个带有程序生成功能的 2d 自顶向下僵尸启示录游戏。

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

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

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

谢谢!

lua noise procedural-generation
1个回答
3
投票

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

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

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

在尝试让开放世界变得超级庞大之前努力弄清楚这些机制。首先使用 2x2 或 3x3 块世界并在其中单独测试结构。这比最初的景观决策更重要,因为游戏玩法可能更多地围绕这些结构而不是景观。

Lua 是实现游戏的绝佳选择,但您最终可能希望使用 C/C++ 进行程序生成/结构布局/等。

使用 C/C++ 完成像过程生成这样的繁重工作,并将其转变为 Lua/LOVE 消耗的 C 调用这里有一些代码,不是 2D 自上而下的代码,但考虑了生成、计时等,这可能会有所帮助。 这是 Lua/LOVE 中的城市生成器更多关于斯坦福大学的地图生成,以及Stackoverflow 帖子2D 地图中的 NPC 移动

玩得开心!

© www.soinside.com 2019 - 2024. All rights reserved.