Movement Without Framerate Limit C++ SFML

前端 未结 2 1302
别跟我提以往
别跟我提以往 2021-01-01 02:29

I\'m working an making a game in SFML right now, but I am getting stuck on movement without a framerate limit. Right now the only way I have figured out how to get consisten

相关标签:
2条回答
  • 2021-01-01 03:11

    You should pass the time that has elapsed since the last frame to the object that needs to be drawn, and then calculate the space the object has to move, like this:

    sf::Clock clock;
    int speed = 300;
    
    
    //Draw func that should be looped
    void Draw()
    {
        sf::Time elapsedTime = clock.restart();
        float tempSpeed = elapsedTime.asSeconds() * speed;
        drawnObject.move(tempSpeed, 0);
        drawnObject.draw(window);
    }
    

    This way, the 'drawnObject' will move 300 (pixels?) per second to the right regardless of the FPS

    0 讨论(0)
  • 2021-01-01 03:22

    @Waty's answer is right, but you might want to use fixed time step.

    Take a look at the SFML Game development book source code. Here's the interesting snippet:

    const sf::Time Game::TimePerFrame = sf::seconds(1.f/60.f);
    
    // ...
    
    sf::Clock clock;
    sf::Time timeSinceLastUpdate = sf::Time::Zero;
    while (mWindow.isOpen())
    {
        sf::Time elapsedTime = clock.restart();
        timeSinceLastUpdate += elapsedTime;
        while (timeSinceLastUpdate > TimePerFrame)
        {
            timeSinceLastUpdate -= TimePerFrame;
    
            processEvents();
            update(TimePerFrame);
    
        }
    
        updateStatistics(elapsedTime);
        render();
    }
    
    0 讨论(0)
提交回复
热议问题