首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenTK按键?

OpenTK按键?
EN

Stack Overflow用户
提问于 2016-04-05 09:03:27
回答 1查看 6.9K关注 0票数 3

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

以下操作,但只适用于字母数字字符。

代码语言:javascript
复制
protected override void OnKeyPress(OpenTK.KeyPressEventArgs e)
{
    if (e.KeyChar == 'F' || e.KeyChar == 'f')
        DoWhatever();
}

目前,我正在对其进行黑客攻击,检测用户何时释放密钥:

代码语言:javascript
复制
void HandleKeyUp (object sender, KeyboardKeyEventArgs e)
{
    if (e.Key == Key.Tab)
        DoWhatever();
}

使用OpenTK.Input,我可以测试一个密钥是否被持有,但我只需要最初的按键。

代码语言:javascript
复制
var state = OpenTK.Input.Keyboard.GetState();

if (state[Key.W])
    DoWhatever();

那么,OpenTK用户采用什么方法来注册按键呢?

溶液

正如Gusman所建议的,简单地将当前的键盘状态与前一个主循环的状态进行比较。

代码语言:javascript
复制
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]) );
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-05 09:18:20

稍微改变一下你的想法,你就会明白这一点。

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

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36421732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档