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
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
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 |
class Unit { void setPosition(const Vec3& pos); void setState(const bool& active); private: Vec3 pos; bool active; ... class UnitController { void setPosition(const UnitHandle& handle,const Vec3& pos); void setState(const UnitHandle& handle,const bool& state); private: bool* m_Active; Vec3* m_Positions; } void update() { bool* active = m_Active; Vec3* pos = m_Positions; for ( int i = 0; i < m_Counter; ++i ) { if ( *active ) { *pos += m_Velcoity; } } ++pos; ++active; } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (12.04.2011, 13:20)
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
class UnitController { private: Vec3* pos; } UnitController::UnitController() { pos = new Vec3[4096]; } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Zitat
Alternativ könntest du z.B. auch einfach mit Unit* bzw Unit& arbeiten und den Typ Unit nach außen hin inkomplett lassen, d.h. auf der anderen Seite deiner Schnittstelle gibts nur das:
Zitat
Warum brauch ich den ganzen Kram, was hab ich davon und warum kann ich nicht einfach new Thingie() machen und Glücklich sein?
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void onNotifiy( Unit& u, ... ) { if( *_currentUnit != u ) { // ein direkter aufruf über u erfolgte - iwie darauf reagieren } } void update( Unit& u, ... ) { // currentunit setzen, damit onNotifiy "ignoriert" wird _currentUnit = &u; u.update( ... ); } |
Zitat
Alternativ könntest du z.B. auch einfach mit Unit* bzw Unit& arbeiten und den Typ Unit nach außen hin inkomplett lassen, d.h. auf der anderen Seite deiner Schnittstelle gibts nur das:
wie geht denn das? oder meintest du UnitHandle* UnitHandle&, wie beim ansatz von buggypixels?
Zitat
Warum brauch ich den ganzen Kram, was hab ich davon und warum kann ich nicht einfach new Thingie() machen und Glücklich sein?
ich finde halt, dass bei spielobjekte mit langlebiger lebensdauer schon irgendwo eine klasse hergehort, die das ganze irgendwie verwaltet und steuert, sonst endet das imo nur im chaos, wenn ich überall im code alles machen kann ohne jegliche einschränkungen.
Zitat
1) warum machst du immer arrays der größe 4096? einfach so? oder hat das irgendeinen besonderen sinn?
2) wozu bräuchte man bei deinem optimierten ansatz überhauüt noch unit und unithandle? alle attribute von unit scheinen ja in den unitcontroller zu kommen und somit kann man eh nur mehr über den controller etwas mit den einheiten anstellen? die unit klasse selbst wird dadurch doch dann gar nicht mehr benötigt?
3) was mir an dem ansatz gefällt ist, dass dies dann vmtl recht einfach für scripting (z.b. lua) dann zu übernehmen wäre? registrieren der einfachen unithandle klasse und registrieren der unitcontroller methoden und schon könnte man alles in scripten benutzen (kenne mich da noch nicht gut aus, ist also nur ne annahme)
4) wird dein ansatz in "besseren" spieleprojekten so verwendet? nur aus interesse.
Werbeanzeige