【问题标题】:XNA - Read Tile Maps From Txt fileXNA - 从 Txt 文件读取平铺地图
【发布时间】:2013-08-16 14:18:59
【问题描述】:

我一直在尝试和浏览互联网,但我还没有弄清楚如何从文本文件中读取瓷砖地图。基本上我有一个名为map 的数组,但我想从文本文件中加载地图,而不是在类中实现每个级别:/

我想的游戏是一个益智游戏,你是一个rpg角色,必须解决谜题才能进入新房间。

那么当我想添加新地图/关卡时,我将如何制作,我只需要编写一个新的 .txt 文件并将其添加到 Game1.cs 或类似的东西中? 在此先感谢:P

【问题讨论】:

  • Uffe - RPG 标签适用于 RPG 编程语言,而不适用于“角色扮演游戏”。
  • 我能做这样的事情的唯一方法是使用 XML。

标签: arrays xna stream 2d


【解决方案1】:

noamg97 的回答正确描述了如何在 .NET 中读取和写入文本文件,但值得注意的是,他的两个示例都有更简洁的方法:

string[] mapData = File.ReadAllLines(path);

File.WriteAllLines(path, mapData);

假设每个字符代表地图上的一个图块,您可以使用简单的循环将上面的mapData 数组快速转换为更方便的格式,以便处理为您的本机数据格式:

var width = mapData[0].Length;
var height = mapData.Length;
var tileData = new char[width, height];
for (int y = 0; y < height; y++)
{
    for (int x = 0; x < width; x++)
        tileData[x, y] = mapData[y][x];
}

然后您可以使用它通过简单的查找来确定特定图块的字符。

【讨论】:

  • 我的 content/levels 文件夹中有我的 level1.txt,我用:string[] mapData = File.ReadAllLines("Levels/level1"); 替换了我的数组,我得到了这个:错误 1 ​​无法自动检测哪个导入器用于“Levels\level1.文本”。没有处理这种文件类型的进口商。在您的项目中指定处理此文件类型的导入器。有任何想法吗?我想我错过了一些大事......
  • 它正在尝试通过 XNA 内容管道提供您的文本文件。在解决方案资源管理器中选择文件并查看其属性,然后将其构建操作更改为“无”并将其复制到输出目录设置更改为“如果较新则复制”
  • 另外,您需要将路径更改为“Content/Levels/level1”
  • 谢谢,现在只有一件事,绘制函数,我得到一个错误,语法错误;预期值。在我拥有地图[y,x]之前,但现在当我使用文本文件时,它不想在那里拥有它..那么我应该放什么?我的抽奖:spriteBatch.Draw(tileList[map[]], new Rectangle(x * tileWidth, y * tileHeight, tileWidth, tileHeight), Color.White);
  • 您将不得不以某种方式将您读取的数据转换为地图数据。在不知道您如何设置的情况下,我无法告诉您具体信息。您从文件中读取的地图数据只是一个包含文本的字符串数组。
【解决方案2】:

很容易,要从 .txt 文件中读取,您只需使用 System.IO 命名空间中的一些工具:

using (System.IO.Stream fileStream = System.IO.File.Open(Path_String, System.IO.FileMode.Open))
using (System.IO.StreamReader reader = new System.IO.StreamReader(fileStream))
{
    string line = null;
    while (true)
    {
        line = reader.ReadLine();

        //Get Your Map Data

        if (line == null)
            break;
    }
}

或者,要使用 C# 编写 .txt 文件,请使用以下代码:

System.IO.StreamWriter writer = new System.IO.StreamWriter(path + "/" + newShow.name + ".txt");
writer.Write(dataToRight);
writer.Close();
writer.Dispose();

编辑: 附加信息 - 要将地图数据从文本文件获取到数组,您可以使用类似以下代码的代码(假设您确实按照https://stackoverflow.com/questions/18271747/xna-rpg-collision-and-camera)

List<int[]> temp = new List<int[]>();
List<int> subTemp = new List<int>();

...

string line = null;
while (true)
{
    line = reader.ReadLine();

    while (line.IndexOf(',') != -1)
    {
        subTemp.Add(line[0]);
        line.Substring(1);
    }
    temp.Add(subTemp.ToArray());
    if (line == null)
        break;
}

int[][] mapData = temp.ToArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2012-04-03
    • 2011-07-03
    • 2014-10-23
    相关资源
    最近更新 更多