C++ 运行最基本的sfml应用程序时出现性能问题
我目前正在从事一个SFML项目,我在过去做过一些。但我现在遇到了一个大问题。我有严重的性能问题。我用一个简单的主函数替换了我所有的代码,你可以在SFML网站上找到这个函数,但是这个应用程序太落后了,以至于要永远关闭它 我试过清洗溶液,但没用。通过查看任务管理器,我也找不到任何问题。CPU、GPU、磁盘和内存的使用似乎还不错。 运行我的一些旧问题可以很好地工作。没有任何滞后 我已经将include目录添加到其他include目录中, 我已将库添加到其他库目录中, 我已链接到我的其他dependenciese.g。sfml-audio-d.lib, 我已经在调试/发布文件夹中粘贴了必要的DLLC++ 运行最基本的sfml应用程序时出现性能问题,c++,sfml,visual-studio-2019,C++,Sfml,Visual Studio 2019,我目前正在从事一个SFML项目,我在过去做过一些。但我现在遇到了一个大问题。我有严重的性能问题。我用一个简单的主函数替换了我所有的代码,你可以在SFML网站上找到这个函数,但是这个应用程序太落后了,以至于要永远关闭它 我试过清洗溶液,但没用。通过查看任务管理器,我也找不到任何问题。CPU、GPU、磁盘和内存的使用似乎还不错。 运行我的一些旧问题可以很好地工作。没有任何滞后 我已经将include目录添加到其他include目录中, 我已将库添加到其他库目录中, 我已链接到我的其他dependen
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
从提供的信息很难说这是从哪里来的。因为您的代码中没有时间步长,所以它可能以最大FPS运行。我始终建议在绘制图形时考虑时间步长。时间步长是不同帧之间的时间。有几种方法可以解决这个问题。网页完美地总结了它们。这是一种参考 我做了一个快速的代码修改来给你一些指导。代码适用于Linux,但也应适用于Visual Studio
#include <SFML/Graphics.hpp>
#include <iostream>
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
window.setFramerateLimit(60);
// Timing
sf::Clock clock;
while (window.isOpen())
{
// Update the delta time to measure movement accurately
sf::Time dt = clock.restart();
// Convert to seconds to do the maths
float dtAsSeconds = dt.asSeconds();
// For debuging, print the time to the terminal
// It illustrates the differences
std::cout << "Time step: " << dtAsSeconds << '\n';
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
谢谢你的回答!它起作用了!我以前放弃过这种解决方案,因为它在我的其他项目中也能正常工作。有人知道为什么吗?默认情况下是否有帧限制?我可能错误地停用了?无论如何,非常感谢!我的荣幸!代码中缺少setFramerateLimit。您可以尝试一下,SFML将通过在draw调用后应用sleep来尝试匹配帧速率限制。我总是同时使用时间步长和setFramerateLimit。