【发布时间】:2014-05-28 00:30:31
【问题描述】:
在 XNA 中使用 .txt 文件时我不是很有经验,因此我需要一些帮助。
我正在尝试根据 .txt 文档中的数字让 Tile Engine 读取和放置信息。它看起来像这样:
1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 etc
现在,这个文档在 X 中包含 50 个字符(25 个没有 [ , ]),在 Y 中有 15 行。问题是它只读取 Y 中的第一行,而不读取 Y 中剩余的 14 行,即导致它崩溃。
代码如下:
public void LoadMap(string MapName)
{
using (StreamReader streamReader = new StreamReader("Content/" + MapName + ".txt"))
{
do
{
string line = streamReader.ReadLine();
string[] numbers = line.Split(',');
int temp = 0;
for (int y = 0; y < loopY; y++)
{
for (int x = 0; x < loopX; x++)
{
Blocks[y, x] = new Block();
//Crashes here when temp reaches 25
if (int.Parse(numbers[temp]) == 1)
Blocks[y, x].color = Color.Blue;
else if (int.Parse(numbers[temp]) == 2)
Blocks[y, x].color = Color.Violet;
else
Blocks[y, x].color = Color.White;
temp++;
}
}
} while (!streamReader.EndOfStream);
}
}
【问题讨论】:
-
loopY和loopX在哪里定义?
-
你确定 loopX 在
numbers[]的范围内吗?您看到的异常是什么? -
它们在我发布的代码上方定义,它们看起来像这样: int loopX = GameScreen.Screen.X / 32; int loopY = GameScreen.Screen.Y / 32; Screen.X 是 800:Screen.Y 是 500,我将它们除以 32 以获得覆盖屏幕所需的块数。
-
"索引超出了数组的范围。"是的,我检查了它 loopX 是 25,Numbers 是 25。
-
1.访问 numbers[temp] 是不安全的,因为 temp 可能大于数组长度。 2. 您正在为每一行覆盖 Blocks[y,x]。