【问题标题】:How to use an array of two dimensional float arrays?如何使用二维浮点数组的数组?
【发布时间】:2016-06-06 18:42:28
【问题描述】:

我尝试过使用通用列表,但我的研究表明无法重置列表的枚举器,因此不会这样做,因为我需要不断迭代浮点 [,] 列表。

我本质上想缓存 10 个不同的 perlin 噪声图,游戏循环会遍历这些图。每个 perlin 映射都是一个浮点数 [,]。所有地图的宽度和高度都相同。

我想将这些存储在一些我可以不断迭代的数据结构中,无论是通用列表还是数组:

void BuildCache() {
    cache = new float[cacheSize][,];
    for(int i = 0; i < cacheSize; i++) {
        float[,] noiseMap = Noise.GenerateNoiseMap (width, height, seed, noiseScale, octaves, persistence, lacunarity, offset);
        cache [i] [0] = noiseMap;
        offset += speed;
    }
}

这会导致此错误:Assets/Scripts/FogGenerator.cs(51,36): error CS0022: Wrong number of indices 1' inside [], expected2'

这似乎是一件基本的事情,在 Java 中我会使用通用列表,但由于我无法重置 C# 的通用列表,所以我在这里不知所措。

【问题讨论】:

  • cache[i] = noiseMap,删除[0]
  • 你的意思是你不能重置列表的枚举数?
  • Arturo 那么如何声明缓存呢?因为我仍然得到错误。我的定义是这样的:float[][,] cache;
  • juharr List in System.Collections.Generic 只能使用枚举器进行迭代,这是我的信念。这个枚举器没有重置实现,我无法创建一个新的枚举器,因为它仍然从列表的末尾开始?

标签: c# unity3d perlin-noise procedural-generation


【解决方案1】:

在您的数组声明中,您明确声明 cache 数组是多维数组的数组。错误在缓存[i][0] = noiseMap;因为它类似于基于 C/C++ 的语言中的二维数组语法。您应该使用 cache[i] = noiseMap ,因为这样您就显式地编译了您在此数组中引用二维数组并写入此值的编译器。

【讨论】:

  • 有道理,但是我该如何定义实际的缓存呢?这就是我这样做的方式:float[][,] cache;这会产生:Assets/Scripts/FogGenerator.cs(51,25): error CS0029: Cannot implicitly convert type float[,]' to float[]'
  • 您确定使用array_name[index, index] 而不是array_name[index][index]?我说你用 cache[i] = noiseMap 替换 cache[i][0] = noiseMap。
  • 这很好用。将其与您的代码进行比较。静态无效 BuildCache() { var cacheSize = 10; var cache = new float[cacheSize][,]; for (int i = 0; i
  • @shfire:我也想过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 2016-07-09
相关资源
最近更新 更多