C++ 在GLFW中单击而不拖动鼠标

C++ 在GLFW中单击而不拖动鼠标,c++,opengl,glfw,C++,Opengl,Glfw,我正在使用GLFW为我的3D游戏引擎制作一个GUI系统,我需要我的UI对象,比如我的按钮,当它们被单击一次时才执行它们的功能 程序通过检查光标的坐标来检查用户是否在按钮区域单击,但问题是,如果用户在按钮区域内单击并拖动,则按钮的功能会被重复调用。有没有办法阻止这一切 void ui_Button::click(void (*f)()) { if (mouseX >= pPosX && mouseX <= pWidth && mouseY >

我正在使用GLFW为我的3D游戏引擎制作一个GUI系统,我需要我的UI对象,比如我的按钮,当它们被单击一次时才执行它们的功能

程序通过检查光标的坐标来检查用户是否在按钮区域单击,但问题是,如果用户在按钮区域内单击并拖动,则按钮的功能会被重复调用。有没有办法阻止这一切

void ui_Button::click(void (*f)())
{
    if (mouseX >= pPosX && mouseX <= pWidth && mouseY >= pPosY && mouseY <= pHeight && glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT))
    {
        (*f)();
    }
}
void ui_按钮::单击(void(*f)()
{

如果(mouseX>=ppox&&mouseX=pPosY&&mouseY,正确的方法是安装一个带有
glfwSetMouseButtonCallback
的鼠标侦听器,该侦听器保存鼠标按键感兴趣的内容列表,并通知他们(基本上类似于观察者模式).

将布尔值
单击时设置为true,释放时设置为false,并且仅在按钮函数为false时调用按钮函数。@AdamS这将导致在按住lmb的同时将鼠标拖动到按钮上时按下按钮。我忘了提到该代码是在循环中调用的,因此它将导致按钮函数始终保持不变run@Cubic不这不是一个按钮特定的布尔值,而是一个全局鼠标布尔值。但是回调解决方案是更好的。谢谢。这非常有用