【发布时间】:2014-06-26 19:34:03
【问题描述】:
过去一周我一直在制作游戏的核心,但我碰壁了,因为渲染根本不够好。运动很生涩,我在流泪,总的来说有很多滞后。我认为这可能不是我的游戏引擎的错,所以我用一个非常简单的游戏循环测试了渲染:
sf::RenderWindow window(sf::VideoMode(1024, 768), "Testing");
window.setVerticalSyncEnabled(true);
sf::Clock clock;
sf::Event event;
float elapsed;
while(window.isOpen())
{
elapsed += clock.restart().asSeconds();
std::cout << 1.f/elapsed << std::endl;
while(elapsed > 1.f/60.f)
{
while(window.pollEvent(event))
{
if (event.type == sf::Event::Closed || event.key.code == sf::Keyboard::Escape)
{
window.close();
}
}
elapsed -= 1.f/60.f;
}
window.clear();
window.display();
}
fps 从 40 开始,上升到 60,然后回落到 30,它再次递增并重复。如果我将 VSynct 设置为 false,我会得到 30-500 fps 之间的任何地方。要么我没有正确测试帧速率,要么我的 nvidia 驱动程序有问题(我确实重新安装了 2 次,没有任何更改)。任何帮助表示赞赏!
【问题讨论】:
-
我不太明白你为什么要这么做
elapsed -= 1.f/60.f;。这背后的逻辑是什么?我不明白你为什么要减去常数。
标签: c++ sfml frame-rate game-loop