2012-06-04 57 views
6

作爲一種愛好,我一直致力於改造舊的視頻遊戲,並且我希望儘可能避免重新發明車輪。該遊戲基於GUI很強大,但是GUI需要根據外觀來定製,並且還需要在3D遊戲屏幕上使用3D OpenGL渲染。用於2D/3D遊戲開發的Qt庫

爲了給你一個想法,這裏是從最初的原型截圖:

enter image description here

有使用大量的動畫和3D也是,但GUI控件的行爲大致相同的標準桌面應用。到目前爲止,我一直在使用我自己的GUI庫(它不健壯或不完整,而且我遇到了一些問題)。

我一直在考慮遷移到Qt,因爲它的聲望和令人印象深刻的功能,以及Qt網站上的一些漂亮的截圖。但是我之前從未使用過Qt,所以我沒有真正瞭解它的功能,或者需要什麼樣的時間來投資才能學習它。 (注意我使用過FLTK)。

我的問題是:在這種情況下使用Qt是否可行?

UPDATE:在嘲笑Qt中的一些遊戲畫面後,我決定不使用它。雖然它支持許多我需要的功能(特別是通過樣式表),但我需要支持基於位圖的自定義預渲染字體(我無法轉換/替換它們)。而且我不能繼承QFont,也不能在未來的Qt發佈中重新實現它。也就是說,我對Qt印象非常深刻(包括易用性和良好的文檔)。我將借用我的引擎的一些功能。感謝所有提供意見的人。

+1

簡單的答案是肯定的,在這種情況下使用Qt可能/實用。爲了得到更有效的答案,你可以考慮問一個更詳細的問題,或者列出你對Qt可能有的一些疑問。 – Brady

+1

看看'QGraphicsView' /'QGraphicsScene'體系結構,它應該接近你所追求的。 – cmannett85

+0

謝謝你們。那麼我從來沒有使用過Qt,所以我主要關心的是花費大量的時間來學習它,發現它無法做到我所需要的。 QGraphicsView類似乎支持我需要的一些功能。我需要的另一個示例特徵是非矩形按鈕,例如,與傾斜的邊緣(我現有的代碼使用圖像掩碼來接受/拒絕鼠標事件)。 Qt會輕鬆實現這樣的壯舉嗎? – QuasarDonkey

回答

4

基於截圖很難知道遊戲需要做的所有事情;不過,我會在這裏迴應其他海報的情緒,並提供一些供您參考的途徑。

一,你可能想考慮QtQuick的GraphicsView框架,但這真的取決於你需要做什麼。我只是想把它作爲替代品扔掉,所以你不要錯過它。這tutorial使用QtQuick放在一起真正光滑的連接四種風格的遊戲。這可能比你想要的更簡單,但是再一次,也許不是,這取決於你需要做什麼。其次,在爲所有按鈕編寫自定義繪畫事件之前,我會考慮使用Qt Style Sheets並在CSS中使用類似語法的樣式來設置窗口小部件。這將使您能夠非常快速地以非常靈活的方式改變GUI的外觀和風格。根據你的截圖,我認爲你可以比子類化和滾動你自己的設置快得多你想要的樣式表。但再一次,基於一個截圖很難知道。Here是僅使用Qt樣式表實現的深色和橙色GUI的示例。 QPushButton的樣式表的border-radius屬性會給你四捨五入的按鈕(ref)。

+0

是的,我偶然發現了樣式表。 'border-image'屬性似乎提供了我需要的大部分主題功能,因爲我主要使用預渲染的圖像處理所有內容(希望它也可以製作動畫?)。這將是特別有用的,因爲遊戲支持多個可玩的帝國,每個帝國都有不同的外觀。關於圓形按鈕,圖像已經是圓形的,我只想限制鼠標點擊到該區域。 QWidget :: setMask()將做到這一點。我會檢查出QtQuick。 – QuasarDonkey

+0

是的,但與樣式表似乎你不會*需要*您的按鈕的圖像,我說得對嗎?您可以編寫樣式,然後對UI進行更改/修改(至少在按鈕方面)更容易。然後再次我不知道你的工作流程,所以儘可能適合你最好的。 如果你想知道如何使用動畫屬性(一個CSS),我不認爲你會用Qt樣式表。據我所知,你將不得不使用圖形視圖框架或動畫框架(和/或兩者的一些組合)來獲得良好的動畫。祝你好運! –

1

上面已經給出了一個簡單的答案,但是要拋出一些更多的想法:是的,這很可能,您可能不需要太多地與Qt作鬥爭。在大多數情況下,推薦大量定製小部件的建議是子類,並自己實施繪製事件。

然後,您可以使用基本繪圖基元的負載來獲取元素的基本形狀並從此處展開。這裏實際上有幾個問題,關於如何做到這一點真的很好的資源。

+0

是的,我在想這個。根據我在API中看到的,將小部件子類化以獲得我想要的確切外觀和感覺會非常容易,例如,通過重寫QButton :: drawButton()等。 – QuasarDonkey