In den letzten Jahren gab es einige wirklich interessante Durchbrüche bei den Mainstream-UI-Toolkits. Die Benutzeroberflächen der Spiele haben sich ebenfalls weiterentwickelt, allerdings etwas langsamer. Dies liegt wahrscheinlich daran, dass die Entwicklung eines UI-Subsystems mit vollem Funktionsumfang für sich genommen ein bedeutendes Unterfangen darstellt und es schwierig ist, die Ressourceninvestition zu rechtfertigen.
Mein persönliches Lieblings-UI-System ist die Windows Presentation Foundation (WPF). Das Potenzial für die Benutzeroberflächendifferenzierung wird wirklich auf die nächste Ebene gehoben. Hier sind einige der interessanteren Funktionen:
Steuerelemente sind standardmäßig "ohne Aussehen". Die Logik und das visuelle Erscheinungsbild eines Steuerelements sind im Allgemeinen entkoppelt. Jedes Steuerelement wird mit einem Standardstil und einer Standardvorlage ausgeliefert, die das standardmäßige Erscheinungsbild beschreiben. Beispielsweise kann eine Schaltfläche als abgerundetes Rechteck mit einem äußeren Strich, einer Volltonfarbe oder einem Hintergrund mit Farbverlauf und einem Inhaltspräsentator (um die Beschriftung zu präsentieren) dargestellt werden. Entwickler (oder Designer) können benutzerdefinierte Stilvorlagen erstellen, die das Erscheinungsbild und (in gewissem Umfang) das Verhalten eines Steuerelements ändern. Stile können verwendet werden, um einfache Eigenschaften eines Steuerelements zu überschreiben, z. B. Vordergrund- / Hintergrundfarbe, Vorlage usw .; Templates verändern die eigentliche visuelle Struktur.
Stile und Vorlagen können "Trigger" enthalten. Trigger können auf bestimmte Ereignisse oder Eigenschaftswerte (oder Wertekombinationen) warten und Aspekte eines Stils oder einer Vorlage bedingt ändern. Beispielsweise hat eine Schaltflächenvorlage im Allgemeinen einen Auslöser für die Eigenschaft "IsMouseOver", um die Hintergrundfarbe zu ändern, wenn die Maus über die Schaltfläche bewegt wird.
Es gibt einige verschiedene "Ebenen" von UI-Elementen, angefangen von leichteren Elementen mit minimaler Funktionalität bis hin zu umfassenden schwergewichtigen Steuerelementen. Dies gibt Ihnen Flexibilität bei der Strukturierung Ihrer Benutzeroberfläche. Die einfachste der UI-Elementklassen UIElement
hat keinen Stil oder keine Vorlage und unterstützt nur das einfachste Eingabeereignis. Für einfache Elemente wie Statusanzeigen ist diese Funktionalität möglicherweise alles, was Sie benötigen. Wenn Sie eine umfangreichere Eingabehilfe benötigen, können Sie von FrameworkElement
(die erweitert wird UIElement
) ableiten . Herkömmliche Widgets sind im Allgemeinen von abgeleitet Control
, wodurch FrameworkElement
(unter anderem) die Unterstützung benutzerdefinierter Stile und Vorlagen erweitert und hinzugefügt wird.
WPF verwendet ein beibehaltenes, skalierbares und auflösungsunabhängiges Vektorgrafikmodell. Unter Windows werden WPF-Anwendungen mit Direct3D gerendert und komponiert.
Die Einführung von WPF beinhaltete eine neue deklarative Programmiersprache namens Xaml. Xaml, basierend auf XML, ist die bevorzugte Sprache für die Deklaration von "Szenen" auf der Benutzeroberfläche. Eigentlich ist es ziemlich clever und obwohl es auf den ersten Blick ähnlich aussieht, unterscheidet es sich grundlegend von existierenden Sprachen wie XUL (und viel mächtiger).
WPF verfügt über ein sehr fortschrittliches Textsubsystem. Es unterstützt die meisten, wenn nicht alle OpenType-Schriftfunktionen, bidirektionales ClearType-Antialiasing, Subpixel-Positionierung usw.
"Ok, großartig, wie ist das für die Spieleentwicklung relevant?"
Als WPF noch in der Entwicklung war (und als "Avalon" bekannt war), belegte ich einen Videospiel-Designkurs bei Georgia Tech. Mein letztes Projekt war ein rundenbasiertes Strategiespiel, und ich wollte eine sehr leistungsfähige Benutzeroberfläche. WPF / Avalon schien mir ein guter Weg zu sein, da es einen vollständigen Satz voll funktionsfähiger Steuerelemente enthielt und ich die Möglichkeit hatte, das Erscheinungsbild dieser Steuerelemente vollständig zu ändern. Das Ergebnis war ein Spiel mit einer schönen und gestochen scharfen Benutzeroberfläche mit der Funktionalität, die Sie normalerweise nur in vollwertigen Anwendungen sehen.
Das Problem bei der Verwendung von WPF für Spiele ist, dass es ziemlich schwer ist und in einer eigenen "Sandbox" gerendert wird. Damit meine ich, dass es keine unterstützte Möglichkeit gibt, WPF in einer Direct3D- oder OpenGL-Spielumgebung zu hosten. Es ist möglich, Direct3D-Inhalte in einer WPF-Anwendung zu hosten. Die Framerate der WPF-Anwendung ist jedoch in der Regel niedriger als gewünscht. Für einige Arten von Spielen, wie z. B. 2D-Strategiespiele (Screenshot meines aktuellen WPF-Spielprojekts), könnte es immer noch großartig funktionieren. Für alles andere nicht so sehr. Sie können jedoch einige der überzeugenderen Architekturkonzepte von WPF bei der Entwicklung Ihres eigenen UI-Frameworks anwenden.
Es gibt auch eine Open-Source-Implementierung von WPF in nicht verwaltetem C ++ / Direct3D mit der Bezeichnung "WPF / G (WPF for Games)" ( http://wpfg.codeplex.com/ ), die speziell für die Verwendung in Spielen unter Win32 entwickelt wurde und Windows Mobile. Die aktive Entwicklung scheint aufgehört zu haben, aber das letzte Mal, als ich es ausprobierte, war es eine ziemlich vollständige Implementierung. Das Textsubsystem war derjenige Bereich, der im Vergleich zur WPF-Implementierung von Microsoft wirklich fehlte, aber für Spiele ist dies weniger ein Problem. Ich würde mir vorstellen, dass die Integration von WPF / G in eine Direct3D-basierte Game-Engine relativ einfach ist. Wenn Sie diesen Weg gehen, erhalten Sie möglicherweise ein äußerst leistungsfähiges, auflösungsunabhängiges UI-Framework mit umfassender Unterstützung für die Anpassung der Benutzeroberfläche.
Um Ihnen eine Vorstellung davon zu geben, wie die Benutzeroberfläche eines WPF-basierten Spiels aussehen könnte, hier ein Screenshot von meinem Lieblingsprojekt: