Ich arbeite an einem 2D-Topdown-Spiel in SFML 2 und muss eine elegante Methode finden, mit der alles funktioniert und zusammenpasst.
Lassen Sie mich das erklären. Ich habe eine Reihe von Klassen, die von einer abstrakten Basis erben, die eine Zeichenmethode und eine Aktualisierungsmethode für alle Klassen bereitstellt.
In der Spieleschleife rufe ich update auf und greife dann auf jede Klasse zurück. Ich stelle mir vor, dass dies ein ziemlich üblicher Ansatz ist. Ich habe Klassen für Kacheln, Kollisionen, den Spieler und einen Ressourcenmanager, der alle Kacheln / Bilder / Texturen enthält. Aufgrund der Art und Weise, wie die Eingabe in SFML funktioniert, habe ich mich dafür entschieden, jede Klassenhandle-Eingabe (falls erforderlich) in den Aktualisierungsaufruf aufzunehmen.
Bisher habe ich Abhängigkeiten nach Bedarf übergeben, z. B. in der Spielerklasse, wenn eine Bewegungstaste gedrückt wurde. Ich rufe eine Methode für die Kollisionsklasse auf, um zu überprüfen, ob die Position, zu der sich der Spieler bewegen möchte, eine Kollision ist. und bewege den Spieler nur, wenn es keine Kollision gibt.
Dies funktioniert größtenteils gut, aber ich glaube, es kann besser gemacht werden, ich bin mir nur nicht sicher, wie.
Ich muss jetzt komplexere Dinge implementieren, z. B .: Ein Spieler kann auf ein Objekt auf dem Boden zugehen, eine Taste drücken, um es aufzunehmen / zu plündern, und es wird dann im Inventar angezeigt. Dies bedeutet, dass ein paar Dinge passieren müssen:
- Überprüfen Sie, ob sich der Spieler auf Tastendruck in Reichweite eines plünderbaren Gegenstands befindet, andernfalls fahren Sie nicht fort.
- Finde den Gegenstand.
- Aktualisieren Sie die Sprite-Textur des Elements von der Standardtextur in eine "geplünderte" Textur.
- Aktualisieren Sie die Kollision für das Objekt: Möglicherweise hat sich die Form geändert oder es wurde vollständig entfernt.
- Das Inventar muss mit dem hinzugefügten Artikel aktualisiert werden.
Wie kann ich alles kommunizieren lassen? Mit meinem derzeitigen System werde ich am Ende meine Klassen verlassen und überall Methodenaufrufe aneinander richten. Ich könnte alle Klassen in einem großen Manager zusammenfassen und jedem einen Verweis auf die Eltern-Manager-Klasse geben, aber das scheint nur geringfügig besser zu sein.
Jede Hilfe / Beratung wäre sehr dankbar! Wenn etwas unklar ist, möchte ich gerne etwas näher darauf eingehen.