如何在XNA / monogame中打开文本文件(这里是初学者)?

时间:2016-04-19 09:56:11

标签: c# file xna streamreader streamwriter

好的,所以我在xna工作,我想打开这个应该在文本文件中打开的文本文件。这是代码:

 if (Keyboard.GetState().IsKeyDown(Keys.G) == true) 
                {
                    var fileToOpen = "Name.txt";
                    var process = new Process();
                    process.StartInfo = new ProcessStartInfo()
                    {
                        UseShellExecute = true,
                        FileName = fileToOpen
                    };

                    process.Start();
                    process.WaitForExit();
                }

但是发生错误并且无法找到要打开的文本文件。我在一个普通的consol应用程序中做了这个,只是在项目中添加了一个新项目文本文件,它在控制台应用程序中运行良好,但是在XNA中它似乎根本不起作用。

此外,我真的没有受过良好的文件目录教育,需要快速修复。文本文件放在此区域中:
file location image

我希望我能尽量提供尽可能多的信息。只是要注意在图像链接中显示的目录位置中对文本文件的流写操作完全正常,我只是给出文件的名称,如下所示:

if (player.GetRec.Intersects(map.sharkRec))
                {
                    using (StreamWriter writer = new StreamWriter("CurrentScore.txt"))
                    {
                        writer.Write(time);

                    }
                    player.Position = new Vector2(64,100);


                    mCurrentScreen = ScreenState.leaderboard;
                }

然而,当我想在记事本中打开文本文件并允许在记事本中的文本文件中进行输入时,它似乎才起作用。我想打开一个文本文件进行打字的原因是用户输入名称,我没有知识或时间做XNA文本框输入创建,这看起来很复杂,我看到的教程,这就是为什么我要打开记事本中的文本文件用于编辑。此外,这将在其他人的计算机上使用,所以如果必须使用directorys我需要一个可以在我自己的其他计算机上工作的目录,只是为了记录目录输入似乎让我感到困惑。

希望我已经提供了足够的信息,我真的希望有人可以帮助这位初学者:)

1 个答案:

答案 0 :(得分:0)

为此,您的代码应该是这样的:



    using(StreamWriter ...)
    {
        show textbox so the user can see what he's typing
        for each keypress add the letter
        exit on ESC button (for example)
        delete char on Backspace
        etc...
    }

现在,我个人不推荐这种类型的代码。打开文件,执行您必须执行的操作并关闭它。下面的代码是我为游戏编写文本框的方式。我希望它有所帮助(你可以说这对于更好地处理问题更有点自然而不是你为自己提出的确切问题的答案)。



    namespace Acircalipse.MenuClasses
    {
        public class TextBox:MenuItem
        {
            private string originTitle;
        public string Text
        {
        get
        {
        return title.Replace(originTitle, "").Replace(Menu.separator, "");
        }
        }
        public int index, max;

        public      TextBox     (string Title, string text = "", int MaxCharacters = 14)
        {
        originTitle = Title;
        index = 0;
        max = MaxCharacters;
        SetText(text);
        }
        public void     SetText     (string text)
        {
        if (text.Length > max) text = text.Substring(0, max);
        title = originTitle + Menu.separator + text;
        }

        public void     ChangeIndex     (int howMuch)
        {
        index += howMuch;   
        ChangeCar(index);
        }
        public void     AddChar     (int index = 0)
        {
        SetText(Text + Menu.Wheel(index));
        }
        public void     ChangeCar       (int index)
        {
        if(Text.Length > 0)
        SetText(Text.Substring(0, Text.Length - 1) + Menu.Wheel(index));
        }
        public void     DeleteChar      ()
        {
        if (Text.Length > 0)
        SetText(Text.Substring(0, Text.Length - 1));
        }
        }
    }

Menu.Wheel(int index)只是一个可用字符数组,供用户输入



    public static char Wheel(int index)
    {
        string charWheel = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        int max = charWheel.Length;
        while (index > max) index -= max;
        while (index ("less than" sign here) 0) index += max;
        return charWheel[index];
    }

其中Menu.separator是字符串": "
代码非常自我解释 现在,在使用此类时,您必须有一个bool来查看用户是否已激活此文本框,如果有,则在按键上添加文本。如果文本框处于非活动状态,请继续正常更新

您必须了解的是,文本框是一个简单的字符串,当文本框处于活动状态时会更新,并且只在未激活时显示。
使用TextBox的简单定义,您可以简单地创建自己的类,以您想要的方式工作。

如果这个答案有助于您解决问题,请将其标记为解决方案。