Вступление и установка графической библиотеки SFML в C++

Содержание

Пссс, парень! Не хочешь попробовать немного SFML? Убойная штука. Достаточно самой малости и с её помощью ты сможешь воплотить в жизнь то, о чем раньше мог только мечтать. Тебе понравится, гарантирую. Тем более тебе, как новичку, первая порция бесплатно, я угощаю. Ну что, договорились? Тогда по рукам.

Вступление

Что же из себя представляет SFML? — спросите вы.

SFML (сокр. от «Simple and Fast Multimedia Library» = «Простая и быстрая мультимедийная библиотека») — это свободная кроссплатформенная мультимедийная библиотека, написанная на языке C++. Она также доступна и для других языков: C, C#, .Net, D, Java, Python, Ruby, OCaml, Go и Rust. Представляет собой объектно-ориентированный аналог SDL.

С её помощью можно легко и непринужденно создавать любую 2D-графику: начиная от простейших одиночных геометрических фигур (типа треугольника) и заканчивая полноценными играми-платформерами.

Исходный код библиотеки предоставляется под лицензией zlib/png, а скачать SFML можно с оф. сайта разработчика www.sfml-dev.org.

Что нужно для начала?

Все примеры этого урока были сделаны мной в ОС Windows 7 с использованием IDE MS Visual Studio 2017 Community Edition и библиотеки SFML 2.5.1.

Ну что, парень, ты готов? Да вижу, что готов. Погнали!

Установка библиотеки SFML

Я не буду рассказывать, как установить Visual Studio, а перейду сразу к SFML. Для того, чтобы установить библиотеку, нужно зайти на сайт www.sfml-dev.org и перейти в пункт меню Download и скачать SFML 2.5.1:

Как уже говорилось ранее, в качестве IDE я буду использовать Visual Studio 2017, поэтому скачиваем соответствующую версию SFML. Вы также можете заметить наличие готового пакета для эстетов Code Blocks. Помимо этого, в глаза бросаются варианты библиотеки для других версий Visual Studio. Сразу дам совет — не пытайтесь лепить Франкенштейна, используя неподходящий билд SFML, иначе вы рискуете получить вагон и маленькую тележку всякого рода проблем на свою голову.

Теперь скачанный архив нужно распаковать. У себя я выбрал следующий путь — C:\Soft\SFML-2.5.1-windows-vc15-32-bit .

Далее создадим пустой проект и подключим к нему библиотеку SFML. Для этого запустите Visual Studio и выберите "Файл" "Создать" "Проект…" , или можно воспользоваться сочетанием горячих клавиш Ctrl+Shift+N . Задайте имя и расположение проекта так, как показано на следующем скриншоте:

Теперь, когда у нас есть проект, нужно добавить в него файл, который будет содержать исходный код нашей программы. Для этого в окне «Обозреватель решений» клацните ПКМ по строке "Исходные файлы" "Добавить" "Создать элемент…" :

В поле «Имя» укажите main.cpp :

Отлично! Следующим шагом будет подключение библиотеки SFML к нашему проекту. Для этого нужно:

подключить каталог заголовочных и исходных файлов SFML ( /include );

подключить каталог библиотечных файлов SFML ( /lib );

подключить библиотечные файлы SFML в качестве дополнительных зависимостей.

Переходим в "Проект" "Свойства: SFML_Tutorial…" :

В верхнем левом углу страницы свойств SFML_Tutorial есть выпадающий список возле пункта "Конфигурация" , установите его значение как "Все конфигурации" . Также проверьте, что в параметре "Платформа" установлено значение "Win32" . Затем в левой части окна найдите и выберите раздел "Свойства конфигурации" "С/С++" "Общие" . Обратите внимание на правую часть, нас интересует параметр "Дополнительные каталоги включаемых файлов" . Выберите его и нажмите Изменить… . Перед вами появится новое окно, в котором нужно указать путь к заголовочным файлам библиотеки SFML. Обычно они располагаются в папке include. У меня этот путь выглядит как C:\Soft\SFML-2.5.1-windows-vc15-32-bit\SFML-2.5.1\include .

