我正在從頭開始設計一個簡單的GUI框架作爲一個項目,使用OpenGL和其他任何外部的東西,並且需要一些關於如何實現用戶交互的建議。簡單的OpenGL GUI框架用戶交互建議?
基本上,我有一個基類GUIItem
從中所有元素繼承。這給每個項目一些基本的變量,如位置,一個包含子元素的矢量以及一些鼠標移動和點擊的基本功能。
所有元素的設置都與上面相關的成員變量一樣。
我在努力的是如何正確實現用戶交互。在我的窗口管理器中,我將創建一個項目的新實例,如GUIButton
,並將其稱爲button1
。窗口管理器在點擊發生時會遍歷其元素列表和它們可能具有的任何子元素,根據其座標,高度和寬度計算對象周圍的矩形區域,然後運行與之關聯的任何「點擊」功能說的項目,就像更改textlabel1
的值。
首先,有沒有更好的方法來做這個計算?它可以用於矩形元素,但球形物體和其他物體會有可能被點擊的更大的錯誤區域。理想情況下,我會檢查像素,但我不知道如何實現。我聽說過但從來沒有使用GLUT(我的項目只允許使用它來處理鼠標/鍵盤交互)。在這種情況下,GLUT是否提供任何幫助?
我的主要問題是如何處理實際發生「點擊」事件時會發生的情況。例如,在GUIButton
的例子中,內置了一個「點擊」功能,所以就我所知,我必須做一些事情,比如讓它成爲虛擬功能,這意味着我創建的每個新按鈕都必須具有它自己的類只是爲了覆蓋「點擊」功能,而按鈕的每個實例都將是一個簡單地從GUIButton
繼承的獨特類的實例。這對我來說似乎很混亂,因爲我不知道我會在哪裏存儲所有這些類,並且似乎有很多額外的代碼。我會創建一個button1.cpp和button1.h文件嗎?
對此的任何建議真的會受到歡迎,因爲我是C++,OpenGL的新手,並且這是我第一次接觸到GUI編程,當現有的GUI框架是平常的時候,並沒有太多需要繼續選擇。
你的'GUIItem'有一些問題。並不是所有的GUI元素都應該能夠有孩子等等。 – deviantfan
關於您的球形物體:在父項中,只需使用矩形檢查,並且球形物體可以根據其形狀檢查更多自身。 ...不要遍歷所有像素。對象中必須有一些規律性,或者不是?根據形狀的不同,它需要一點點算術來檢查它是否被點擊,但仍然不會迭代像素。 – deviantfan
關於Button應該做什麼:你知道函數指針和函數嗎?沒有理由爲每個按鈕創建一個新課程。 – deviantfan