我目前正在做一个SFML项目,这是我过去做过的。但是我现在遇到了一个大问题。我遇到了严重的性能问题。我用一个简单的Main函数替换了我所有的代码,您可以在SFML网站上找到它,但是该应用程序非常落后,以至于要永久关闭它。
我已尝试清洁溶液,但这无济于事。通过查看任务管理器,我也找不到任何问题。 CPU,GPU,DISK,MEMORY的使用似乎还不错。 运行我的一些较早的问题工作正常。没有任何滞后。
我已将include目录添加到“其他include目录”中, 我已将该库添加到“其他库目录”中, 我已链接到我的其他依赖项(例如sfml-audio-d.lib), 我已经在Debug / Release文件夹中粘贴了必要的dll。
#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;
}
答案 0 :(得分:0)
根据所提供的信息,很难说出其来源。由于您的代码中没有时间步长,因此它可能以最大FPS运行。我总是建议在做图形时考虑时间。时间步长是不同帧之间的时间。有几种方法可以解决此问题。 Fix Your Timestep网页完美地总结了它们。这是一种参考。
我进行了快速代码修改,以为您提供一些指导。代码适用于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;
}