Wie kann man eine Spielfigur im Code darstellen?

7

In einem früheren Spiel, das ich geschrieben habe, hatte ich eine Spielcharakterklasse. Diese Klasse verfolgte den Ort, die Geschwindigkeit und eine Reihe von Zuständen. Nur dass die Zustände sehr eng mit der Animation verbunden waren. Jeder Status verfügt über eine Liste von Schaltflächen, mit denen andere Status geändert werden können, und eine Animation, die zu diesem Status passt (Sie können auch Änderungen des Animationsstatus pro Frame vornehmen, wenn Sie beispielsweise einen ganz bestimmten zeitgesteuerten Schlag ausführen möchten oder etwas). Alle Kollisionsdaten für den Charakter wurden pro Animationsrahmen erstellt. Dies wurde für ein Kampfspiel gemacht, daher schien es zu der Zeit notwendig zu sein, die Animation und Kollision so eng mit dem Charakterzustand zu verknüpfen.

Aber der Programmierer in mir hat das Gefühl, dass dies Verantwortlichkeiten vermischt. Und jetzt mache ich eine Spiel-Engine, die ich ein bisschen allgemeiner machen möchte. Wie organisieren Sie normalerweise die Strukturen in Bezug auf die Charaktere, wie werden sie gezeichnet, wie interagieren sie miteinander und mit der Welt usw.?

Mir ist klar, dass dies eine vage Frage ist, die von der Art des Spiels abhängt, das ich machen möchte, aber ich denke, es wäre nützlich zu sehen, wie andere Leute damit umgehen.

(und wenn es darauf ankommt, ist dies alles für ein 2D-Spiel.)

Alex Ames
quelle

Antworten:

8

Wenn das Spielverhalten und die Animation eng miteinander verbunden sind - wie in Kampfspielen -, bedeutet dies nicht unbedingt, dass die Verantwortlichkeiten gemischt werden.

Wie in " Warum werden MVC & TDD nicht mehr in der Spielarchitektur eingesetzt?" , In einem Spiel, [Modell und Ansicht] ist viel näher zueinander. Die Spielwelt (Modell) besteht normalerweise aus einer Reihe von Entitäten, die in einem virtuellen Raum positioniert sind. Die Spielansicht ist auch eine Reihe von Entitäten, die in einem virtuellen Raum positioniert sind ... Das Endergebnis ist, dass die Grenze zwischen Modell und Ansicht in einem Spiel willkürlich und nicht hilfreich ist: Sie würden am Ende viel Status zwischen ihnen duplizieren .

Mit anderen Worten, wenn eine angebliche Abstraktion nicht dazu beiträgt, die Paketverantwortung zu verbessern und die Wartbarkeit zu verbessern, ist dies keine Abstraktion, sondern nur eine Aufteilung.

Wie ich eine Spiel-Engine erstellen würde, die jedes Modell unterstützt, das ich brauchte - ob es sich um eine eng miteinander verbundene Animation und Physik handelt oder um eine vollständige Trennung von Objektinteraktion und Renderer oder beides für verschiedene Dinge im selben Spiel -, werde ich Geben Sie die Standardantwort. Entwickeln Sie Ihre Hierarchie mit komponentenbasierten Entitäten .

Gemeinschaft
quelle