【问题标题】:How to use StreamReader in XNA如何在 XNA 中使用 StreamReader
【发布时间】:2012-05-15 11:43:07
【问题描述】:

我在使用 StreamReader 时遇到了一些问题。首先,下面是我的简单代码:

using (StreamReader reader = new StreamReader("Content/Levels/" + mapName + ".txt"))
{
    for (int i = 0; i < 20; i++)
        for (int j = 0; j < 36; j++)
        {
            string[] objLoc = reader.ReadLine().Split(',');
            map[i, j] = Convert.ToInt32(objLoc[j]);
        }
}

所以,我有一个包含行和列的文本文件,就像一个数组一样。每个位置都有一个整数。这些整数由 , 字符分隔。

我想从文本文件中的位置读取每个字符,然后将其转换为实际整数并将其添加到单独的数组中。在我向您展示的代码之后,我将从该数组中读取以构建地图。

作为 C# 和编程新手,我假设我的代码实际上是使用该 Split 方法从一行中读取每个位置,然后我使用 read char 将其插入到映射数组中。

我做得对吗?目前,我遇到了一个异常:

NullReferenceException 未处理:对象引用未设置为对象的实例。

我也阅读了 MS 的文档。偶然发现了许多类似的问题,但没有一个能解决我的问题。

任何帮助将不胜感激!

【问题讨论】:

    标签: c# xna streamreader


    【解决方案1】:

    您正在内部循环中读取一个全新的行,这意味着您很快就会用完行。您需要在外部循环中读取一个新行,并在内部循环中循环遍历拆分的结果(单个元素)

    试试类似的东西

    using (StreamReader reader = new StreamReader("Content/Levels/" + mapName + ".txt"))
    {
      for (int i = 0; i < 20; i++) {
        string[] objLoc = reader.ReadLine().Split(',')
        for (int j = 0; j < 36; j++) {
          map[i, j] = Convert.ToInt32(objLoc[j]);
        }
      }
    }
    

    注意:如果该行没有包含足够的元素或文件太短,您需要检查错误。转换为int 也可能失败

    【讨论】:

    • 该死,我总是陷入这些情况:我所要做的就是移动一行代码:P 无论如何,非常感谢!
    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 2010-09-21
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多