所以我试图在我的游戏中实现用户名系统,为此我需要让用户输入他们想要的用户名。我创建了一个TextBox
类。
修改
在进一步研究其他人在游戏中创建TextBox
的经历及其方法后,我得出以下结论:
Microsoft.Xna.Framework.Input.Keys
和Microsoft.Xna.Framework.Input.KeyboardState.GetState()
从未被认为是这样使用的。Winforms
时,由于Windows会为您处理这些代码,因此会花费大量时间和精力来执行其他无关紧要的事情。我将尝试通过使用user32.dll
中的一些Win32函数来找到可能的解决方案。并且可能使用regexp
来验证字符串。一旦我弄明白,我将重新审视当前的代码,看看我可以回收什么,然后废弃其余部分。
答案 0 :(得分:0)
我认为输入问题在这里:
if (MainGame.InputManager.IsKeyPressed(keys))
{
keys = MainGame.InputManager.PressedKeys;
如果我理解正确,这字面上写着“如果按下最后一帧按下任何键,那么检查输入”,这总是错误的。在这种情况下,删除if
语句应解决问题。
我不太关注如何使用StringBuilder
。 StringBuilder
用于对低垃圾生成进行字符串修改,但是您通过调用ToString
并在每次按键时更新重复的字符串来否定它。此外,如果字符串长度超过最大长度,则会截断显示的final
字符串,但不截断content
字符串,导致它们不同步。我只是直接修改final
。
使用char.IsLetterOrDigit
最简单地检测字母数字字符。
如果要复制WinForms行为,也可以查看GameWindow.OnTextInput
。