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
Es gibt auch noch Windows-Timer, aber das sinnvollste wäre, jede Sekunde eine Variable hochzuzählen und nach 3, bzw. 5 Sekunden die passende Aktion auszuführen.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
sf::Clock Clock; unsigned int last_time; // schleife last_time = Clock.GetElapsedTime(); if ((last_time + 5000) <= Clock.GetElapsedTime()) { cout << "Zeit ist abgelaufen"; Clock.Reset(); } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Architekt« (05.09.2010, 20:53)
Ein Blick in die SFML Dokumentation verrät: Die Funktion liefert die vergangene Zeit seit dem letzten Aufruf von Reset() bzw. dem initialisieren des Objekts in Sekunden(!), das heißt der Rückgabewert ist ein float.
Gruß
SaRu_
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
sf::Clock Clock; float last_time; // schleife last_time = Clock.GetElapsedTime(); if ((last_time + 5) <= Clock.GetElapsedTime()) { cout << "Zeit ist abgelaufen"; Clock.Reset(); } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Architekt« (05.09.2010, 23:02)
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
void CGame::LoadLevel(int level) { switch (level) { case(1): { levelsprite[0].SetColor(sf::Color(0,255,255)); levelsprite[0].SetScale(100.f, 10.f); levelsprite[0].SetPosition(200.f, 200.f); showlevel[0] = true; levelsprite[1].SetColor(sf::Color(0, 255, 255)); levelsprite[1].SetScale(10.f, 200.f); levelsprite[1].SetPosition(200.f, 210.f); showlevel[1] = true; } break; case(2): { levelsprite[0].SetColor(sf::Color(0,255,255)); levelsprite[0].SetScale(10.f, 100.f); levelsprite[0].SetPosition(300.f, 300.f); showlevel[1] = false; //2. bool des arrays showlevel auf false } break; } } void CGame::Move() { spielermoveup = true; spielermovedown = true; spielermoveleft = true; spielermoveright = true; for (levelspritenr = 0; levelspritenr < 8; levelspritenr ++) { if (showlevel[levelspritenr] == true) // nur prüfen, wenn das sprite auch dargestellt wird. bei dem sprite, welches nur die position geändert hat, funktioniert es. das, das garnicht mehr da ist, ist trotzdem im weg { //Collisionsabfrage des levelsprites; jeweils levelsprite[levelspritenr] als sprite; wenn Collision: spielermoveup/down/left/right = false } if (spielermoveup == true) spieler.Move(...) } void CGame::Run() { while (Fenster->IsOpened()) { ChangeLevel(); Eventabfrage(); Move(); Render(); } } void CGame::ChangeLevel() { if(Collision (spieler, ziel)) levelcounter1 ++; if (levelcounter1 > levelcounter2) { levelcounter2 = levelcounter1; LoadLevel(levelcounter2); } } |
Werbeanzeige