Ich baue meine eigene Spiel-Engine in C ++ und entscheide derzeit, welche Benutzeroberfläche ich verwenden soll.
Soll ich eine Bibliothek benutzen? Soll ich mein eigenes machen?
Ich baue meine eigene Spiel-Engine in C ++ und entscheide derzeit, welche Benutzeroberfläche ich verwenden soll.
Soll ich eine Bibliothek benutzen? Soll ich mein eigenes machen?
Antworten:
Tatsächlich können Qt-Widgets in OpenGL und OpenGL einfach in Qt (QGLWidget) integriert werden. Natürlich sind die Widgets, die auf der Plattform nativ aussehen, möglicherweise nicht genau das, wonach Sie suchen, aber keine Sorge, es gibt Möglichkeiten, sie anzupassen, eigene Widgets zu erstellen oder etwas anderes zu verwenden, das Ihren Anforderungen besser entspricht, wie z. B. Qt Quick (which Sie sollten auch integrieren können).
Wenn Sie interessiert sind, sollten Sie diese Links nicht verpassen: Widgets betreten die dritte Dimension: WolfenQt und Beschleunigen Sie Ihre Widgets mit OpenGL
Ich denke nicht, dass Sie Ihre eigene schreiben sollten, die Aufgabe, eine Spiel-Engine zu erstellen, ist für sich allein so groß, wenn Sie viele, viele Bibliotheken mit guten Lizenzen haben, die Sie verwenden und nach Ihren Wünschen modifizieren können.
Für eine Game-Engine würde ich eine grafische Benutzeroberfläche im Sofortmodus wählen. Weitere Informationen finden Sie hier: http://www.mollyrocket.com/forums/viewtopic.php?t=134
Die Schlüsselidee ist, die Komponente zu zeichnen und gleichzeitig die Interaktion zu steuern:
if (button(id, position, size))
{
button_was_pressed();
}
Zum einen verwendet Unity ein ähnliches Konzept.
Eine Implementierung von NVIDIA finden Sie in den Demos: http://code.google.com/p/nvidia-widgets/
Persönlich würde ich CEGUI empfehlen . Es ist Open Source und ziemlich gut. Was Sie jedoch beachten müssen, ist, dass es sehr, sehr ausführlich sein kann, wenn Sie alles mit der Hand aufschreiben.
Positiv zu vermerken ist, dass es Renderer für OpenGL und DirectX gibt. Ich habe es geschafft, es auf das Template zu setzen, das ich normalerweise benutze, das direkt mit einem VBO in eine Textur schreibt (es ist irgendwie hacky).
Das fragliche Spiel war für eine Netzwerkaufgabe. Die Aufgabe bestand darin, ein vernetztes Spiel mit einer Lobby zu haben. Ich wusste, dass die Lobby schmerzhaft für mich sein würde, also suchte ich mir eine Bibliothek aus, die das meiste für mich erledigte.
Das Problem mit den meisten GUI-Bibliotheken (Qt ist wahrscheinlich die beliebteste C ++ - Bibliothek, die nicht nur für Windows geeignet ist) ist, dass sich die meisten nicht gut in eine Engine integrieren lassen. Traditionell in einer GUI-App steuert die GUI-Bibliothek die Hauptschleife, und Sie schließen einfach Rückrufe an Ereignisse an. In einer Game-Engine möchten Sie in der Regel die Schleife steuern, daher kann dies bestenfalls schwierig sein. Vielleicht suchen Sie etwas, das sich nur mit Zeichnungssteuerelementen und Dialogen befasst und in einen 3D-Kontext überführt, den Sie übergeben? Diese können viel schwieriger zu finden sein: - /
Ich glaube fest daran, deine eigenen zu schreiben, aber andererseits bin ich sehr oldskool. Das Kämpfen mit einer anderen GUI-Bibliothek, um genau das zu tun, was Sie wollen, macht mich verrückt. Hinzu kommt, dass die meisten Spiel-GUIs ziemlich trivial sind, sodass Sie nicht auf MDI und Super-OO-Design verzichten müssen Schaltflächen können Bildlaufansichten enthalten, die hervorgehoben werden, wenn Sie mit ziehbaren Daumen über eine Taskleiste an der Seite eines Kontrollkästchens fahren - oder so ähnlich. Ich denke, verschiedene Schläge für verschiedene Leute.
Eine Option, die es möglicherweise wert ist, untersucht zu werden, ist die Verwendung von WebKit zum Rendern Ihrer Benutzeroberflächen und die Ausführung Ihrer gesamten Benutzeroberfläche mit CSS / HTML / Javascript.
Hier ist eine Open-Source-Implementierung (Berkelium) , und hier ist eine kommerzielle Implementierung (Awesomium).
Ich würde IUP - Portable User Interface vorschlagen: http://www.tecgraf.puc-rio.br/iup/
Ich habe es nur mit der Programmiersprache Lua verwendet, aber es war sehr einfach zu bedienen. Es gibt es nur in den Geschmacksrichtungen C, LED und Lua, aber Sie können leicht eine Verpackung dafür erstellen.
Ich persönlich benutze CEGUI in meinem Spielprojekt und es ist eine ziemlich robuste Lösung. Das Problem ist, manchmal fühlt es sich fast so an, als würde man eine kleine Änderung an den sich verändernden Tonnen von Dateien vornehmen.
Ich habe es nicht benutzt, aber libRocket ist komplett kostenlos, ohne Lizenzgebühren und was nicht. Das Coole an dieser Bibliothek ist, dass Sie sie in HTML / CSS-Syntax schreiben. http://librocket.com
Verwenden Sie die Win32-API, wenn Sie das Spiel für Windows entwickeln möchten. Verwenden Sie einfach die normalen Windows-Steuerelemente (ich würde die Verwendung der ATL / WTL-Bibliotheken empfehlen), aber machen Sie sie Besitzer gezeichnet.
Ich habe gesehen, wie diese Technik im ersten Unreal Tournament-Spiel verwendet wurde, als ich die öffentlich veröffentlichten Header (für Mod-Hersteller) durchgesehen habe.
Einer der Hauptvorteile dabei ist, dass Sie die gesamte Windows-UI-Infrastruktur zur Verfügung haben und die Einstellungen des Benutzers für Tastaturwiederholrate, Mausempfindlichkeit, Doppelklickgeschwindigkeit und andere Dinge beibehalten. Auch wenn Sie die Regeln einhalten, ist die Benutzeroberfläche schnell und flackerfrei.
Die Nachteile sind, dass Sie noch Code schreiben müssen, um die Windows-Steuerelemente in Unterklassen zu unterteilen, damit sie vom Eigentümer gezeichnet werden, damit Sie Ihre eigenen Grafiken und Effekte auf sie anwenden können.
Einfach als Idee rausschmeißen.