Проблема производительности при запуске самого простого приложения sfml - PullRequest
0 голосов
/ 04 мая 2019

В настоящее время я работаю над SFML-проектом, который я сделал в прошлом.Но сейчас я столкнулся с большой проблемой.У меня серьезные проблемы с производительностью.Я заменил весь свой код на простую функцию Main, которую вы можете найти на веб-сайте SFML, но приложение отстает настолько сильно, что его закрытие занимает вечность.

Я пытался очиститьрешение, но это не помогает.Я не могу найти никаких проблем, глядя на диспетчере задач.CPU-, GPU-, DISK-, MEMORY-использование, кажется, просто отлично.Запуск некоторых из моих старых проблем работает нормально.Никаких задержек.

Я добавил каталог include в «дополнительные каталоги включения», я добавил библиотеку в «дополнительные каталоги библиотеки», я связал свои дополнительные зависимости (например, sfml-audio).-d.lib), я вставил необходимые библиотеки в папку Debug / Release.

#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 голосов
/ 04 мая 2019

По предоставленной информации трудно сказать, откуда это взялось. Поскольку в вашем коде нет временного шага, он, вероятно, работает с максимальной частотой кадров. Я всегда рекомендую учитывать временной шаг при выполнении графики. Шаг по времени - это время между различными кадрами. Есть несколько способов справиться с этим. Веб-страница 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;
}
...