2
OpenGLアプリケーションのC#でキー押下を検出するクロスプラットフォーム(Win & MacOS)メソッドを探しています。OpenTKキーを押しますか?
以下は機能しますが、英数字のみで動作します。
protected override void OnKeyPress(OpenTK.KeyPressEventArgs e)
{
if (e.KeyChar == 'F' || e.KeyChar == 'f')
DoWhatever();
}
現在、私は、それをハッキングユーザーがキーを離したときに検出しています:
OpenTK.Inputを使用してvoid HandleKeyUp (object sender, KeyboardKeyEventArgs e)
{
if (e.Key == Key.Tab)
DoWhatever();
}
キーが開催されている場合は、私がテストすることができますが、私は後です最初のキーを押すだけです。
var state = OpenTK.Input.Keyboard.GetState();
if (state[Key.W])
DoWhatever();
OpenTKユーザーがキーを登録しようとしていますか?単に以前のメインループのものに現在のキーボードの状態を比較することにより、Gusmanによって示唆されるよう
SOLUTION
。
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]));
}
質問に私の解決策を追加しました、ありがとうございました。 –
これは基本的な使用のための実用的な解決策ですが、これはあなたのOpenGLアプリケーション内でユニコードまたは非英語のキーボード入力を提供したい場合にはうまくいかないでしょう:/ – Tyron
@Tyronユニコードについてはわかりませんが、それは常にスペイン語で、失敗しなかったので、列挙型とキーの間の実際のマッピングを知る必要があります。 – Gusman