Quelle bibliothèque GUI C ++ pouvez-vous suggérer? [fermé]

26

Je construis mon propre moteur de jeu en C ++ et je suis en train de décider quelle interface utilisateur je dois utiliser.

Dois-je utiliser une bibliothèque? Dois-je faire le mien?

MrValdez
la source
3
Ce n'est pas clair ce que vous voulez dire: GUI en jeu? Ou une interface graphique pour les outils? Chacun est une exigence très différente ..
jacmoe
1
Qui a besoin d'outils quand on a un MOTEUR (musique épique)
Ricket
1
si vous avez juste besoin de boîtes de dialogue modales, les minuscules boîtes de dialogue de fichiers sur sourceforge sont un seul fichier multiplateforme C C ++ à ajouter à votre projet. pas d'init, pas de boucle principale
tinyfiledialogs

Réponses:

11

En fait, les widgets Qt peuvent être intégrés à OpenGL et OpenGL peut être facilement intégré à Qt (QGLWidget). Bien sûr, les widgets d'apparence native de la plate-forme peuvent ne pas être exactement ce que vous recherchez, mais ne vous inquiétez pas, il existe des moyens de les personnaliser, de créer les vôtres ou d'utiliser quelque chose d'autre qui conviendrait mieux à vos besoins, tels que Qt Quick (qui vous devriez également pouvoir vous intégrer).

Si vous êtes intéressé, ne manquez pas ces liens: Les widgets entrent dans la troisième dimension: WolfenQt et accélérez vos widgets avec OpenGL

Palmik
la source
9

Je ne pense pas que vous devriez écrire le vôtre, la tâche de créer un moteur de jeu est si énorme en soi, si vous autour il y a beaucoup de bibliothèques avec de bonnes licences que vous pouvez utiliser et modifier à votre guise.

Pour un moteur de jeu, j'opterais pour une interface graphique en mode immédiat. Plus d'informations ici: http://www.mollyrocket.com/forums/viewtopic.php?t=134

L'idée clé est de dessiner le composant et de contrôler l'interaction en même temps:

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

D'une part, Unity utilise un concept similaire.

Vous pouvez trouver une implémentation par NVIDIA, utilisée dans leurs démos: http://code.google.com/p/nvidia-widgets/

NocturnDragon
la source
4
La GUI IM est un concept intéressant, mais j'ai trouvé qu'il y a des problèmes qui surgissent lorsque vous essayez de faire des choses de jeu. Si vous souhaitez que les éléments du menu s'animent vers l'intérieur ou vers l'extérieur, vous devez soit faire quelque chose comme modifier la position individuelle de tous les widgets, soit faire quelque chose comme modifier la matrice de transformation GUI pour cet appel. Ce serait plus facile si vous aviez, par exemple, un conteneur Window dont les actions sont traduites par ses enfants et autres. De plus, pour une raison quelconque, la plupart des implémentations IMGUI manquent d'états de widget "désactivés".
Tetrad
@Tetrad: Il est très facile d'implémenter des groupes de widgets avec des dispositions automatiques, des positions relatives ou des positions absolues (les widgets Nvidia le font.) Il vous permet de contenir très facilement des widgets à l'intérieur des fenêtres ou des panneaux. Pour l'état "désactivé", je ne vois pas pourquoi cela ne serait pas mis en œuvre de manière triviale. Pour les "choses gamey", je pense que les concepts de mode immédiat sont en fait plus adaptés que le mode retenu, puisque les widgets sont mis à jour à chaque image.
Oskar N.
7

Personnellement, je recommanderais CEGUI . C'est open source et assez bon. Cependant, ce que vous devez garder à l'esprit, c'est que cela peut être très, très verbeux si vous écrivez tout à la main.

Mais, du côté positif, il a des rendus pour OpenGL et DirectX. J'ai réussi à le mettre au-dessus du modèle que j'utilise normalement, qui écrit sur une texture directement à l'aide d'un VBO (c'est un peu hacky).

Le jeu en question était destiné à une mission de réseautage. La mission était d'avoir un jeu en réseau, avec un lobby. Je savais que le hall allait être pénible à faire, alors j'ai choisi une bibliothèque qui en faisait la plupart pour moi.

chevalier666
la source
C'est ce que j'utilise actuellement. Je trouve cependant qu'il a trop de dépendance. Et j'ai eu du mal à le lier à mon projet (IIRC, la licence a dit que je ne peux que lier à la bibliothèque)
MrValdez
6
Il a une quantité ridicule de dépendances. Il a gonflé mon petit jeu de démonstration à 50 Mo!
knight666
Quelle? Je pense que vous vous trompez :) Le poids des DLL CEGUI dans mon jeu est inférieur à 3 Mo. Et à MrValdez: CEGUI est sous licence BSD ..
jacmoe
Licence MIT - désolé. CEGUI est sous licence MIT. :)
jacmoe
5

