创建游戏中的TextBox

时间:2016-09-04 19:31:13

标签: c# monogame

所以我试图在我的游戏中实现用户名系统,为此我需要让用户输入他们想要的用户名。我创建了一个TextBox类。

修改

在进一步研究其他人在游戏中创建TextBox的经历及其方法后,我得出以下结论:

  • 我当前的代码设计得很糟糕,因为Microsoft.Xna.Framework.Input.KeysMicrosoft.Xna.Framework.Input.KeyboardState.GetState()从未被认为是这样使用的。
  • 因此,代码效率低下,并且在使用Winforms时,由于Windows会为您处理这些代码,因此会花费大量时间和精力来执行其他无关紧要的事情。我将尝试通过使用user32.dll中的一些Win32函数来找到可能的解决方案。并且可能使用regexp来验证字符串。

一旦我弄明白,我将重新审视当前的代码,看看我可以回收什么,然后废弃其余部分。

1 个答案:

答案 0 :(得分:0)

我认为输入问题在这里:

if (MainGame.InputManager.IsKeyPressed(keys))
{
    keys = MainGame.InputManager.PressedKeys;

如果我理解正确,这字面上写着“如果按下最后一帧按下任何键,那么检查输入”,这总是错误的。在这种情况下,删除if语句应解决问题。

我不太关注如何使用StringBuilderStringBuilder用于对低垃圾生成进行字符串修改,但是您通过调用ToString并在每次按键时更新重复的字符串来否定它。此外,如果字符串长度超过最大长度,则会截断显示的final字符串,但不截断content字符串,导致它们不同步。我只是直接修改final

使用char.IsLetterOrDigit最简单地检测字母数字字符。

如果要复制WinForms行为,也可以查看GameWindow.OnTextInput