运行最基本的SFML应用程序时的性能问题

时间:2019-05-04 11:59:55

标签: c++ sfml visual-studio-2019

我目前正在做一个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;
}

1 个答案:

答案 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;
}