У меня есть короткий вопрос. Я изучаю SFML, и я сделал несколько приложений, используя его. Когда-нибудь я узнал об использовании фиксированного шага во время игры с кодированием, и было бы здорово, если бы это сработало. НО. Несмотря на то, что я делаю простой проект, как квадрат, перемещающийся слева направо от окна - он отстает! Что может быть причиной этой проблемы? Это мой код:SFML + фиксированный шаг времени = отставание?
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "Window");
window.setVerticalSyncEnabled(true);
sf::Event event;
sf::Clock clock;
sf::Time accumulator = sf::Time::Zero;
const sf::Time timePerFrame = sf::seconds(1.f/60.f);
sf::RectangleShape square;
square.setSize(sf::Vector2f(32, 32));
square.setOrigin(16, 16);
square.setPosition(400, 300);
square.setFillColor(sf::Color::Red);
int direction = 1;
int speed = 300;
while(window.isOpen())
{
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
{
window.close();
}
}
while(accumulator >= timePerFrame)
{
if(square.getPosition().x <= 16 || square.getPosition().x >= 784) direction *= (-1);
square.move(sf::Vector2f(speed * direction * timePerFrame.asSeconds(), 0));
accumulator -= timePerFrame;
}
accumulator += clock.restart();
window.clear(sf::Color::Black);
window.draw(square);
window.display();
}
return 0;
}
Как вы можете видеть, я знаю о вертикальной синхронизации, но это не помогает. Является ли мой фиксированный временной шаг неправильным? Любая помощь приветствуется!
Вам не нужно осуществить это самостоятельно 'SF :: Window'has метод под названием' setFramerateLimit' – DogeAmazed
Спасибо за быстрый ответ. Я читал, что использование этой функции не рекомендуется. –
Игнорировать мои последние комментарии, ответ Босслара просветил меня. –