setFramerateLimit() 函数在 sfml 中不起作用

setFramerateLimit() function not working in sfml

本文关键字:sfml 不起作用 函数 setFramerateLimit      更新时间:2023-10-16

我正在尝试学习SFML,我想限制帧速率。 这是我的代码:-

#include <iostream>
#include <SFML/Graphics.hpp
int main()
{
sf::Window win (sf::VideoMode(200,200),"SDSDefgwre");
sf::Clock clock;
win.setFramerateLimit(30);
sf::Time t;
while(win.isOpen())
{
sf::Event e;
clock.restart().asSeconds();
while(win.pollEvent(e))
{
if(e.type == sf::Event::Closed)
win.close();
}    
t = clock.getElapsedTime();    
std::cout << 1.f/t.asSeconds() <<'n';    
}   
return 0;
}

在我运行此代码的地方,我得到 200000 FPS。

这意味着
win.setFramerateLimit(60);

不工作。请告诉我哪里出了问题?

来自setFrameLimit的文档:

如果设置了限制,则窗口将在每次调用后使用较小的延迟display()以确保当前帧持续足够长的时间 匹配帧速率限制。

您不渲染任何内容,也从未实际交换绘制缓冲区(这是调用win.display()会执行的操作(。

问题是你没有打电话

win.display()

因为窗口在显示功能中等待框架。

你的代码应该看起来像这样

#include <iostream>
#include <SFML/Graphics.hpp>
int main()
{
sf::Window win(sf::VideoMode(200, 200), "SDSDefgwre");
sf::Clock clock;
win.setFramerateLimit(30);
sf::Time t;
while (win.isOpen())
{
sf::Event e;
clock.restart().asSeconds();
while (win.pollEvent(e))
{
if (e.type == sf::Event::Closed)
win.close();
}
win.display();
t = clock.getElapsedTime();
std::cout << 1.0 / t.asSeconds() << 'n';
}
return 0;
}