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 |
//Verändert MoveMent - verhindert das Laufen in 2 Richtungen gleichzeitig if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && MoveMent != 1) MoveMent = 1; //Bewegt den Spieler je nach Wert in MoveMent if (MoveMent == 1) { psPlayer->move(-200 * frametime, 0); //ermöglicht bis jetzt das freie Laufen, muss ersetzt werden psPlayer->setTexture(*ptPlayerLeft); //Verändert die Textur je nach Richtung - vorher definiert } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BleenPaper« (27.08.2017, 19:59) aus folgendem Grund: unklar, verwirrend
Zitat
Du misst die vergangene Zeit und sobald diese einen bestimmten Wert überschreitet bewegst du deine Sprite um deine gewünschten 33 Pixel weiter.
Die Theorie habe ich soweit verstanden, aber wenn die Zeit noch nicht verstrichen ist, bewegt sich der Spieler ja nicht oder? Ich will vor allem, dass sich der Spieler zuende Bewegt (durch "MoveMent" bewegt sich der Spieler solange, bis eine Andere Richtung gewählt wird oder die Leertaste gedrückt wird)
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
current_time = 0.0 time_for_move = 0.8 movement = 33 update(delta_time) { if(should_move and current_time == 0) { position += movement } current_time += delta_time if(current_time >= time_for_move) { current_time = 0 } } |
Reicht sicher für den Anfang, ist aber mathematisch nur korrekt wenn delta_time konstant und time_for_move ein Vielfaches davon ist. Ansonsten dauert die Bewegung länger oder wird evtl. auch mal komplett vergessen.
Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13 current_time = 0.0 time_for_move = 0.8 movement = 33 update(delta_time) { if(should_move and current_time == 0) { position += movement } current_time += delta_time if(current_time >= time_for_move) { current_time = 0 } }
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
update(delta_time) { current_time += delta_time; while (current_time >= should_move) { current_time -= should_move; position += movement * direction; } } |
Administrator
Zitat
Wenn das soweit läuft kannst du dafür sorgen dass die Bewegung Schrittweise stattfindet, solange der Zähler nach oben gezählt wird.
@David Scherfgen Mhhh habe ich das falsch verstanden oder meinst du, dass dass ich den Sprite einfach um 33 verschieben soll?
Also der soll sich flüssig bewegen, aber automatisch nach 33 Pixeln stoppen und nicht erst z.B. bei 50 oder so.
Werbeanzeige