Le problème avec la plupart des bibliothèques GUI (Qt est probablement la plus populaire C ++ qui n'est pas uniquement Windows) est que la plupart ne s'intègrent pas bien dans un moteur. Traditionnellement, dans une application GUI, la bibliothèque GUI contrôle la boucle principale et vous connectez simplement les rappels aux événements. Dans un moteur de jeu, vous voulez généralement contrôler la boucle, donc cela peut être difficile au mieux. Peut-être que vous cherchez quelque chose qui ne gérera que les commandes de dessin et les boîtes de dialogue et ainsi de suite dans un contexte 3D que vous lui transmettez? Celles-ci peuvent être beaucoup plus difficiles à trouver: - /

coderanger
la source
<pedantic> wxWidgets est également multiplateforme </pedantic> bien que je prenne
note de
3
J'ai dit "le plus populaire", pas "seulement" :-P wx a encore moins de support pour travailler avec des contextes 3D la dernière fois que j'ai regardé.
coderanger
4

Je crois fermement en l'écriture de la vôtre mais là encore je suis très oldskool. Se battre avec encore une autre bibliothèque d'interface graphique pour faire juste une chose que vous voulez a tendance à me rendre fou, ajouté au fait que la plupart des interfaces graphiques de jeu sont assez triviales, vous n'avez donc pas à vous consacrer entièrement à la conception MDI et super OO où les boutons peuvent avoir des vues de défilement qui se mettent en évidence lorsque vous survolez une barre des tâches sur le côté d'une case à cocher avec des pouces déplaçables - ou quelque chose comme ça. Différents traits pour différentes personnes, je suppose.

Kaj
la source
il y a des situations où «écrire le vôtre» n'est pas tellement déplacé qu'on pourrait le penser. Un jeu où l'interface utilisateur est importante, comme les jeux de gestion ou les RPG avec des gestions d'éléments complexes; l'interface utilisateur serait une énorme partie de l'expérience. joelonsoftware.com/articles/fog0000000007.html S'il s'agit d'une fonction métier principale - faites-le vous-même, quoi qu'il
arrive
3

Une option qui mérite d'être étudiée est d'utiliser WebKit pour rendre vos interfaces utilisateur et de faire toute votre interface utilisateur avec CSS / HTML / Javascript.

Voici une implémentation open source (Berkelium) , et voici une implémentation commerciale open source (Awesomium)

Tetrad
la source
5
WebKit et ses proches sont plus orientés vers un taux de rafraîchissement d'une ou deux fois par seconde, il pourrait être difficile de faire un HUD pour un jeu orienté vers l'action de cette façon. Ce serait génial pour les menus ou les bits plus lents.
coderanger
1
@coderanger: vous pouvez écrire des jeux entiers en JavaScript / HTML5. J'ai publié un jeu d'action commercial pour le Chrome Web Store qui fonctionne à 60 FPS très bien dans WebKit / Chrome.
Sean Middleditch
3

Je suggère IUP - Interface utilisateur portable: http://www.tecgraf.puc-rio.br/iup/

Je ne l'ai utilisé qu'avec le langage de programmation Lua mais c'était très facile à utiliser. Il ne vient que dans les saveurs C, LED et Lua, mais vous pouvez facilement faire un emballage pour cela.

Dalin Seivewright
la source
Semble intéressant. Je vais le vérifier dès que possible.
MrValdez
3

J'utilise personnellement CEGUI dans mon projet de jeu, et c'est une solution assez robuste. Le problème est que, parfois, on a presque l'impression de faire un tout petit changement pour modifier des tonnes de fichiers.

Je ne l'ai pas utilisé, mais libRocket est devenu totalement gratuit, supprimant tous les frais de licence et ce qui ne l'est pas. La partie intéressante de cette bibliothèque est que vous l'écrivez en syntaxe html / css. http://librocket.com

Aidan Knight
la source
2

Il suffit de faire une suggestion intéressante, si vous développez le jeu pour Windows, utilisez l'API Win32. Utilisez simplement les contrôles Windows normaux (je recommanderais d'utiliser les bibliothèques ATL / WTL) mais faites-les dessiner par le propriétaire.

J'ai vu cette technique utilisée dans le premier jeu Unreal Tournament, tout en parcourant les en-têtes publiquement publiés (pour les fabricants de mods).

L'un des principaux avantages de cette opération est de disposer de l'ensemble de l'infrastructure Windows UI, ainsi que de maintenir les préférences de l'utilisateur pour le taux de répétition du clavier, la sensibilité de la souris, la vitesse du double-clic et d'autres choses. De plus, si vous respectez les règles, l'interface sera rapide et sans scintillement.

Les inconvénients sont que vous devrez toujours écrire du code pour sous-classer les contrôles Windows pour les faire dessiner par le propriétaire afin que vous puissiez leur appliquer vos propres graphiques et effets.

Jeter ça comme une idée.

Daemin
la source
1
Je crois que win32 / COM est émulé sur Vista et Win 7. Non recommandé pour les hautes performances ...
Stephen Furlani
Je suppose que cela dépend de la quantité de GUI que vous utiliserez dans le jeu. Si c'est juste pour le système de menus, alors qui s'en soucie vraiment, si vous l'utilisez largement dans la section cruciale de la fréquence d'images, alors il faut du travail et de la réflexion.
Daemin
@StephenFurlani Win32 / COM n'est pas émulé sur Vista et Windows 7, il est natif et à pleine vitesse. De plus, ATL / WTL ne repose pas sur COM, mais DirectX le fait.
Daemin