2014-04-24 91 views
0

我正在使用GLFW爲我的3D遊戲引擎製作一個GUI系統,而且我需要像我的按鈕這樣的UI對象僅在單擊它們時執行其功能。單擊不用鼠標拖動在GLFW

該程序檢查用戶是否通過檢查光標的座標點擊按鈕的區域,但問題是,如果用戶在按鈕區域內單擊並拖動,則重複調用該按鈕的功能。有沒有辦法阻止它?

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

另一種選擇,我想,但不知道怎麼做是有點擊和按鈕或UI對象上釋放鼠標時按鈕的功能工作。

+0

單擊布爾'clicked'設置爲true,釋放時爲false,並且只有當它爲false時才調用按鈕函數。 – Appleshell

+0

@AdamS在按住lmb的同時將鼠標拖過按鈕時,會導致該按鈕被按下。 – Cubic

+0

我忘了提及在循環中調用代碼,所以它會導致按鈕功能始終運行 – Polar1ty

回答

0

這樣做的正確方法是安裝一個帶有glfwSetMouseButtonCallback的鼠標監聽器,該監聽器保存對鼠標按鍵感興趣的事情列表,並通知它們(基本上像觀察者模式一樣)。

+0

謝謝。這非常有幫助 – Polar1ty