gpt4 book ai didi

c# - OpenTK 按键?

转载 作者:行者123 更新时间:2023-11-30 21:50:20 30 4
gpt4 key购买 nike

我正在寻找一种跨平台(Win 和 MacOS)方法来检测 C# 中 OpenGL 应用程序的按键。

以下有效,但仅适用于字母数字字符。

protected override void OnKeyPress(OpenTK.KeyPressEventArgs e)
{
if (e.KeyChar == 'F' || e.KeyChar == 'f')
DoWhatever();
}

目前,我正在破解它,检测用户何时释放 key :

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]) );
}

最佳答案

稍微改变一下想法,您就会看清楚。

您正在编写一个 OpenGL 应用程序,因此您有一个主循环,您可以在其中更新和渲染您的对象。

如果在该循环中您获得键盘状态并与之前存储的状态进行比较,您将获得所有键盘更改,那么很容易通过键更改触发您自己的事件(或仅调用函数)。

通过这种方式,您将使用 OpenTK 的固有机制,并且将是 100% 可移植的。

关于c# - OpenTK 按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36421732/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com