XNA尝试创建</item> </item>时List <item>和List <item> []之间的区别

时间:2011-09-18 20:57:36

标签: list xna indexing instance

所以,我有一个向量列表,当我在其中放入一个新的向量时,它工作得很好,但是如果我尝试访问向量列表的索引并在其中放入一个向量,我会收到此错误“对象引用没有设置为对象的实例。“每个List的代码几乎相同:

class GameMap
{
    MouseHandler mouseHandler;
    TileSet tileSet;
    List<Vector2>[] tiles;
    List<Vector2> tile;

    public GameMap(ContentManager Content)
    {
        mouseHandler = new MouseHandler();
        tileSet = new TileSet(Content);
    }

    public void Initialize()
    {
        tiles = new List<Vector2>[tileSet.tiles]; //What am I doing wrong here?
        tile = new List<Vector2>();
    }

    public void MapEditor()
    {
        mouseHandler.MouseUpdate();

        if (mouseHandler.LeftButton == true)
        {
            tiles[0].Add(mouseHandler.MousePosition); //The error comes out here.
            tile.Add(mouseHandler.MousePosition);
        }
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        for (int i = 0; i < tileSet.tiles; i++)
        {
            tileSet.TiledTexture(spriteBatch, tiles[i], i);
            tileSet.TiledTexture(spriteBatch, tile, i);
        }
    }
}

带有倍数的“Tiles”列表的向量不起作用,我做错了什么?

2 个答案:

答案 0 :(得分:2)

tiles = new List<Vector2>[tileSet.tiles]

创建一个List<Vector2>tileSet.tiles元素的新数组。这些元素最初为null。当您访问tiles[0].Add(...)时,tiles[0]仍为null,因此您会获得空引用异常。

你需要做类似的事情:

tiles = new List<Vector2>[tileSet.tiles]
for (int i = 0; i < tiles.Length; ++i)
{
     tiles[i] = new List<Vector2>();
}

编辑:

我想重点是:

虽然

tile = new List<Vector2>()

tiles = new List<Vector2>[tileSet.tiles]
看起来非常相似,它们是完全不同的。第一个创建一个新List,第二个创建一个List引用数组,它们最初为null。在使用它之前,您仍然需要初始化每个对有效列表的引用。

答案 1 :(得分:1)

  

瓦片[0]。新增(mouseHandler.MousePosition);

虽然您已经创建了一个包含一堆列表的数组,但您必须实例化该数组中的每个List。

//something like this:
tiles[0] = new List<Vector2>();
tiles[1] = new List<Vector2>();
...
tiles[n] = new List<Vector2>();

你想用一系列列表来包含什么?可能存在一种较少嵌套/复杂的方式来实现您的目标。