Qbik-club
Дата публикации:08.06.22 20:28;Автор:Евгений;Категория: программирование;Теги:, ;

SFML. Работа с окном

Сегодня, в продолжении темы работы с библиотекой SFML мы научимся некоторым тонкостям работы с окном. Узнаем, как создавать различные типы окон и что ещё можно с ними делать.

SFML. Работа с окном

И так, давайте вспомним, на чём мы остановились в прошлый раз. Тут мы создавали окно и рисовали в нём кружок. Уже во второй публикации учась отлавливать в нём различные события.

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

Параметры VideoMode()

Теперь пришло время узнать некоторые секреты и тонкости, которые были опущены в первых двух публикациях. Начнём со строки:

sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");

Напомню, что первый параметр, представляющий из себя результат работы функции VideoMode() устанавливает значения ширины и высоты окна. Но есть ещё и третий параметр. Это выбор видеорежима. К примеру, чтоб выбрать глубину цвета в 32bpp — просто укажите это. Или если вы хотите 16bpp - можете указать так:

sf::VideoMode(200, 200, 16)

Важное замечание! Очень не рекомендую просто так брать и из головы ставить параметр глубины цвета! Вы как минимум можете получить не стабильную работу программы. А так же — максимально неестественную цветопередачу по сравнению с остальными программами. Если не уверены в том, что делать — можете просто оставить как есть. Или же создать окно с такой же глубиной пикселей, что и на рабочем столе. Таким образом программа будет смотреться максимально гармонично. Сделать это не сложно.

sf::VideoMode desktop = sf::VideoMode::getDesktopMode();
sf::RenderWindow window(sf::VideoMode(200, 200, desktop.bitsPerPixel), "SFML works!");

Параметры RenderWindow()

Теперь давайте разберёмся с самим конструктором класса RenderWindow(). Как помним, он принимает VideoMode(), затем заголовок окна. Но как оказывается, тут тоже есть третий параметр. Он отвечает за стиль оформления окна. Вы можете создать окно как с заголовком, так и без заголовка. Или же в полноэкранном режиме.

К примеру, давайте попробуем создать окно без заголовка. Сделать это можно так:

sf::RenderWindow window(sf::VideoMode(200, 200, desktop.bitsPerPixel), "SFML works!", sf::Style::None);

Обратите внимание, что просто так закрыть это окно не получится. Закрыть его вы можете или через сочетание клавиш Alt+f4 или принудительно завершив процесс в терминале через сочетание клавиш Ctrl+c.

Так же можете выбрать полноэкранный режим таким образом:

sf::RenderWindow window(sf::VideoMode(200, 200, desktop.bitsPerPixel), "SFML works!", sf::Style::Fullscreen);

Полный список выглядит таким образом:

Параметры window.clear()

И в конце давайте поговорим о функции, которая вызывается на каждой итерации цикла перед тем, как рисовать новый кадр. Она, как не сложно догадаться, очищает всё, что есть в окне на данный момент времени.

На самом деле, если вы сейчас удалите эту строку, вы даже ничего не заметите. Т.к. картинка у нас статическая. Но просто поверьте мне пока что на слово, она не один десяток раз в секунду меняется! :)

И вы можете задать самостоятельно, какого цвета у вас будет фоновая заливка. По умолчанию она чёрная. Именно по этому у нас круг именно на чёрном фоне. Но изменить это не сложно. Просто передаём в параметрах нужный цвет:

window.clear(sf::Color::Blue);

К примеру тут мы указали, что фоновая заливка должна быть синей. Но вам даже не обязательно выбирать что то из заранее заготовленных цветов. Можем цвет можем выбрать и сами. К примеру, давайте укажем, что хотим заливку белого цвета:

window.clear(sf::Color(255, 255, 255));

Итог

И так, теперь мы знаем, как создавать окна зачем нужна каждая строка, какие параметры ей передать, чтоб получить ровно то окно, какое нам нужно и как от этого окна получать события нажатия клавиш, движений мыши и всего, что только можно.

Единственное, что мы пока что не умеем — это рисовать в этом самом окне. Собственно этим мы в следующей публикации и займёмся. Мы наконец узнаем, как рисовать в окне самые разные геометрические фигуры! ;)

Публикация относится к тематической подборке: «Библиотека SFML»

Цикл публикаций посвящённый библиотеке SFML. Разбираемся с работой этой библиотеки от самых первых шагов до создания простых игр.

Понравилась публикация? Поделись ей с друзьями!

Понравился сайт? Подпишьсь на нас в соцсетях!

Мы в TelegramМы ВконтактеМы в ТвиттерМы на фейсбукМы в одноклассниках
Опубликовать
Загрузка рекомендуемых публикаций