1. Установка SFML 3.0 на Arch Linux/Hyprland и основы работы с окном и графикой
Установка SFML 3.0 на Arch Linux/Hyprland и основы работы с окном и графикой
Каждый раз, когда кто-то пишет «Hello World», мир становится чуть скучнее. А вот если вместо текстовой строки вывести на экран окно с анимированным квадратом — это уже игровой движок в миниатюре. Именно так начинается путь к собственному платформеру: с окна, в котором что-то происходит.
Зачем SFML, а не SDL или Raylib
Если вы уже знакомы с C++, то знаете: выбор библиотеки определяет, сколько боли вы получите на старте. SFML (Simple and Fast Multimedia Library) — это C++-библиотека для мультимедиа, которая предоставляет простой объектно-ориентированный интерфейс для работы с графикой, звуком, сетью и вводом. В отличие от SDL, которая написана на C и требует ручного управления ресурсами, SFML использует привычные вам классы, конструкторы и деструкторы.
> SFML — это C++ библиотека для мультимедиа, которая предоставляет простой объектно-ориентированный интерфейс для работы с графикой, звуком, сетью и вводом > > ps-group.github.io
Версия SFML 3.0 — это мажорный релиз, который принёс поддержку C++17, обновлённый API и исправления для Wayland. Именно Wayland и Hyprland — ваша среда, поэтому важно установить именно эту версию, а не устаревшую 2.x.
Установка на Arch Linux
На Arch Linux SFML доступна в официальных репозиториях. Откройте терминал и выполните:
Это установит библиотеку и заголовочные файлы. Проверьте версию:
Если версия ниже 3.0 — обновите систему командой sudo pacman -Syu. На момент написания курса Arch уже поставляет SFML 3.0 в репозиториях.
Для компиляции вам также понадобятся CMake и компилятор GCC:
Особенности Hyprland
Hyprland — это композитор на базе Wayland. Композитор — это программа, которая управляет отрисовкой окон на экране. SFML 3.0 поддерживает Wayland нативно, но по умолчанию может выбрать X11-backend. Чтобы принудительно использовать Wayland, установите переменную окружения:
Если окно SFML не появляется или мигает — попробуйте запустить с SFML_WINDOW_BACKEND=x11 как запасной вариант. На практике большинство проектов SFML 3.0 работают на Hyprland без дополнительной настройки.
Первое окно: разбор по строкам
Создайте файл main.cpp и вставьте следующий код:
Разберём ключевые моменты. sf::RenderWindow — это класс, создающий графическое окно. Конструктор принимает VideoMode (размер окна в пикселях) и строку заголовка. Метод setFramerateLimit(60) ограничивает частоту кадров до 60 FPS — без этого цикл будет крутиться на максимум и нагрузит процессор.
В SFML 3.0 изменился способ обработки событий: pollEvent() теперь возвращает std::optional<sf::Event>, а не bool. Это означает, что вы проверяете наличие события через while (const std::optional event = window.pollEvent()), а тип события определяете методом is<T>().
Микропример
Представьте, что окно — это холст, а window.clear() — это грунтовка перед каждой новой картинкой. Если не вызвать clear() перед отрисовкой, предыдущий кадр останется на экране — получится эффект «шлейфа».
Рисуем фигуры
SFML предоставляет готовые геометрические примитивы. Добавьте прямоугольник в игровой цикл:
Затем в теле цикла, между clear() и display():
RectangleShape — это прямоугольник, заданный размером в пикселях. Метод setPosition задаёт координаты верхнего левого угла. SFML использует экранные координаты: ось X направлена вправо, ось Y — вниз. Это важно запомнить, потому что в физике и математике Y обычно направлена вверх.
Помимо прямоугольников, SFML поддерживает:
Система сборки через CMake
Чтобы проект компилировался на любом компьютере с Arch Linux, создайте файл CMakeLists.txt:
Сборка выполняется в три команды:
После этого запустите ./game — должно появиться окно 800×600 с зелёным прямоугольником на тёмно-сером фоне.
Координаты и цвета
В SFML цвет задаётся через sf::Color, принимающий четыре компонента: красный, зелёный, синий и альфа-канал (прозрачность), каждый в диапазоне . Например, sf::Color(255, 100, 0, 200) — оранжевый с лёгкой прозрачностью.
Координаты объектов — это sf::Vector2f, пара чисел с плавающей точкой (x, y). Если вы захотите передвигать объект, достаточно вызывать setPosition каждый кадр с новыми координатами. Именно так устроено движение в любой 2D-игре.
Если из этой главы запомнить три вещи — это:
pacman -S sfml и работает на Hyprland через WaylandpollEvent() → clear() → draw() → display() — повторяется каждый кадрwindow.draw() между очисткой и отображением буфера