创建游戏内文本框
Create an in-game TextBox
所以我正在尝试在我的游戏中实现用户名系统,为此我需要让用户输入他们想要的用户名。我创建了一个 TextBox
class.
编辑
在进一步研究其他人在游戏中创建 TextBox
的经验以及他们的方法后,我得出以下结论:
- 我当前的代码设计得很糟糕,因为
Microsoft.Xna.Framework.Input.Keys
和 Microsoft.Xna.Framework.Input.KeyboardState.GetState()
从来不应该像这样使用。
- 因此,代码效率低下,并且会花费大量时间和精力来做一些本来无关紧要的事情,因为 Windows 在使用
Winforms
时会为您处理它们。我将尝试通过使用 user32.dll
中的一些 Win32 函数来找到可能的解决方案。并且可能使用 regexp
来验证字符串。
一旦我弄明白了,我将重新访问当前代码,看看我可以回收哪些,然后废弃其余部分。
我觉得是输入问题:
if (MainGame.InputManager.IsKeyPressed(keys))
{
keys = MainGame.InputManager.PressedKeys;
如果我没理解错的话,这个字面意思是"if any of the keys pressed last frame is pressed, then do check for input",它总是错误的。删除 if
语句应该可以解决这种情况下的问题。
我不太明白 StringBuilder
的用法。 StringBuilder
用于低垃圾生成的字符串修改,但您通过调用 ToString
并在每次按键时更新重复的字符串来否定它。此外,如果字符串长度超过最大长度,您将截断显示的 final
字符串而不是 content
,从而使它们不同步。我只想直接修改 final
。
使用 char.IsLetterOrDigit
最容易检测字母数字字符。
如果您想复制 WinForms 行为,您还可以查看 GameWindow.OnTextInput
。
所以我正在尝试在我的游戏中实现用户名系统,为此我需要让用户输入他们想要的用户名。我创建了一个 TextBox
class.
编辑
在进一步研究其他人在游戏中创建 TextBox
的经验以及他们的方法后,我得出以下结论:
- 我当前的代码设计得很糟糕,因为
Microsoft.Xna.Framework.Input.Keys
和Microsoft.Xna.Framework.Input.KeyboardState.GetState()
从来不应该像这样使用。 - 因此,代码效率低下,并且会花费大量时间和精力来做一些本来无关紧要的事情,因为 Windows 在使用
Winforms
时会为您处理它们。我将尝试通过使用user32.dll
中的一些 Win32 函数来找到可能的解决方案。并且可能使用regexp
来验证字符串。
一旦我弄明白了,我将重新访问当前代码,看看我可以回收哪些,然后废弃其余部分。
我觉得是输入问题:
if (MainGame.InputManager.IsKeyPressed(keys))
{
keys = MainGame.InputManager.PressedKeys;
如果我没理解错的话,这个字面意思是"if any of the keys pressed last frame is pressed, then do check for input",它总是错误的。删除 if
语句应该可以解决这种情况下的问题。
我不太明白 StringBuilder
的用法。 StringBuilder
用于低垃圾生成的字符串修改,但您通过调用 ToString
并在每次按键时更新重复的字符串来否定它。此外,如果字符串长度超过最大长度,您将截断显示的 final
字符串而不是 content
,从而使它们不同步。我只想直接修改 final
。
使用 char.IsLetterOrDigit
最容易检测字母数字字符。
如果您想复制 WinForms 行为,您还可以查看 GameWindow.OnTextInput
。