如果在加载场景时移动鼠标光标不会消失 - OpenGL 和 GLFW

Posted

技术标签:

【中文标题】如果在加载场景时移动鼠标光标不会消失 - OpenGL 和 GLFW【英文标题】:Mouse cursor does not disappear if moving while loading scene - OpenGL and GLFW 【发布时间】:2018-04-10 12:44:02 【问题描述】:

我正在使用 OpenGL 4.1、Xcode 和 GLFW 设计一个玩具游戏引擎。我注意到,如果我在加载场景时移动鼠标,鼠标光标不会消失,尽管调用

glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);

游戏运行良好,但光标仍然可见。

我尝试在场景加载后、进入游戏循环之前调用 glfwSetInputMode(),但没有帮助。此外,启用光标并再次禁用它不会影响它在屏幕上的存在。我该如何解决这个问题?谢谢。

【问题讨论】:

【参考方案1】:

光标不是 OpenGL 功能,这是底层 OS 图形系统功能。 GLFW 库为您提供了跨平台的系统 API 包装器。

根据 GLWF API:

GLFW_CURSOR_HIDDEN 使光标在窗口的客户区上方时不可见,但不限制光标离开。

什么时候

GLFW_CURSOR_DISABLED 隐藏并抓取光标,提供虚拟且无限制的光标移动。这对于实现例如 3D 相机控件很有用。

所以GLFW_CURSOR_DISABLED 在全屏模式下很有用,而GLFW_CURSOR_HIDDEN 在窗口模式下很有用。

【讨论】:

也许我不清楚。游戏完美运行。但是,当且仅当我在加载时移动鼠标,光标不会消失。当然,我尝试了您的建议并在回答之前仔细检查了 GLFW 官方指南。 我想在你加载场景的时候,OpenGL上下文还没有初始化,请检查一下。 你好维克多。它被初始化。 if(!glfwInit()) 是我代码中的第一条指令。不,我不需要 GLFW_CURSOR_HIDDEN 选项,而是 GLFW_CURSOR_DISABLED 选项,只要我在应用程序运行时不移动鼠标,它就可以完美运行。如果我使用 GLFW_CURSOR_HIDDEN,我需要将鼠标悬停在窗口上才能捕获它,而我想要的是在我运行应用程序时鼠标位于光标所在的任何位置,这就是 GLFW_CURSOR_DISABLED 发生的情况。所以,我认为,你的结论是不正确的。 window = glfwCreateWindow(800, 600, "mywindow", NULL, NULL); glfwSetInputMode(窗口,GLFW_CURSOR,GLFW_CURSOR_DISABLED); /*加载场景*/ glfwShowWindow(window); ??? 是的,一切都在那里,早在捕获鼠标之前。实际上,我没有 glfwShowWindow()...【参考方案2】:

我也遇到了同样的问题,但我设法找到了适合我的解决方案。经过一番摸索,我发现只要确保在禁用光标之前至少调用一次glfwPollEvents() 就可以了。希望这对某人有所帮助。

【讨论】:

以上是关于如果在加载场景时移动鼠标光标不会消失 - OpenGL 和 GLFW的主要内容,如果未能解决你的问题,请参考以下文章

鼠标光标在单位中是不可见的

鼠标移动上的CSS js重绘而不消失

如何让 div 在悬停时消失而不会在鼠标移动时闪烁?

拖放时更改鼠标光标

苹果笔记本丢失鼠标指针

AS3:mouseX 在鼠标移动之前不会更新