XNA有一个方法Keyboard.GetState()
,它返回键盘的状态。您可以轮询以查看是否通过Keys
枚举按下了某个特定键,“巧合”恰好与常规C#使用的相同。
无论如何,我需要一种方法将枚举转换为可读字母,例如输入自定义文本框,所以我做了一个像这样的扩展方法:
public static char ToChar(this Keys obj, bool shift, bool caps)
{
switch (obj)
{
case (Keys.A): return (shift ^ caps) ? 'A' : 'a';
case (Keys.B): return (shift ^ caps) ? 'B' : 'b';
case (Keys.C): return (shift ^ caps) ? 'C' : 'c';
...
case (Keys.OemOpenBrackets): return (!shift) ? '[' : '{';
case (Keys.OemCloseBrackets): return (!shift) ? ']' : '}';
case (Keys.OemPipe): return (!shift) ? '\\' : '|';
case (Keys.OemSemicolon): return (!shift) ? ';' : ':';
case (Keys.OemQuotes): return (!shift) ? '\'' : '"';
case (Keys.OemComma): return (!shift) ? ',' : '<';
case (Keys.OemPeriod): return (!shift) ? '.' : '>';
case (Keys.OemQuestion): return (!shift) ? '/' : '?';
...
default: return ' ';
}
}
我并不十分关注速度,因为只会在用户输入时调用,而不是在紧密循环内。但是,将箭头键或向上页面混合将导致,返回一个空白字符(默认情况下)。
使用char?
实际上更有意义,在使用不可打印字符的情况下返回null吗?或者可能是string
,以便我可以返回String.Empty
?
答案 0 :(得分:1)