我过去一周一直在制作我的游戏核心部分,但我因渲染效果不够好而遇到难题。移动时卡顿、出现撕裂,总体上延迟很大。我认为这可能不是游戏引擎的问题,因此我使用非常简单的游戏循环进行了渲染测试:
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驱动程序出了问题(我尝试过两次重新安装但没有改变)。非常感谢您的帮助!
elapsed -= 1.f/60.f;
。这背后的逻辑是什么?我不理解你为什么要减去一个常数。 - luk32