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?
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?
Réponses:
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
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/
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.
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: - /
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.
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)
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.
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
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.