Падающий снег в SFML

Цель: падающий снег Библиотека: SFML Ошибка: снег падает, но только при условии ,что я что-либо делаю в окне приложения(двигаю мышкой, нажимаю клавиши). Как только я перестаю что-то подобное делать снег просто останавливается.

Так изменяются координаты в методе update.

        y += 1;
        switch (rand() % 3 + 1)
        {
         case 1:
             x += 1;
             break;
         case 2:
             x -= 1;
             break;
         case 3:
             x = x;
             break;
        }

Так выглядит гейм-цикл.

 while (window.isOpen())
{

    while (window.pollEvent(event))
    {...}
        for (auto& element : snow)         //Тут в цикле идём по всем снежинкам и выполняем для них update
        {
            if (!(*element).update(time))
            {
                ...
            }
        }
        ...
        for (int i = 0; i < del; ++i)
            snow.pop_front();
        for (auto element : snow)           //Тут идём по списку snow и прорисовываем каждую снежинку
            window.draw((*element).cirkl);
        window.display();
    }
}

Собственно,что мне сделать,чтобы независимо от пользователя снег падал.


Ответы (1 шт):

Автор решения: Саша Шумейко

В моём случае помог один из комментариев.

судя по описанию проблемы у вас просто отрисовка привязана к циклу обработки эвентов - стандартная проблема у новичков (сам с таким сталкивался). Вам необходимо реализовать обработку эвентов и отрисовку независимо. Это можно сделать несколькими вариантами, например делать это в разных потоках, но это может добавить проблем (синхронизация и т.д.), а можно сделать все в одном потоке, но для этого нужно операция по получению эвентов должна вызываться с таймаутом (время между отрисовкой двух кадров). Как то так

Отрисовка была привязана к циклу обработки эвентов. Для решения проблемы просто перенём её в другое место - в game-цикл.

→ Ссылка