KeyboardState newState = Keyboard.GetState();
if (newState.IsKeyDown(Keys.A))
{
_label.Text = "A";
}
if (newState.IsKeyDown(Keys.B))
{
_label.Text = "B";
}
if (newState.IsKeyDown(Keys.C))
{
_label.Text = "C";
}
将_label.Text分配给按下的键有什么更好的方法?我想要避免的是键盘上每个字符的if / swich语句。
答案 0 :(得分:0)
我现在没有安装MonoGame,但对于WinForms,这涵盖所有字母,数字和Shift,如Shift。它能够拾取问号,但没有像惊叹一样。
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
KeysConverter keysConverter = new KeysConverter();
label1.Text = keysConverter.ConvertToString(e.KeyValue);
}
对于MonoGame,KeyboardState有一个item属性,可以让你获得按下的键,并以与我上面所做的相似的方式分配它。
答案 1 :(得分:0)
GetPressedKeys()
方法返回包含当前按下的键的Keys
枚举数组。
KeyboardState state = Keyboard.GetState();
var keys = state.GetPressedKeys();
迭代并使用ToString()
将枚举转换为字符串
//let's assume that key a is pressed
label.Text = keys[0].ToString(); //"a"
然而, ToString()
并没有解决所有问题。对于大写字符,您仍应检查是否按下了shift键。还应该映射一些特殊字符。
可以找到工作字符键映射here