我正在制作一款将使用地形生成的游戏,因此我使用的是 FastNoise Lite 库的 C# 版本。然而,它似乎并没有像我想要的那样工作。
我有以下生成 TileMap 的代码:
public void Generate(int mapSeed, Vector2 mapSize)
{
noise = new FastNoiseLite(mapSeed);
noise.SetNoiseType(FastNoiseLite.NoiseType.Perlin);
noise.SetFrequency(0.01f);
noise.SetFractalLacunarity(2f);
noise.SetFractalGain(0.5f);
arrMap = new Tile[(int)mapSize.Y, (int)mapSize.X];
for (int y = 0; y < mapSize.Y; y++)
for (int x = 0; x < mapSize.X; x++)
{
if (noise.GetNoise(x, y) <= 0.04)
arrMap[y, x] = new Water(new Vector2(x, y), gridSize, textures[0]);
else if (noise.GetNoise(x, y) <= 0.08)
arrMap[y, x] = new Sand(new Vector2(x, y), gridSize, textures[1]);
else
arrMap[y, x] = new Grass(new Vector2(x, y), gridSize, textures[2]);
}
}
所有这一切都是用一些不同的瓷砖(如水或草)创建一个二维阵列。
然后当我创建它并绘制它时,我得到以下结果:
但是,我想要类似的东西:
问题是:当我改变lacunarity或gain时,没有任何反应。频率只会改变草的“块”数量。我想这是库的问题和/或我不知道如何正确使用它的事实,因为我以前在 python 中做过这个但从来没有遇到过这个错误。
我该如何解决这个问题?
我需要做的就是添加一个分形类型:
noise = new FastNoiseLite(mapSeed);
noise.SetNoiseType(FastNoiseLite.NoiseType.Perlin);
noise.SetFrequency(0.01f);
noise.SetFractalLacunarity(2f);
noise.SetFractalGain(0.5f);
// this setting
noise.SetFractalType(FastNoiseLite.FractalType.FBm);
FBm 似乎是最适合我想要的地形生成的
这篇文章是搜索“godot FastNoise Lite”时出现的为数不多的文章之一,所以留在这里留待以后使用。 我发现很难从我的应用程序中评估所有 FastNoise lite 参数。
Godot的FNL其实用的就是这个项目:https://github.com/Auburn/FastNoiseLite。 该项目带有一个名为
PreviewApp
的出色演示应用程序,可让您实时尝试所有可能的参数。
这正是我选择 FNL 论点所需要的。
不幸的是
PreviewApp
有 C# V3.1 依赖项,目前很难在 Linux 上安装。 (可能在 Mac 上也一样?)
我以前没有 C# 经验。
我必须执行以下操作:
aspnetcore-runtime-3.1.32-linux-x64.tar.gz
和dotnet-sdk-3.1.426-linux-x64.tar.gz
安装在同一工作目录中。我用了~/.dotnet
.DOTNET_ROOT
环境变量。这对我来说是export DOTNET_ROOT=$HOME/.dotnet
。~/.dotnet/dotnet run
目录运行PreviewApp
。这很有用:https://learn.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual#manual-install