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

How to open a textfile in XNA/monogame(beginner here)?

好的,所以我在 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 中它似乎根本不起作用。

此外,我在文件目录方面确实没有受过良好教育,需要快速修复。文本文件放在这个区域:

我希望这对我提供尽可能多的信息有所帮助。只是要注意在图像 link 中显示的目录位置中对文本文件的流写入工作非常好,我只是给出文件的名称,如下所示:

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 文本框输入,从我看到的教程来看这似乎很复杂,这就是为什么我想打开记事本中的文本文件进行编辑。此外,这将在其他人的计算机上使用,因此如果必须使用目录,我需要一个可以在其他计算机和我自己的计算机上使用的目录,只是要注意目录输入似乎让我感到困惑。

希望我已经提供了足够的信息,我真的希望有人能在这里帮助这个初学者:)

要使其正常工作,您的代码应如下所示:



    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 是一个字符串 ": ".

代码很容易解释。
现在,当使用此 class 时,您必须有一个 bool 来查看用户是否已激活此文本框,如果已激活,则在按键时添加文本。如果文本框处于非活动状态,请继续正常更新

你要明白的是文本框是一个简单的字符串当文本框处于活动状态时更新,当文本框不活动时只显示。
使用这个简单而准确的 TextBox 定义,您可以简单地创建您自己的 class,它将按照您想要的方式工作。

如果此答案帮助您解决了问题,请将其标记为解决方案。