如何计算经过的时间而不在​​ SFML 中重复?

How to cout elapsed time without repeat in SFML?

这是我的代码:

...
sf::Clock clock;
float time = 0.f;

while(window.isOpen())
{
  time = clock.getElapsed().asSeconds();
  cout << (int)time << endl;
}
...

这是我得到的输出:

0
0
0
0
1
1
1
1

从上面的输出可以看出,每一秒都被记录了多次,我只想像下面这样显示一次:

0
1
2
3

来自 link 的评论中的代码:

#include <SFML/Graphics.hpp>
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    sf::RenderWindow window(sf::VideoMode(1280, 720), "SFML works!");
    sf::Clock clock;
    float dt = 0.f;
    int lastTime = 0;
    int currentTime = 0;

    while (window.isOpen())
    {
        dt = clock.getElapsedTime().asSeconds();
        lastTime = (int)dt;
        currentTime = lastTime;

        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.display();

        
        if(currentTime!=lastTime)
            cout << (int)dt << std::endl;
    }

    return 0;
}

你在里面一会儿,你里面有一个cout呢!所以它会一直打印,并将每次(毫秒)转换为秒!

为此,您需要使用计时器或更简单的方法,保存最后一次并用 1000 毫秒 + 并在您的 while 条件中检查它。

作为伪代码:

int time = 0;
int last_time = 0;

while(window.isOpen())
{​  
  if(time > last_time){
     cout << time << endl;
  }
  last_time = time;
  time = clock.getElapsed().asSeconds();
}