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 |
class cSpriteAnimation { private: static sf::Clock testTimer; static sf::Time testTime; .... .... public: .... .... float getTime(); }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
float cSpriteAnimation::getTime() { testTime = testTimer.getElapsedTime(); std::cout << "time: " << testTime.asSeconds() << std::endl; return testTime.asSeconds(); }; |
Zitat
1>cSpriteAnimation.obj : error LNK2001: unresolved external symbol "private: static class sf::Time cSpriteAnimation::testTime" (?testTime@cSpriteAnimation@@0VTime@sf@@A)
1>cSpriteAnimation.obj : error LNK2001: unresolved external symbol "private: static class sf::Clock cSpriteAnimation::testTimer" (?testTimer@cSpriteAnimation@@0VClock@sf@@A)
C-/C++-Quelltext |
|
1 2 |
sf::Clock cSpriteAnimation::testTimer; sf::Time cSpriteAnimation::testTime; |
Du hast testTimer und testTime nur deklariert, aber nirgendwo definiert. Du musst irgendwo in einer .cpp Datei noch eine Definition schreiben:
C-/C++-Quelltext
1 2 sf::Clock cSpriteAnimation::testTimer; sf::Time cSpriteAnimation::testTime;
Aber wieso genau müssen die eigentlich static sein?
Aber wieso genau müssen die eigentlich static sein?
Warum muss ich die so noch mal definieren?
Muss man das generell bei statischen Elementen machen?
Aber wieso genau müssen die eigentlich static sein?
Müssen nicht, aber ist es nicht von der Performance her sinnvoller, wenn alle Instanzen auf einen Timer zugreifen, statt jede Instanz seinen eigenen Timer hat? Weil die Werte die der Timer zurückgibt ändern sich ja eigentlich nicht (?). So zumindest meine Überlegung - wie siehst du das?
Müssen nicht, aber ist es nicht von der Performance her sinnvoller, wenn alle Instanzen auf einen Timer zugreifen, statt jede Instanz seinen eigenen Timer hat? Weil die Werte die der Timer zurückgibt ändern sich ja eigentlich nicht (?). So zumindest meine Überlegung - wie siehst du das?
Btw: Ich persönlich würd die Klasse einfach SpriteAnimation nennen. Solche Präfixe für Klassennamen sind imo völlig sinnlos.
Eigentlich muss eine Animation ja keinen Timer zurück geben können. Eine Animation muss ja im Normalfall nur die Zeit seit der letzten Aktualisierung bekommen um sich selbst so zu berechnen. Anstatt dessen könnte auch einfach die aktuelle Zeit übergeben werden. So nun nimmt er die Zeit und kann daraus berechnen, ob er sein aktuelles Bild ändern soll oder nicht. Der Workflow sollte klar sein. Du musst also nur die Zeit irgendwie übergeben. Das kannst du nun in einer gesonderten Updatemethode machen, oder aber direkt in der Rendermethode.
Bei mir sieht es so aus, dass in meiner Hauptschleife mit der Clock Klasse das Timeobjekt berechnet wird. Dieses wird dann an meine Update und meine Render Methode weitergegeben. Die GameStates und alles weitere reichen dieses Timeobjekt so weit wie benötigt durch. Zum Beispiel auch zur Animation. Meine Animationsklasse besitzt nur die Rendermethode. Diese bekommt als Parameter dann unter anderem dieses Timeobjekt und kann mit dessen Daten dann arbeiten. Berechnet wird dieses Objekt aber nur ein mal in der Hauptschleife.
Werbeanzeige