Ich glaube, ich habe bereits die Idee des Entity-Systems, inspiriert von Adam Martin (t-machine), bekommen. Ich möchte dies für mein nächstes Projekt verwenden.
Ich kenne bereits die Grundlagen von Entitäten, Komponenten und Systemen. Mein Problem ist, wie man mit UI / HUD umgeht. Zum Beispiel ein Questfenster, ein Fertigkeitsfenster, ein Charakterinfofenster usw. Wie gehen Sie mit UI-Ereignissen um (z. B. Drücken einer Taste)? Dies sind Dinge, die nicht in jedem Frame verarbeitet werden müssen. Derzeit verwende ich MVC, um die Benutzeroberfläche zu codieren, aber ich glaube nicht, dass dies mit Entity System kompatibel ist.
Ich habe gelesen, dass Entity System in ein größeres OOP eingebettet ist. Ich weiß nicht, ob sich die Benutzeroberfläche außerhalb von ES befindet oder nicht. Wie gehe ich damit um?
quelle
Obwohl ich denke, dass eine Benutzeroberfläche für Entitäten / Komponenten funktionieren könnte, wäre es schwierig, dies zu tun. Außerdem ist es weit genug von den Komponenten und Systemen entfernt, die Sie für die Verarbeitung Ihrer Spielelemente benötigen. Es wäre im Grunde genommen nur ein anderes Element- / Komponentensystem in Ihrem Spiel. Ich kann mir nicht vorstellen, dass es eine große Überschneidung zwischen den beiden geben würde.
Entitätssysteme sind fantastisch und es kann verlockend sein, sie überall zu verwenden. Wenn Sie einen wirklich süßen Hammer bekommen, sind Sie schließlich versucht, all Ihre Probleme wie Nägel zu behandeln. Das EC-System ist jedoch nur ein weiteres Werkzeug in Ihrer Programmiertasche. Für die Probleme, mit denen es gelöst wird, funktioniert es sehr gut, aber Sie haben bessere Tools für Probleme wie die Benutzeroberfläche.
Die Vererbungsstruktur funktioniert sehr gut für GUIs. Nicht nur zum Erstellen der UI-Komponenten, sondern auch zum Layouten. Es ist wirklich schön, dass UI-Komponenten untergeordnete Komponenten anderer Komponenten sind, damit sie Eigenschaften wie Position, Skalierung und Deckkraft erben können. Wenn Sie versuchen würden, dies mit einem EC-System einzurichten, müssten Sie einige Regeln des EC-Systems brechen.
quelle
Sie können eine neue Schnittstellenfunktion erstellen, die immer dann aufgerufen wird, wenn UI / HUD gezeichnet wird, und benutzerdefinierten / skriptbasierten Komponenten die Implementierung dieser Funktion ermöglichen. Dies erfordert ein IMGUI-System (es gibt viele Tutorials in Google, dies ist nur die Originalpräsentation), um verwendet zu werden. Damit können Sie Fenster als Entitäten erstellen, in denen Sie Ihre eigene UI-Erstellungskomponente und eine Fensterrahmen-Rendererkomponente haben.
Da dies nicht bei jedem Frame verarbeitet wird, können Sie die gesamte Benutzeroberfläche in einem anderen Puffer rendern, der nur bei allen Arten von Eingabe- / Datenereignissen aktualisiert wird. Das heißt, jedes Mal, wenn ein Ereignis empfangen wird, ändert es eine Variable, um anzuzeigen, dass das Fenster im nächsten Frame neu gezeichnet werden muss. Wenn diese Variable wahr ist, wird sie auf falsch gesetzt und anschließend werden Benutzeroberflächen aufgerufen. Wenn Sie Animationen wünschen, ist es wichtig, dass Sie genau diese Reihenfolge der Vorgänge verwenden, damit die Benutzeroberfläche selbst ein Repaint für das nächste Bild auslösen kann.
quelle