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 |
class Entity { public: void transform(Transform*); // Legt die Transformationskomponente fest. auto transform() -> Transform*; // Fragt die Transformationskomponente ab. // ... private: // Die Komponenten. Transform *m_transform = nullptr; Sprite *m_sprite = nullptr; Tilemap *m_tilemap = nullptr; // ... }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
class EntityComponent { public: void owner(Entity*); // Legt den Besitzer fest. auto owner() -> Entity*; // Fragt den Besitzer ab. private: Entity *m_owner = nullptr; }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
template <class TComponent> auto Entity::findComponent() -> TComponent* { for (auto component : m_components) { auto derivedComponent = dynamic_cast<TComponent*>(component); if (derivedComponent != nullptr) { return derivedComponent; } } return nullptr; } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Zitat von »BlueCobold«
Ich finde auch Component-based-Systeme nur dann sinnvoll, wenn vorher nicht klar ist, was damit mal angestellt werden soll - siehe Unity. Bei einem Spiel, wo das aber ja schon durch das Game-Design fest definiert ist, finde ich einen "optimierteren" oder direkten Umsetzungsweg deutlich angemessener.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 |
struct Position : public Copmonent { float x,y,z; } |
C-/C++-Quelltext |
|
1 2 3 4 |
struct MotionData { Entity entity; Position* position; velocity* velocity; |
C-/C++-Quelltext |
|
1 2 3 4 |
Entity e = engine.create(); engine.assign(e,new Position(200,200)); engine.assign(e,new Velocity(200,0)); engine.add(e); |
Zitat von »buggypixels«
Aber Vorsicht: Es ist nicht jedermanns Geschmack und es gibt viele Meinungen dazu. Ob es etwas für dich ist, mußt du selber entscheiden. Der Einstieg ist etwas komplex, weil es auch eine andere Denke ist.
Werbeanzeige