2 Stimmen

Entwurf einer Spiel-Engine mit dynamischen Eigenschaften

Ich entwickle derzeit eine C# .net XNA Spiel-Engine.

Ich hatte eine Frage zur Konstruktion des Motors. Zunächst einmal würde ich gerne meine eigene Skriptsprache in die Engine einbauen. Um dies zu tun, dachte ich, ich müsste in der Lage sein, auf alle Eigenschaften aller Objekte im Spiel zuzugreifen, oder nur auf die, die ich ändern möchte.

Als Erstes habe ich versucht, den Zugriff über Strings zu ermöglichen. Zu diesem Zweck habe ich jedes "Entity", also etwas, das auf den Bildschirm gezeichnet werden kann, mit einem Wörterbuch aller Eigenschaften versehen. Das Hinzufügen der Eigenschaften wurde manuell in der Entity-Klasse vorgenommen. Inzwischen habe ich gelesen, dass es die GC verlangsamen kann, wenn man viele Wörterbücher hat, aber nicht sehr viele Dinge in ihnen. Ich glaube, das ist es, was in meinem Spiel im Moment passiert. Ich kann nur bis zu etwa 1000 Entitäten mit grundlegenden Eigenschaften, d.h. Farbe, Position, Textur, bevor es beginnt, fps zu verlieren.

Ich frage mich, ob es eine andere Möglichkeit gibt, in der Lage sein, ein Objekt Eigenschaften dynamisch on the fly andere als was ich tue oder mit Reflexion zugreifen, denn das ist noch langsamer als die Wörterbücher. Oder sollte ich einfach das gesamte Design überdenken?

2voto

Jani Hartikainen Punkte 41573

Ich habe etwas Ähnliches gemacht, allerdings mit Java und unter Verwendung von JavaScript als Skriptsprache.

Die Art und Weise, wie ich es funktionierte, bestand im Wesentlichen darin, die Objekte direkt der Skriptsprache zu übergeben. Sie sollten in der Lage sein, die Methoden auf die Klassen direkt aus der Skriptsprache aufrufen, so sehe ich nicht wirklich den Grund, einige seltsame dynamische Eigenschaft Hack-Sache zu implementieren.

2voto

DrDeth Punkte 339

Sie könnten sich mit der Laufzeitkompilierung befassen und einfach C# zum Schreiben von Skripten verwenden. Wenn Sie eine Standardschnittstelle für Ihre Skripte definieren, können Sie sie lesen, kompilieren und ausführen, wenn Ihre Engine läuft, ähnlich wie bei este .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X