【发布时间】:2016-04-05 09:03:27
【问题描述】:
我正在寻找一种跨平台(Win 和 MacOS)方法来检测 C# 中用于 OpenGL 应用程序的按键。
以下方法有效,但仅适用于字母数字字符。
protected override void OnKeyPress(OpenTK.KeyPressEventArgs e)
{
if (e.KeyChar == 'F' || e.KeyChar == 'f')
DoWhatever();
}
目前,我正在破解它,检测用户何时释放键:
void HandleKeyUp (object sender, KeyboardKeyEventArgs e)
{
if (e.Key == Key.Tab)
DoWhatever();
}
使用 OpenTK.Input,我可以测试是否正在按住某个键,但我只是在初始按键之后。
var state = OpenTK.Input.Keyboard.GetState();
if (state[Key.W])
DoWhatever();
那么,OpenTK 用户使用哪些方法来注册按键?
解决方案
按照 Gusman 的建议,只需将当前键盘状态与前一个主循环的状态进行比较即可。
KeyboardState keyboardState, lastKeyboardState;
protected override void OnUpdateFrame(FrameEventArgs e)
{
// Get current state
keyboardState = OpenTK.Input.Keyboard.GetState();
// Check Key Presses
if (KeyPress(Key.Right))
DoSomething();
// Store current state for next comparison;
lastKeyboardState = keyboardState;
}
public bool KeyPress(Key key)
{
return (keyboardState [key] && (keyboardState [key] != lastKeyboardState [key]) );
}
【问题讨论】: