Quale libreria di GUI C ++ puoi suggerire? [chiuso]


26

Sto costruendo il mio motore di gioco in C ++ e attualmente sto decidendo quale interfaccia utente dovrei usare.

Dovrei usare una biblioteca? Devo crearne uno mio?


3
Non è chiaro cosa intendi: GUI in-game? O la GUI per gli strumenti? Ognuno è un requisito molto diverso ..
jacmoe,

1
Chi ha bisogno di strumenti quando hai un ENGINE (musica epica)
Ricket,

1
se hai solo bisogno di finestre di dialogo modali, le finestre di dialogo di piccoli file su sourceforge sono un singolo file multipiattaforma C C ++ da aggiungere al tuo progetto. no init, no loop principale
tinyfiledialogs

Risposte:


11

In effetti, i widget Qt possono essere integrati con OpenGL e OpenGL può essere facilmente integrato con Qt (QGLWidget). Naturalmente, i widget dall'aspetto nativo della piattaforma potrebbero non essere esattamente quello che stai cercando, ma non preoccuparti, ci sono modi per personalizzarli, crearne uno tuo o utilizzare qualcos'altro che si adatti meglio alle tue esigenze, come Qt Quick (che dovresti essere in grado di integrare anche).

Se sei interessato, non perdere questi link: i widget entrano nella terza dimensione: WolfenQt e accelera i tuoi widget con OpenGL


9

Non credo che dovresti scrivere il tuo, il compito di creare un motore di gioco è così grande da solo, se ci sono molte librerie con buone licenze che potresti usare e modificare a tuo piacimento.

Per un motore di gioco sceglierei una GUI in modalità Immediata. Maggiori informazioni qui: http://www.mollyrocket.com/forums/viewtopic.php?t=134

L'idea chiave è quella di disegnare il componente e controllare l'interazione allo stesso tempo:

if (button(id, position, size)) 
{
    button_was_pressed();
}

Per prima cosa, Unity utilizza un concetto simile.

Puoi trovare un'implementazione di NVIDIA, utilizzata nelle loro demo: http://code.google.com/p/nvidia-widgets/


4
La GUI IM è un concetto interessante, ma ho scoperto che ci sono alcuni problemi che compaiono quando si tenta di fare cose da gioco. Se vuoi che gli elementi del menu si animino in / out devi fare qualcosa come modificare la posizione individuale di tutti i widget o fare qualcosa come modificare la matrice di trasformazione della GUI per quella chiamata. Sarebbe più facile se tu avessi, ad esempio, un contenitore Window le cui azioni sono tradotte fino ai suoi figli e simili. Inoltre, per qualche motivo, la maggior parte delle implementazioni di IMGUI mancano di stati widget "disabilitati".
Tetrad,

@Tetrad: è molto semplice implementare gruppi di widget con layout automatici, posizioni relative o posizioni assolute (i widget di Nvidia lo fanno.) Ti consente di contenere facilmente widget all'interno di finestre o pannelli. Per lo stato "disabilitato", non riesco a capire perché questo non sarebbe banalmente implementato. Per "cose ​​da gioco", penso che i concetti di modalità immediata siano in realtà più adatti della modalità mantenuta, poiché i widget vengono aggiornati ad ogni frame.
Oskar N.

7

Personalmente, consiglierei CEGUI . È open source e abbastanza buono. Tuttavia, ciò che devi tenere a mente è che può essere molto, molto dettagliato se scrivi tutto a mano.

Ma, dal lato positivo, ha renderer sia per OpenGL che per DirectX. Sono riuscito a metterlo in cima al modello che uso normalmente, che scrive direttamente su una trama usando un VBO (è una specie di hacky).

Il gioco in questione era per un incarico di rete. Il compito era di avere un gioco in rete, con una lobby. Sapevo che l'atrio sarebbe stato un dolore al collo da fare, quindi ho scelto una biblioteca che faceva la maggior parte per me.


Questo è quello che sto attualmente usando. Trovo che abbia troppa dipendenza però. E ho avuto problemi a collegarlo al mio progetto (IIRC, la licenza diceva che posso solo collegarmi alla biblioteca)
MrValdez,

6
Ha una quantità ridicola di dipendenze. Ha gonfiato il mio minuscolo gioco demo a 50 MB!
knight666,

Che cosa? Penso che tu stia sbagliando :) Il peso delle DLL CEGUI nel mio gioco è inferiore a 3 MB. E a MrValdez: CEGUI è sotto licenza BSD ..
jacmoe,

Licenza MIT - scusa. CEGUI è sotto licenza MIT. :)
jacmoe,

5

Il problema con la maggior parte delle librerie GUI (Qt è probabilmente il C ++ più popolare che non è solo Windows) è che la maggior parte non si integra bene in un motore. Tradizionalmente in un'app GUI, la libreria GUI controlla il ciclo principale e si collegano solo i callback agli eventi. In un motore di gioco generalmente vuoi controllare il loop, quindi nella migliore delle ipotesi può essere complicato. Forse stai cercando qualcosa che gestirà solo i controlli di disegno e le finestre di dialogo e che in un contesto 3D lo passi? Quelli possono essere molto più difficili da trovare: - /


<pedantic> wxWidgets è anche multipiattaforma </pedantic> anche se prendo in considerazione l'integrazione del motore
zebrabox

3
Ho detto "più popolare", non "solo" :-P wx ha ancora meno supporto per lavorare con contesti 3D l'ultima volta che ho guardato.
coderanger

4

Credo fermamente nel scrivere il tuo ma poi di nuovo sono molto vecchio. Combattere con l'ennesima lib GUI per fare proprio quella cosa che vuoi tende a farmi impazzire, aggiunto al fatto che la maggior parte delle GUI di gioco sono abbastanza banali, quindi non devi andare tutto su MDI e design super OO in cui i pulsanti possono avere visualizzazioni di scorrimento che si evidenziano quando si passa sopra una barra delle applicazioni sul lato di una casella di controllo con i pollici trascinabili o qualcosa del genere. Colpi diversi per persone diverse credo.


ci sono situazioni in cui "scrivi il tuo" non è tanto fuori posto come si potrebbe pensare. Un gioco in cui l'interfaccia utente è importante, come i giochi di gestione o i giochi di ruolo con gestioni di oggetti complessi; l'interfaccia utente sarebbe una parte enorme dell'esperienza. joelonsoftware.com/articles/fog0000000007.html Se si tratta di una funzione di core business - fai da te, non importa quale
v.oddou

3

Un'opzione che potrebbe valere la pena investigare è l'utilizzo di WebKit per il rendering delle interfacce utente e l'esecuzione dell'intera interfaccia utente con CSS / HTML / Javascript.

Ecco un'implementazione open source (Berkelium) , ed ecco un'implementazione commerciale chiusa (Awesomium)


5
WebKit e i suoi parenti sono più orientati verso una frequenza di aggiornamento di una o due volte al secondo, potrebbe essere complicato fare un HUD per un gioco orientato all'azione in quel modo. Sarebbe comunque ottimo per menu o bit più lenti.
coderanger,

1
@coderanger: puoi scrivere interi giochi in JavaScript / HTML5. Ho pubblicato un gioco d'azione commerciale per il Chrome Web Store che funziona a 60 FPS su WebKit / Chrome.
Sean Middleditch,

3

Suggerirei IUP - Portable User Interface: http://www.tecgraf.puc-rio.br/iup/

L'ho usato solo con il linguaggio di programmazione Lua ma era molto facile da usare. È disponibile solo nei gusti C, LED e Lua ma puoi facilmente creare un involucro per questo.


Sembra interessante. Lo controllerò appena posso.
MrValdez,

3

Personalmente sto usando CEGUI nel mio progetto di gioco, ed è una soluzione abbastanza solida. Il problema è che a volte sembra quasi di fare una piccola modifica alterando tonnellate di file.

Non l'ho usato, ma libRocket è diventato completamente gratuito, rimuovendo tutti i costi di licenza e cosa no. La parte interessante di questa lib è che la scrivi nella sintassi html / css. http://librocket.com


2

Basta sollevare un suggerimento interessante, se si sviluppa il gioco per Windows, utilizzare l'API Win32. Basta usare i normali controlli di Windows (consiglierei di usare le librerie ATL / WTL) ma renderli disegnati dal proprietario.

Ho visto questa tecnica essere utilizzata nel primo gioco Unreal Tournament, mentre guardavo le intestazioni pubblicamente rilasciate (per i produttori di mod).

Uno dei vantaggi principali di questo è avere l'intera infrastruttura dell'interfaccia utente di Windows a disposizione, oltre a mantenere le preferenze dell'utente per la frequenza di ripetizione della tastiera, la sensibilità del mouse, la velocità del doppio clic e altre cose. Inoltre, se obbedisci alle regole, l'interfaccia sarà veloce e senza sfarfallio.

Gli svantaggi sono che dovrai comunque scrivere del codice per sottoclassare i controlli di Windows per farli disegnare dal proprietario in modo da poter applicare la tua grafica ed effetti a loro.

Basta buttarlo fuori come idea.


1
Credo che win32 / COM sia emulato su Vista e Win 7. Sconsigliato per prestazioni elevate ...
Stephen Furlani,

Immagino che dipenda da quanta interfaccia grafica utilizzerai nel gioco. Se è solo per il sistema di menu, a chi importa davvero, se lo usi ampiamente nella sezione cruciale della frequenza dei fotogrammi, ha bisogno di un po 'di lavoro e pensiero.
Daemin,

@StephenFurlani Win32 / COM non viene emulato su Vista e Windows 7, è nativo e alla massima velocità. Inoltre ATL / WTL non si basa su COM, ma DirectX lo fa.
Daemin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.