diff --git a/examples/flappy_bird/flappy_bird.cpp b/examples/flappy_bird/flappy_bird.cpp index 14247c2..357bb5d 100644 --- a/examples/flappy_bird/flappy_bird.cpp +++ b/examples/flappy_bird/flappy_bird.cpp @@ -14,13 +14,15 @@ #include #include -#include - +#include #include #include +#include #include "lib/image_loader.hpp" +const int frame_rate = 60; + struct Background { paradiso::Sprite backgroundLeft; paradiso::Sprite backgroundRight; @@ -57,7 +59,7 @@ struct Background { if (sprite->pivot.x() <= -2.0f) { sprite->pivot.x() += 4.0f; } - sprite->pivot.x() -= 0.0006f; + sprite->pivot.x() -= 0.001f; shader.set_uniform("pivot", sprite->pivot); shader.set_uniform("scale", sprite->scale); shader.set_uniform("rotation", sprite->rotation); @@ -91,7 +93,7 @@ struct Grass { if (sprite->pivot.x() <= -2.0f) { sprite->pivot.x() += 4.0f; } - sprite->pivot.x() -= 0.005f; + sprite->pivot.x() -= 0.035f; shader.set_uniform("pivot", sprite->pivot); shader.set_uniform("scale", sprite->scale); shader.set_uniform("rotation", sprite->rotation); @@ -114,10 +116,10 @@ struct FlappyBird { unsigned int flapCounter = 0; // How many ticks since last flap float velocity = 0.0f; - const float max_velocity = 0.02f; + const float max_velocity = 0.05f; - const float gravity = -0.0002f; - const float move_up_velocity = 0.0003f; + const float gravity = -0.004f; + const float move_up_velocity = 0.0055f; bool move_up = false; bool paused = true; @@ -209,7 +211,7 @@ struct FlappyBird { } // Update rotation - rotation = velocity * 20.0f; + rotation = velocity * 15.0f; } // keyboard handler @@ -270,6 +272,8 @@ auto main() -> int { auto flappyBird = FlappyBird{}; + // timer + // das update führt den hier mitgegebnen Ausdruck innerhalb der internen // Updates des Fensters auf. Es wird hier auch explizit ein bool gefordert // damit das update auch zu jederzeit unterbrochen werden kann @@ -278,6 +282,7 @@ auto main() -> int { .position = paradiso::Point{.x = 0, .y = 0}, .size = size}); ctx.clear(); + auto t1 = std::chrono::high_resolution_clock::now(); // Keyboard and state change flappyBird.on_keyboard(w.keyboard_input()); @@ -288,6 +293,13 @@ auto main() -> int { grass.draw(shader); flappyBird.draw(shader); + // wait for frame rate + auto t2 = std::chrono::high_resolution_clock::now(); + auto duration = + std::chrono::duration_cast(t2 - t1); + auto wait = std::chrono::microseconds(1000000 / frame_rate) - duration; + std::this_thread::sleep_for(wait); + // Quit return !(w.keyboard_input().size() && w.keyboard_input().top().key == 'Q');