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
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SlinDev« (29.10.2015, 17:54)
Ah, danke. Jetzt bekomme ich wenigstens keine Fehler vom Kompiler...Probier mal dT.asSeconds()
Ich hatte aus einem Buch eine Funktion gelernt, die das multiplizieren mit der deltaTime überflüssig macht. Wenn du den Code sehen willst, dann "sag" bescheid.(Wie hast dT denn in deinem alten Code verwendet!?)
Ich hatte aus einem Buch eine Funktion gelernt, die das multiplizieren mit der deltaTime überflüssig macht. Wenn du den Code sehen willst, dann "sag" bescheid.
Ich hatte aus einem Buch eine Funktion gelernt, die das multiplizieren mit der deltaTime überflüssig macht. Wenn du den Code sehen willst, dann "sag" bescheid.
Dann zeig mal Vermutlich könntest du das dann auch wieder verwenden und auf dT verzichten.
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 |
// ... /* sf::Text mStatisticsText; sf::Time mStatisticsUpdateTime; std::size_t mStatisticsNumFrame; */ void Game::UpdateStatistics(sf::Time elapsedTime) { mStatisticsUpdateTime += elapsedTime; mStatisticsNumFrame += 1; // Ist eine Sekunde vergangen? if (mStatisticsUpdateTime >= sf::seconds(1.0f)) { mStatisticsText.setString( "Frames / Second = " + std::to_string(mStatisticsNumFrame) + "\n" + "Time / Update = " + std::to_string(mStatisticsUpdateTime.asMicroseconds() / mStatisticsNumFrame) + "us"); mStatisticsUpdateTime -= sf::seconds(1.0f); mStatisticsNumFrame = 0; } } // ... void Game::Run() { sf::Clock clock; sf::Time timeSinceLastUpdate = sf::Time::Zero; while (App.isOpen()) { ProcessEvents(); Update(timeSinceLastUpdate); timeSinceLastUpdate += clock.restart(); // Statisics updaten while (timeSinceLastUpdate > TimePerFrame) { timeSinceLastUpdate -= TimePerFrame; UpdateStatistics(timeSinceLastUpdate); ProcessEvents(); Update(timeSinceLastUpdate); } UpdateStatistics(timeSinceLastUpdate); // Alles darstellen Render(); } } // ... |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Nein, ist es nicht. Eine ordentliche Konstante hingegen macht durchaus Sinn.vielleicht könnte man einen globalen Define daraus machen oder so, aber ob das schön ist ist auch fraglich
dann schlag ich dir vor eine Runde Video Games zu spielen
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 |
float accel = 0.1f; // Tastenabfrge if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) { a.x = -accel; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { a.x = accel; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) { a.y = -accel; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { a.y = accel; } v.x = v.x + (a.x * dT.asSeconds()); // Beschleunigung ist die Änderung der Geschwindigkeit r.x = r.x + (v.x * dT.asSeconds()); // Geschwindigkeit ist die Änderung der Position v.y = v.y + (a.y * dT.asSeconds()); // Beschleunigung ist die Änderung der Geschwindigkeit r.y = r.y + (v.y * dT.asSeconds()); // Geschwindigkeit ist die Änderung der Position // Bis jetzt würde das Schiff einfach weiter gleiten, // deshalb muss die Geschwindigkeit in jedem Frame reduziert werden. const float k = 0.55f; v.x *= k; v.y *= k; // Außerdem sollte man noch eine Maximalgeschwindigkeit angeben, // da die Geschwindigkeit sonst zu groß werden kann. const float maxvel = 100; if (v.x > maxvel) { v.x = maxvel; } if (v.x < -maxvel) { v.x = -maxvel; } // Sprite bewegen mSprite.move(v.x, v.y); dT.Zero; // Zeit zurücksetzten a.x = 0; // Beschleunigung auf NULL setzen, falls nichts gedrückt wird. a.y = 0; // Beschleunigung auf NULL setzen, falls nichts gedrückt wird. |
Werbeanzeige