alinnert
Mitglied
Hallo zusammen,
ich frag das mal hier statt in Game-Development, weil es mir mehr um Autofac geht. Ich teste gerade Godot im Zusammenhang mit C#, was erstmal erschreckend smooth läuft. Ich bin jetzt dabei herauszufinden, wie ich ein potentielles Projekt strukturieren würde und versuch mich gerade an Autofac (DI/IoC Container), um Funktionen von Objekten in eigene Klassen auszulagern. Grundsätzlich funktioniert das, mir stellt sich nur eine Frage.
Normalerweise injiziert man seine Dependencies ja über Konstruktoren und deren Parameter. Das geht in meinem Fall nicht, weil diese in Godot keine Parameter annehmen dürfen, sonst kann das Spiel nicht kompiliert werden. Also weiche ich auf die Möglichkeit aus, auf meine Dependencies imperativ zuzugreifen:
Der Codeschnipsel oben liegt dann z. B. in irgendeiner Klasse, die auf eine Dependency zugreifen will (Hier die Player-Klasse). Das passiert aber in der
Jetzt meine Frage: Ist diese Methode (i. S. v. Herangehensweise) dafür ausgelegt oder gibt es da später schneller Performanceprobleme? Gibt es da ggf. bessere Möglichkeiten, auf seine Dependencies zuzugreifen? Oder soll ich doch lieber Godot-näher bleiben und auf DI-Container verzichten?
Mein Bewege-Ein-Bild-mit-Pfeiltasten-über-den-Bildschirm-Hello-World-Programm läuft durchgehend mit 120 FPS, aber das tut halt auch noch nix produktives.
ich frag das mal hier statt in Game-Development, weil es mir mehr um Autofac geht. Ich teste gerade Godot im Zusammenhang mit C#, was erstmal erschreckend smooth läuft. Ich bin jetzt dabei herauszufinden, wie ich ein potentielles Projekt strukturieren würde und versuch mich gerade an Autofac (DI/IoC Container), um Funktionen von Objekten in eigene Klassen auszulagern. Grundsätzlich funktioniert das, mir stellt sich nur eine Frage.
Normalerweise injiziert man seine Dependencies ja über Konstruktoren und deren Parameter. Das geht in meinem Fall nicht, weil diese in Godot keine Parameter annehmen dürfen, sonst kann das Spiel nicht kompiliert werden. Also weiche ich auf die Möglichkeit aus, auf meine Dependencies imperativ zuzugreifen:
C#:
// Lifetime Scope meines DI-Containers erzeugen
using(var scope = Main.Container.BeginLifetimeScope()) {
// Aus diesem Scope den `ControllerInputService` holen
var inputService = scope.Resolve<ControllerInputService>();
// Und dann Zeug damit machen
var movement = inputService.InputVector * delta * 5000;
MoveAndSlide(movement);
}
Main
ist die Hauptklasse. Diese existiert nur einmal für die komplette Lebensdauer des Spiels, bis es beendet wird. Darin speicher ich in Container
den Dependency Container.Der Codeschnipsel oben liegt dann z. B. in irgendeiner Klasse, die auf eine Dependency zugreifen will (Hier die Player-Klasse). Das passiert aber in der
_Process
-Methode. Heißt: je nach Bildschirm z. B. 60 mal, 120 mal oder öfter pro Sekunde. Das heißt auch, dass die Scopes jeweils super-kurzlebig sind.Jetzt meine Frage: Ist diese Methode (i. S. v. Herangehensweise) dafür ausgelegt oder gibt es da später schneller Performanceprobleme? Gibt es da ggf. bessere Möglichkeiten, auf seine Dependencies zuzugreifen? Oder soll ich doch lieber Godot-näher bleiben und auf DI-Container verzichten?
Mein Bewege-Ein-Bild-mit-Pfeiltasten-über-den-Bildschirm-Hello-World-Programm läuft durchgehend mit 120 FPS, aber das tut halt auch noch nix produktives.