Hallo zusammen,
Bevor ich zur Frage komme erstmal ein paar Infos über die Struktur meines Programms:
Herzstück des Programms ist die Klasse Game.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| public class Game : GameLoop { public static uint width = 1520; public static uint height = 855;
public Game() : base(width, height, "Game", Color.Black) { }
public override void LoadContent() { }
public override void Initialise() { }
public override void Update(GameTime gameTime) { }
public override void Render(GameTime gameTime) { } } |
Die Klasse erbt von der abstrakten Klasse GameLoop in der sich die Hauptschleife, die 4 abstrakten Hauptmethoden (LoadContent, Initialise, Update, Render) und die EventHandler befinden.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| public abstract class GameLoop { public GameLoop(uint width, uint height, string title, Color clearColor) { }
public void Run() { }
public abstract void LoadContent(); public abstract void Initialise(); public abstract void Update(GameTime gameTime); public abstract void Render(GameTime gameTime); } |
Die Methode Run wird in der Main ausgeführt.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| class Program { static void Main(string[] args) { Game game = new Game(); game.Run(); } } |
Momentan ist es so, dass wenn ich ein Element updaten und rendern möchte, ich dafür jede einzelne Methode die ich dafür erstelle manuell in die Game.Update bzw. Game.Render Methoden hineinschreiben muss. Vorgestellt habe ich mir aber ein System, bei der es eine abstrakte Basisklasse GameBehavior gibt, die ebenso wie GameLoop über die 4 Grundmethoden, sowie Informationen über Position, Rotation, Größe und andere Eigenschaften verfügt. Zu diesem Zeitpunkt, selbst mit dem System, müsste ich auch diese Methoden alle einzeln in die Game Methoden integrieren.
Es stellt sich mir also die Frage ob es eine Möglichkeit gibt, eine Methode in allen Klassen aufzurufen, die von GameBehavior erben. Zum Beispiel in der Game.Update werden alle GameBevavior.Update Methoden ausgeführt.
LG Kasko
P.S. Als Zusatz vielleicht noch die Möglichkeit die execution order zu ändern.