如何计算经过的时间而不在 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();
}
这是我的代码:
...
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();
}