gpt4 book ai didi

c++ - SFML 渲染性能问题

转载 作者:太空狗 更新时间:2023-10-29 21:43:11 26 4
gpt4 key购买 nike

在过去的一周里,我一直在制作我的游戏的核心,但我碰壁了,因为渲染根本不够好。运动很不稳定,我正在流泪,而且总体上有很多滞后。我认为这可能不是我的游戏引擎的错,所以我用一个非常简单的游戏循环测试了渲染:

        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 次,但没有任何更改)。感谢您的帮助!

最佳答案

您向我指出了一份与您的代码相似的 Material ,但您编写的代码不同。

来自:gameprogrammingpatterns.com/game-loop.html

double previous = getCurrentTime();
double lag = 0.0;
while (true)
{
double current = getCurrentTime();
double elapsed = current - previous;
previous = current;
lag += elapsed;

processInput();

while (lag >= MS_PER_UPDATE)
{
update();
lag -= MS_PER_UPDATE;
}

render();
}

您似乎对 elapsedlag 这两者都使用了一个变量 elapsed。这就是让我感到困惑的地方。您对 elapsed 的处理使其无法用于测量时间。我认为您的代码应该更像:

    sf::RenderWindow window(sf::VideoMode(1024, 768), "Testing");
window.setVerticalSyncEnabled(true);
sf::Clock clock;
sf::Event event;
float lag;
float elapsed;

while(window.isOpen())
{
lag = elapsed = clock.restart().asSeconds();
std::cout << 1.f/elapsed << std::endl;
while(lag > 1.f/60.f)
{
while(window.pollEvent(event))
{
if (event.type == sf::Event::Closed || event.key.code == sf::Keyboard::Escape)
{
window.close();
}
}
lag -= 1.f/60.f;
}
window.clear();
window.display();
}

我仍然不确定这是否正确。我不知道 clock.restart().asSeconds() 到底做了什么。就个人而言,我会像示例一样逐行实现它。为什么要重新设计工作代码?

编辑:OP 确认,使用 elapsed 进行“节流”违反了其作为时间测量变量的目的。

关于c++ - SFML 渲染性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23558203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com