【问题标题】:How do I make FastNoise Lite work properly?如何使 FastNoise Lite 正常工作?
【发布时间】:2021-08-10 03:42:58
【问题描述】:

我正在制作一款将使用地形生成的游戏,因此我使用的是 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]);
                }            
        }

所有这一切都是用一些不同的瓦片(如水或草)创建一个二维数组。

然后当我创建它并绘制它时,我得到以下结果:

Image

但是,我想要类似的东西:

This

问题在于:当我改变漏洞或增益时,什么也没有发生。频率只是改变有多少“补丁”草。我想这是库的问题和/或我不知道如何正确使用它的事实,因为我以前在 python 中做过这个,但从来没有遇到过这个错误。

我该如何解决这个问题?

【问题讨论】:

    标签: c# noise perlin-noise


    【解决方案1】:

    我需要做的就是添加一个分形类型:

    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 似乎是最适合我想要的地形生成的一种

    【讨论】:

      猜你喜欢
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 2012-05-28
      • 2021-09-24
      • 2023-03-13
      • 2016-02-21
      • 2014-12-17
      相关资源
      最近更新 更多