Абсолютное удаление объекта с окна sfml

Рейтинг: 0Ответов: 1Опубликовано: 23.05.2023

Вопрос звучит просто, но Я нигде не смог найти ответ на этот вопрос. Как полностью удалить отрисованый объект из окна в sfml. Скажу сразу, что вариант "сделать невидимым или переместить его на огромные координаты" не подойдёт.

Ответы

▲ 1

Окно в SFML отрисовывает те элементы, которые вы в него добавили с помощью window.draw(). При помощи window.clear(); окно очищает очередь на отрисовку - удаляет все объекты из окна (из очереди). Если объект больше не нужен, просто не добавляйте его на отрисовку.
Основной цикл для SFML выглядит примерно так:

while (window.isOpen()) {
   // обработка событий окна

    
    window.clear(); // очистка очереди на отрисовку - удаляет из окна все элементы

    window.draw(object); // добавление объектов в очередь на отрисовку

    window.display(); // отображение окна
}

Когда объектов в окне много, обычно держат свой массив указателей на объекты, которые нужно отрисовать - std::vector<sf::Drawable*> my_draw_objects;. И в цикле добавляют в окно. Удалив указатель на элемент из своего массива, он не попадет на отрисовку в окно.

std::vector<sf::Drawable*> my_draw_objects;

{
    window.clear(); // очистка очереди на отрисовку

    for(auto object : my_draw_objects)
        window.draw(object); // добавление объектов в очередь на отрисовку

    window.display(); // отображение окна
}