私はsfmlでゲームループを書いています。私がスリープ状態にならない場合、各ループ反復の経過時間は〜1msです。しかし、私は睡眠を追加する(sleepTime)突然dtが高いです。ループの始めにdtを再起動しますが、最後のスリープ時間が追加されているようです。何が原因ですか?睡眠なしゲームループでsleep()を使うと、デルタ時間が不安定になる
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;
}
睡眠とは:あなたが何をしようとしてhttps://aww.moe/7seof1.png
睡眠が原因です。なぜあなたは寝ているのですか? –
私は一定のゲーム速度を確立したいので。私はこれを使用しています:http://www.koonsolo.com/news/dewitters-gameloop/ – Glamhoth
そして私はsleep()が超正確ではないことを知っています。しかし、ループの開始時にdtを再起動します。なぜ、スリープ時間がdtに追加されるのですか? – Glamhoth