Algorithm 二维平铺贴图生成
我正在开发一个2D平铺引擎,目前我正在研究地图生成算法 我尝试了一些基本的生成高度图的方法,比如Algorithm 二维平铺贴图生成,algorithm,2d,tile,procedural-generation,Algorithm,2d,Tile,Procedural Generation,我正在开发一个2D平铺引擎,目前我正在研究地图生成算法 我尝试了一些基本的生成高度图的方法,比如 山一代 柏林噪声 钻石广场 但我总是遇到同样的问题:这种算法似乎适合处理同样具有高度分量的平铺贴图,但这不是我的情况 我基本上有像草、海、沙漠等精灵,但它们不应该根据生成的高度放在地图中,而是 一切从海洋开始 岛屿放置在地图的中间(这是我尝试失败的算法) 生成沙漠(它们应该像周围的随机点) 山和山的锁链被产卵(它们应该像蛇) 我应该尝试什么样的方法 我通过开发专门的算法来解决子组件问题(如沙
- 山一代
- 柏林噪声
- 钻石广场
- 一切从海洋开始
- 生成沙漠(它们应该像周围的随机点)
- 山和山的锁链被产卵(它们应该像蛇)
___/
___/ ___ Mountain cutoff
___/
______/
____/ ___ Water cutoff
__/
您可以量化数据,这样,如果数据在一组级别之间,它将被视为一种类型的平铺,而当数据在不同的范围内时,它将是一种不同类型的平铺。您将丢弃一些细节,但仍然可以获得与生成的噪波类型相匹配的轮廓
这可能需要大量的调整,并且需要您自己生成其他陆地要素(除了不可通行的山脉),但您必须对任何内容生成解决方案进行大量调整。我使用了一种其他人称为使用“蚂蚁”的方法用于创建随机地形。所用方法的说明: 首先,我使用一个专门的tile类的二维矩形数组(x,y)生成了一个tilemap 然后我创建了一个特殊的“ant”类,可以将其视为一个执行“步骤”的无形实体在tilemap周围。每次蚂蚁移动到一个新的瓷砖上,底层的地形类型都会改变。蚂蚁可以朝8个方向移动,每次移动一个瓷砖时都会改变方向。每一步后的方向都是随机的 我用固定或随机的生命周期产卵固定或随机数量的蚂蚁。生命周期是在移除之前它可以穿过/步进到的瓷砖数量 为了能够控制最常见的地形类型,我创建了一个“地形类型”数组。若要在所有类型的地形之间获得相等的平衡,请仅将每种地形类型中的一种添加到地形类型数组中。如果希望某个地形类型更常见,请使用该特定地形类型向数组中添加更多条目 然后,当蚂蚁需要确定要更改的地形时,可以在地形类型数组中使用随机整数作为数组索引进行查找 需要对参数(蚂蚁数量、蚂蚁寿命、地形类型数组)进行一些调整,但到目前为止,我已经获得了一些非常好的地形 它可以通过使用更复杂类型的蚂蚁类来进一步增强,例如以专门模式遍历的蚂蚁类等。为了在海洋中建造可信的岛屿,您可能需要修改蚂蚁的行为,以便它们在移动方式方面有一些限制(这样您就不会随机获得长的“尖峰”指陆地、非常分散的小岛等) 下面是一个森林的tilemap示例,它是由我使用ant方法制作的一个小应用程序按程序生成的。希望这能让你上路 您可以在以下位置获取应用程序的源代码(VB.NET)
如果你想了解更多关于程序性内容生成算法、技术、体验等的信息,我最近发布了。这似乎是一个很好的资源,涵盖了你在问题中提到的hightmap算法。我的网站没有,我也没有以任何方式参与其中-它看起来很棒,所以我想插上它:)+1;这是一种有趣的方法,有点类似于。看起来你基本上得到了一个随机的分组分布,从表面上看,这似乎是你想要的。我认为这种方法不太可能获得平滑的渐变,尤其是与柏林噪声相比,尽管我觉得对于某些瓷砖类型(例如树木),它可能更具吸引力。至于你的“数字表”,这与我的答案相似。在询问时,我认为这并不存在。现在有