如何在C#中创建一个多维对象数组

4

我正在尝试编写一个脚本,通过生成高度图然后填充地形块来动态生成世界块。我的问题是如何创建一个二维对象数组。

public class Chunk
{
    public Block[,] blocks;

    Generate(){
        //code that makes a height map as a 2 dimensional array as hightmap[x,y]=z
        //convert heightmap to blocks
        for (int hmX = 0; hmX < size; hmX++)
        {
            for (int hmY = 0; hmY < size; hmY++)
            {
                blocks[hmX, hmY] = new Block(hmX, hmY, heightmap.Heights[hmX, hmY], 1);
            }
        }
    }
}

我遇到了这个错误:

NullReferenceException was unhandled, Object reference not set to an instance of an object.

表示对象引用未设置为对象的实例,导致了空引用异常。
1个回答

6

你只需要在循环前面添加 "new":

Block[,] blocks = new Block[size,size];

或者说,在generate函数内部(其他都相同):

blocks = new Block[size,size];

否则你会影响到原始的“blocks”变量。

那个修复了,但是我用存储在多维块数组中的块做同样的事情。唯一的问题是我不知道会有多少块。我应该将块从多维数组切换到交错数组,还是有办法使其适应动态大小? - FreakinaBox
如果您不知道任何一个维度,也许您可以使用通用容器类。您可以尝试使用 Dictionary<Point,Chunk> chunks = new Dictionary<Point,Chunk>(); 这样的代码,其中 Point 包含块的坐标。或者,如果它始终是矩形,则可以使用 List<List<Chunk>> chunks = new List<List<Chunk>>(); - Nathan Andrew Mullenax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接