首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLFW开关布尔开关

GLFW开关布尔开关
EN

Stack Overflow用户
提问于 2018-09-25 07:05:03
回答 2查看 2K关注 0票数 2

我使用GLFW作为键盘输入,但是处理速度太快,因此我在单个按键上的布尔开关被更改了10次,因为输入是处理每帧的。我只需要一个空格键就能切换状态。我的当前代码如下:

代码语言:javascript
复制
if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS)
{
    show = !show;
}

有更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-25 07:16:04

是。glfwGetKey用于连续键输入。GLFW手册列出glfwSetKeyCallback作为更好的替代方案,如果您希望一次性通知键按.

因此,对于您的情况,应该是这样的:

代码语言:javascript
复制
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if (key == GLFW_KEY_SPACE && action == GLFW_PRESS)
        show = !show;
}

如果出于任何原因不想使用此方法,则可以自己实现类似的方法。您将需要一个表示键状态的布尔值(或值数组)。然后,在输入处理中,必须只对按钮状态的更改作出反应,如下所示:

代码语言:javascript
复制
bool spacePressed;

// in handling
bool spaceCurrentlyPressed = glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS;

if (!spacePressed && spaceCurrentlyPressed) { // wasn't before, is now
    show = !show;
}
spacePressed = spaceCurrentlyPressed;
票数 3
EN

Stack Overflow用户

发布于 2018-09-25 07:23:08

我再次推荐使用GLFWs 键回调,而不是自己获取每个帧的关键状态。这样,您将只收到一个按键和一个按键释放事件的每个键。

代码语言:javascript
复制
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if(action == GLFW_RELEASE) return; //only handle press events
    if(key == GLFW_KEY_SPACE) show = !show;
}

//in main or init
glfwSetKeyCallback(window, key_callback);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52492426

复制
相关文章

相似问题

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