2D程序生成

时间:2018-11-24 17:21:30

标签: c# monogame procedural-generation

我目前正在尝试为整个世界实现通过程序生成的图块地图。我要生成噪声并在生成的噪声中使用不同范围来构建图块。但是,它们非常粗糙,因为每个不同的“生物组”都只是一个图块。实施每个生物群落的细节和边缘的最佳方法是什么?例如在森林生物群落中散布的花朵/树木/等,海滩与海洋生物群落之间从海滩到水的过渡瓷砖等。

在某些情况下,我和一个朋友在MonoGame中构建了一个引擎。我们实现了一个块加载系统,用于动态生成和无负载屏幕的无限滚动(我知道这不是最先进的技术,但我为此感到自豪)。每个块是50x50的图块,并且在任何给定时间加载了9个块。当玩家向任意方向移动块时,对角上的块将被卸载,而新的块将沿玩家的行走方向被加载。由于玩家从生成块的相反位置开始,因此到目前为止,这并不是问题,因为地图足够大,可以在玩家到达它们时完成生成。我不确定当前使用的方法是否会对此进行更改。

无论如何,我认为我需要确定每个生物群落内的一组特定图块,并为每个生物群落实例生成噪声,以确定特定于该生物群落的“详细”图块的位置。对于边缘,我将遍历每个相邻的图块以确定它是否是不同的生物群系。如果是这样,请使用过渡图块。但是,整个想法似乎效率很低,因为每当玩家移动块时,都会产生大量噪音并循环遍历7500个图块。我一直在尝试寻找一种更好的方法,但这是我第一次涉足程序生成,而且我在网上找不到更多的东西来谈论比产生噪声和使用该噪声生成块更深入的事情。土地。我应该使用一种更有效的方法还是下一步要进行优化?我无法想象我的方法会非常有效或实用,因为我要遍历每个图块多少。任何人有任何想法或建议吗?预先感谢。

1 个答案:

答案 0 :(得分:1)

一个主意:

  • 使用噪声为每个块生成高度,温度,雨水...
  • 使用生成的值确定每个块的生物群落
  • 为每个图块内插周围块的生成
  • 使用插值选择地面纹理,植物,...

这应该在生物群系之间产生平滑的边界,并且具有相同生物群系的不同块也可能具有不同的感觉。