Похожим образом подключаются и файлы библиотек. Всё, что нужно сделать — это выбрать в левой части "Свойства конфигурации" "Компоновщик" "Общие" . Затем "Дополнительные каталоги библиотек" и Изменить… . В открывшемся окне нужно будет указать путь к библиотечным файлам SFML, у меня это C:\Soft\SFML-2.5.1-windows-vc15-32-bit\SFML-2.5.1\lib .

Осталось подключить несколько файлов в виде дополнительных зависимостей для «Компоновщика». Для этого нужно переключить тип конфигурации на Debug , а затем в левой части окна выбрать "Свойства конфигурации" "Компоновщик" "Ввод" . Переведите взгляд на правую часть, где нужно найти строку "Дополнительные зависимости" и нажмите Изменить… . В появившемся окне впишите имена следующих 4 файлов:

sfml-graphics-d.lib
sfml-window-d.lib
sfml-audio-d.lib
sfml-system-d.lib

Должно получиться следующее:

Первые шаги и первые…

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

Я вижу, как ваша рука уже потянулась к кнопке «Скомпилировать и запустить проект», но не торопитесь, давайте сначала разберем данный код:

Строка №1: Директива препроцессора #include… , которая подключает исходный файл SFML/Graphics.hpp к нашему проекту. Как раз этот файл и предоставляет нам возможность работать с 2D-графикой: спрайтами, текстом, геометрическими фигурами и прочими объектами.

Строка №3: Подключаем пространство имен sf .

Строка №8: Создаем объект window класса RenderWindow. Данный объект — это наше окно, в котором будет отображаться 2D-графика. Первый параметр VideoMode(200, 200) задает видеоразрешение окна (ширину и высоту). Второй параметр "SFML Works!" — это заголовок окна.

Далее идут 2 цикла while: внешний (строка №11) и внутренний (строка №15). Сложного здесь ничего нет. SFML предлагает удобные средства для работы с событиями. Именно их мы и будем использовать для создания цикла работы приложения и обработки событий окна. Во внешнем цикле while при помощи метода isOpen() мы проверяем, открыто ли наше окно в данный момент. Во внутреннем цикле while метод pollEvent(event) перебирает очередь событий (сообщений), которые возникают в нашем окне.

Очередь может содержать любое количество сообщений, именно по этой причине мы и используем цикл, чтобы перебрать их все. Предположим, например, что пользователь перемещает курсор во время выполнения нашей программы или нажимает на какие-то объекты. SFML обнаружит это и поместит два события в очередь: одно на перемещение курсора и одно на нажатие на объект. Выбрать определенное сообщение из очереди можно с помощью метода pollEvent() класса RenderWindow. Так вот, если какое-то событие из этой очереди совпадает с Event::Closed (т.е. пользователь нажал на крестик, тем самым послав сигнал «Закрыть окно»), то при помощи windows.close() мы закрываем окно. По сути, этот цикл бесконечен, и выход из него только один — закрыть окно программы.

В строке №23 мы вызываем метод display(), который отвечает за отрисовку нашего окна.

Вот теперь можно перейти к компиляции и первому запуску программы. Для этого нажмите в Visual Studio "Отладка" "Запуск без отладки" (или Ctrl+F5 ). Ииии, вот и она! Ваша первая… ЧТО…. ОШИБКА…. WTF….

Что за хрень. — спросите вы. Столько времени потрачено на ковыряние, настройку и прочее ради вот этого вот?! Долбанного окна с ошибкой?! Нафиг всё, дизлайк/отписка, го даст2 я создал.

А проблема в том, что исполняемый файл нашей программы не может найти *.dll-файлы, в которых хранятся используемые нашим приложением функции. Решение очень простое — нужно скопировать все файлы (11 штук) из папки C:\Soft\SFML-2.5.1-windows-vc15-32-bit\SFML-2.5.1\bin\ в папку C:\dev\SFML_Tutorial\Debug\ , в которой хранится наш исполняемый файл SFML_Tutorial.exe:

Попробуйте теперь скомпилировать и запустить проект. В результате должно получиться следующее:


Источник: ravesli.com