【发布时间】:2016-12-30 02:02:14
【问题描述】:
我正在使用 sfml 编写游戏循环。当我不让它休眠时,每次循环迭代所用的时间约为 1 毫秒。但是当我添加 sleep(sleepTime) 突然 dt 很高。我在循环开始时重新启动 dt 但似乎它增加了最后的睡眠时间。是什么原因造成的?
sf::Clock clock;
float dt;
sf::Time sleepTime = sf::milliseconds(0);
while(m_Window.isOpen())
{
sf::Time elapsed = clock.restart();
dt = elapsed.asMilliseconds();
cout << "Elapsed: " << dt;
sf::Event event;
while(m_Window.pollEvent(event))
{
switch(event.type)
{
case sf::Event::Closed:
m_Window.close();
break;
}
}
sleepTime = sf::milliseconds(16 - dt);
float time = sleepTime.asMilliseconds();
cout << "\tSleep time: " << time << endl;
if(sleepTime >= sf::Time::Zero)
{
sf::sleep(sleepTime);
}
else
{
cout << "Shit." << endl;
}
【问题讨论】:
-
睡眠导致它。你为什么要睡觉?
-
因为我想建立恒定的游戏速度。我正在使用这个:koonsolo.com/news/dewitters-gameloop 作为指南。
-
而且我知道 sleep() 并不是非常准确。但是我在循环开始的时候重新启动了dt,为什么要给dt加上sleep时间呢?
-
睡眠不会像恒定的游戏速度那样建立任何东西。这就是分时操作系统的本质。
-
我不清楚 - 你期望什么样的输出?您为每次迭代轮询一次时钟,其中包括睡眠。那么为什么不应该把睡眠时间包括在这个读数中呢?也许您的意思是在计算
sleepTime之前再次轮询时钟?