如何使用C#中的keys枚举检测小写密钥?

Zai*_*inu 4 c# xna key

for (Keys k = Keys.A; k <= Keys.Z; k++)
{
    if (KeyPress(k))
        Text += k;
}
Run Code Online (Sandbox Code Playgroud)

此代码检测到我在键盘上按下的按键按钮,它将打印出在控制台中按下的按键.但是,我在键盘上按了'a',但它出现'A'.我该如何解决?

Geo*_*ett 9

这是一个经常遇到的问题.问题是XNA不适合从键盘获取文本输入.它适用于获取键盘上每个键的当前状态.

虽然您可以编写自定义代码来检查是否按下shift等等,但是键盘不是您正在使用的键盘(例如,不同的语言,不同的布局).大多数人所做的就是让窗户为你做.

如果您希望文本按预期显示,则需要基本上重新创建一些内容并让窗口为您执行此操作.

请参阅Promit的帖子:http://www.gamedev.net/topic/457783-xna-getting-text-from-keyboard/

用法:

将他的代码添加到您的解决方案 调用EventInput.Initialize in your game'sInitialize`方法并订阅他的事件:

EventInput.CharEntered += HandleCharEntered;

public void HandleCharEntered(object sender, CharacterEventArgs e)
{
    var charEntered = e.Character;
    // Do something with charEntered
}
Run Code Online (Sandbox Code Playgroud)

注意:如果您允许输入任何字符(例如带有变音符号的外国字符等),请确保您SpriteFont支持它们!(如果没有,也许只是在将字体添加到文本字符串之前检查您的字体是否支持它,或者让spritefont使用特殊的"无效"字符).