所以,我有一个向量列表,当我在其中放入一个新的向量时,它工作得很好,但是如果我尝试访问向量列表的索引并在其中放入一个向量,我会收到此错误“对象引用没有设置为对象的实例。“每个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”列表的向量不起作用,我做错了什么?
答案 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>();
你想用一系列列表来包含什么?可能存在一种较少嵌套/复杂的方式来实现您的目标。