Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// Component? POD? struct TimerData { int start; int end; }; // extends ? struct SpecTimer { TimerData base; } // Compoent ? Entity ? struct Actor { TimerData timer1; // für balbal .... TimerData timer2; // für ... } Entity player; player.assign(Actor()); player.assign(SpezTimer()); player.assign(PlayerRPG()); |
Zum Beispiel gehören für mich zur Render-Komponente keine Animationsdaten. Man kann auch etwas animiertes Rendern, ohne die Animation zu aktualiseren. Der Anzeigename gehört für mich eher zum Avatar
Aber mir gefällt dein Vorgehen. Selten lese ich jemanden der sich so gründlich Gedanken um Architektur macht, da muss ich dich sehr loben!
Also ich würde das ganze noch in Map und RPG Components auf teilen.
Und so paar Grunddaten wie Name.
Die Systeme können sich dann ja die notwendigen Components raus nehmen.
Map(Position, Sicht) + Graohics(Sprite, Anmation) fürs Rendern.
Map + Body(Kollision, Matrix) für PhysiksSystem.
Zudem kommt noch das später die System sich mit Events etwas untereinandern austauschen können.
z.B. Trigggert das (Map)PhysikSystem dem AnimationsSystem der Spieler wurde entdeckt und lässt etwas Aufblinken oder dem KI/BattleSystem der Gegner ist alamiert.
PhysikSystem kann dem BattleSystem triggern der Spieler wurde getroffen
Mithilfe der Events kann man Infos wie EntityIDs mit senden um z.b. Angreifer zu bestimmen fürs Damage berechnen.
Wenn die Systeme und die Entitys sich in ein Manager befinden das sollte das funktionieren.
RenderComponent, der sowohl Animationen als auch statische Bilder anzeigen kann.
PhysicComponent der auf Box2D zugreift und Rect, Circle oder Polygone als BoundingBox verwenden kann
LightComponent für Box2dLights, sämtliche Lichter
InteractionComponent für klickbare Objekte, mit Bereichstrigger und anbinung an das Dialogsystem
ControllableComponent für Spielercharakter
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Glocke« (16.01.2015, 11:23)
Zitat
Aber vielleicht gibt es noch einen Weg, einen dritten, unabhängig von den offensichtlichen
Community-Fossil
C-/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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
class Position{ public: float x, y; // ... } class Mesh{ // ... } class Texture{ // ... } // Basisklasse für alle Entites class Entity{} class WorldEntity:public Entity{ public: // Komponenten Position position; Mesh mesh; Texture texture; // ... } // Basisklasse für alle Systeme class System{ private: std::vector<Entity*> entities; public: // Methoden zum hinzufügen, entfernen usw. von Entities // evt. mehr Logik, die sich auf das System bezieht // und natürlich unsere loop Methode, die überschrieben werden muss: virtual void update(const float deltaTime) = 0; } class WorldEntityCollisionSystem{ // k.A. ist nur ein Beispiel... public: void update(const float deltaTime){ // for und was sonst noch so nötig ist } } |
Werbeanzeige