【发布时间】:2014-04-24 18:36:36
【问题描述】:
我正在使用 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)();
}
}
我正在考虑但不知道该怎么做的另一个选项是,当在按钮或 UI 对象上单击并释放鼠标时,让按钮的功能起作用。
【问题讨论】:
-
将布尔值
clicked设置为单击时为真,释放时为假,只有为假时才调用按钮函数。 -
@AdamS 这将导致在按住 lmb 的同时将鼠标拖动到按钮上时按下按钮。
-
我忘了提到代码是在循环中调用的,所以它会导致按钮功能始终运行
-
@Cubic 不是特定于按钮的布尔值,而是全局鼠标布尔值。但无论如何,回调解决方案更好。