SFML and Visual Studio
Introduction
This tutorial is the first one you should read if you’re using SFML with the Visual Studio IDE (Visual C++ compiler). It will explain how to configure your SFML projects.
Installing SFML
First, you must download the SFML SDK from the download page.
You must download the package that matches your version of Visual C++. Indeed, a library compiled with VC++ 10 (Visual Studio 2010) won’t be compatible with VC++ 12 (Visual Studio 2013) for example. If there’s no SFML package compiled for your version of Visual C++, you will have to build SFML yourself.
You can then unpack the SFML archive wherever you like. Copying headers and libraries to your installation of Visual Studio is not recommended, it’s better to keep libraries in their own separate location, especially if you intend to use several versions of the same library, or several compilers.
Creating and configuring a SFML project
The first thing to do is choose what kind of project to create. It is recommended to select «Empty Project». The dialog window offers a few other options to customize the project: select «Console application» or «Windows application» only if you know how to use pre-compiled headers.
For the purpose of this tutorial, you should create a main.cpp file and add it to the project, so that we have access to the C++ settings (otherwise Visual Studio doesn’t know which language you’re going to use for this project). We’ll explain what to put inside later.
Now we need to tell the compiler where to find the SFML headers (.hpp files), and the linker where to find the SFML libraries (.lib files).
In the project’s properties, add:
These paths are the same in both Debug and Release configuration, so you can set them globally for your project («All configurations»).
The next step is to link your application to the SFML libraries (.lib files) that your code will need. SFML is made of 5 modules (system, window, graphics, network and audio), and there’s one library for each of them.
Libraries must be added in the project’s properties, in Linker » Input » Additional Dependencies. Add all the SFML libraries that you need, for example «sfml-graphics.lib», «sfml-window.lib» and «sfml-system.lib».
It is important to link to the libraries that match the configuration: «sfml-xxx-d.lib» for Debug, and «sfml-xxx.lib» for Release. A bad mix may result in crashes.
The settings shown here will result in your application being linked to the dynamic version of SFML, the one that needs the DLL files. If you want to get rid of these DLLs and have SFML directly integrated into your executable, you must link to the static version. Static SFML libraries have the «-s» suffix: «sfml-xxx-s-d.lib» for Debug, and «sfml-xxx-s.lib» for Release.
In this case, you’ll also need to define the SFML_STATIC macro in the preprocessor options of your project.
Starting from SFML 2.2, when static linking, you will have to link all of SFML’s dependencies to your project as well. This means that if you are linking sfml-window-s.lib or sfml-window-s-d.lib for example, you will also have to link opengl32.lib, winmm.lib and gdi32.lib. Some of these dependency libraries might already be listed under «Inherited values», but adding them again yourself shouldn’t cause any problems.
You might have noticed from the table that SFML modules can also depend on one another, e.g. sfml-graphics-s.lib depends both on sfml-window-s.lib and sfml-system-s.lib. If you static link to an SFML library, make sure to link to the dependencies of the library in question, as well as the dependencies of the dependencies and so on. If anything along the dependency chain is missing, you will get linker errors.
If you are slightly confused, don’t worry, it is perfectly normal for beginners to be overwhelmed by all this information regarding static linking. If something doesn’t work for you the first time around, you can simply keep trying always bearing in mind what has been said above. If you still can’t get static linking to work, you can check the FAQ and the forum for threads about static linking.
If you don’t know the differences between dynamic (also called shared) and static libraries, and don’t know which one to use, you can search for more information on the internet. There are many good articles/blogs/posts about them.
Your project is ready, let’s write some code now to make sure that it works. Put the following code inside the main.cpp file:
If you chose to create a «Windows application» project, the entry point of your code has to be set to «WinMain» instead of «main». Since it’s Windows specific, and your code would therefore not compile on Linux or macOS, SFML provides a way to keep a standard «main» entry point in this case: link your project to the sfml-main module («sfml-main-d.lib» in Debug, «sfml-main.lib» in Release), the same way you linked sfml-graphics, sfml-window and sfml-system.
Now compile the project, and if you linked to the dynamic version of SFML, don’t forget to copy the SFML DLLs (they are in ) to the directory where your compiled executable is. Run it, and if everything works you should see this:
If you are using the sfml-audio module (regardless whether statically or dynamically), you must also copy the DLL of the external library needed by it, which is OpenAL32.dll.
These files can be found in too.
1.2 SFML и Code::Blocks (MinGW)
От переводчика: данная статья является второй в цикле переводов официального руководства по библиотеке SFML. Прошлую статью можно найти тут. Данный цикл статей ставит своей целью предоставить людям, не знающим язык оригинала, возможность ознакомится с этой библиотекой. SFML — это простая и кроссплатформенная мультимедиа библиотека. SFML обеспечивает простой интерфейс для разработки игр и прочих мультимедийных приложений. Оригинальную статью можно найти тут. Начнем.
1. Приступая к работе
Вступление
Эта статья — первая, которую вам следует прочитать, если вы используете среду разработки Code::Blocks с компилятором GCC (это стандартный компилятор для данной среды разработки). В ней будет рассказано, как настроить ваш проект.
Установка SFML
Для начала вы должны скачать SFML SDK со страницы загрузки.
Есть несколько вариантов GCC для Windows, которые несовместимы друг с другом (отличия в обработке исключений, в потоковой модели и т.д.). Убедитесь, что вы выбирите пакет, который соответствует той версии GCC, что вы используете. Если вы не уверены, проверьте, какой из файлов (libgcc_s_sjlj-1.dll или libgcc_s_dw2-1.dll) присутствуют в вашей директории MinGW/bin. Если MinGW установлен вместе с Code::Blocks, у вас наверняка SJLJ версия. Если ваша версия GCC не может работать с предварительно скомпилированной версией библиотеки SFML, вам придется собрать SFML самостоятельно. Это не сложно.
Далее вы должны распаковать архив с SFML в любую удобную для вас директорию. Копировать заголовочные файлы и библиотеки в вашу установку MinGW не рекомендуется. Лучше держать библиотеки в отдельном месте, особенно если вы намереваетесь использовать несколько версий одной библиотеки или несколько компиляторов.
Создание и конфигурирование проекта SFML
Первое, что вам необходимо сделать — это выбрать тип создаваемого проекта. Code::Blocks предлагает широкий выбор типов проектов, включая «SFML project». Не используйте его! Данный тип проекта довольно долго не обновлялся и, скорее всего, несовместим с последними версиями SFML. Вместо этого, создайте пустой проект. Если вы хотите избавиться от консоли, в свойства проекта перейдите в «Build targets» и в комбинированном списке выбирите «GUI application» вместо «Console application».
Добавьте в «Build options», во вкладку «Search directories» следующее:
Важно указать библиотеки, соответствующие конфигурации: «sfml-xxx-d» для Debug и «sfml-xxx» для Release, иначе могут возникнуть ошибки.
При компановке библиотек SFML, убедитесь, что вы прокомпоновали библиотеки в правильном порядке, это очень важно для GCC. Правило заключается в том, что библиотеки, которые зависят от других библиотек, должны быть помещены первыми в списке. Любая библиотека SFML зависит от sfml-graphics, sfml-window и sfml-system. Это показано на снимке экрана выше.
Настройки, приведенные выше, позволят вам скомпоновать ваш проект с динамической версией SFML, для которой требуются DLL файлы. Если вы хотите напрямую интегрировать SFML в ваш исполняемый файл, а не использовать компоновку с динамической библиотекой, вы должны скомпоновать статическую версию библиотеки. Статические библиотеки SFML имеют суффикс «-s»: «sfml-xxx-s-d» для конфигурации Debug и «sfml-xxx-s» для Release.
Так же вам необходимо определить макрос SFML_STATIC в опциях препроцессора вашего проекта.
Начиная с SFML 2.2 при статической компоновке вам так же необходимо скомпоновать все зависимости SFML. Это означает, что если, к примеру, вы скомпонуете sfml-window-s или sfml-window-s-d, вам так же придется скомпоновать opengl32, winmm и gdi32. Некоторые из этих библиотек, возможно, уже перечислены в разделе «Inherited values», но добавление их не должно вызвать каких либо проблем.
Если вы немного запутались, не волнуйтесь, для начинающего совершенно нормально быть перегруженным всей этой информацией о статическом связывании.Если у вас что-то не получится с первого раза, вы можете попробовать еще раз имея в виду все сказанное выше. Если у вас все же возникнут трудности со статическим связыванием, вы можете попробовать поискать решение в разделе FAQ или на форуме.
Если вы не знаете чем отличаются динамические (так же называемые общими) и статические библиотеки и какой тип библиотек использовать, вы можете найти больше информации в интернете. На данную тему есть множество хороших статей/блогов/постов.
Ваш проект готов, давайте напишем немного кода что бы проверить, что все работает правильно. Поместите следующий код в файл main.cpp:
Если вы используете модуль sfml-audio (независимо от того, статическую или динамическую его версию), вы так же должны скопировать внешнюю dll библиотеку OpenAL32.dll. Этот файл так же может быть найден в директории /bin.
Что такое SFML? Установка SFML в C++
Обновл. 30 Окт 2021 |
Пссс, парень! Не хочешь попробовать немного SFML? Убойная штука. Достаточно самой малости и с её помощью ты сможешь воплотить в жизнь то, о чем раньше мог только мечтать. Тебе понравится, гарантирую. Тем более тебе, как новичку, первая порция бесплатно, я угощаю. Ну что, договорились? Тогда по рукам.
Что такое SFML?
С её помощью можно легко и непринужденно создавать любую 2D-графику: начиная от простейших одиночных геометрических фигур (типа треугольника) и заканчивая полноценными играми-платформерами.
Исходный код библиотеки предоставляется под лицензией zlib/png, а скачать SFML можно с оф. сайта разработчика www.sfml-dev.org.
Примечание: Все примеры этого урока были сделаны мной в ОС Windows 7 с использованием IDE MS Visual Studio 2017 Community Edition и библиотеки SFML 2.5.1.
Ну что, парень, ты готов? Да вижу, что готов. Погнали!
Установка библиотеки SFML в Visual Studio
Я не буду рассказывать, как установить Visual Studio, а перейду сразу к SFML. Для того, чтобы установить библиотеку, нужно зайти на сайт www.sfml-dev.org и перейти в пункт меню «Download» и скачать «SFML 2.5.1»:
Как уже говорилось ранее, в качестве IDE я буду использовать Visual Studio 2017, поэтому скачиваем соответствующую версию SFML. Вы также можете заметить наличие готового пакета для эстетов Code Blocks. Помимо этого, в глаза бросаются варианты библиотеки для других версий Visual Studio. Сразу дам совет — не пытайтесь лепить Франкенштейна, используя неподходящий билд SFML, иначе вы рискуете получить вагон и маленькую тележку всякого рода проблем на свою голову.
Теперь, когда у нас есть проект, нужно добавить в него файл, который будет содержать исходный код нашей программы. Для этого в окне «Обозреватель решений» клацните ПКМ по строке «Исходные файлы» > «Добавить» > «Создать элемент…» :
В поле «Имя» укажите main.cpp :
Отлично! Следующим шагом будет подключение библиотеки SFML к нашему проекту. Для этого нужно:
подключить каталог заголовочных и исходных файлов SFML ( /include );
подключить каталог библиотечных файлов SFML ( /lib );
подключить библиотечные файлы SFML в качестве дополнительных зависимостей.
Переходим в «Проект» > «Свойства: SFML_Tutorial…» :
sfml-graphics-d.lib
sfml-window-d.lib
sfml-audio-d.lib
sfml-system-d.lib
Должно получиться следующее:
Первые шаги и первые…
На этом этапе подключение библиотеки SFML к проекту завершено, и мы можем перейти к непосредственному написанию кода для нашей первой программы. Ниже представлен минимальный каркас приложения:
Я вижу, как ваша рука уже потянулась к кнопке «Скомпилировать и запустить проект», но не торопитесь, давайте сначала разберем данный код:
Строка №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 я создал.
Попробуйте теперь скомпилировать и запустить проект. В результате должно получиться следующее:
Урок 1. Подключение библиотеки SFML к среде разработки Visual Studio 2013
В этом уроке мы подключим библиотеку SFML (Simple and fast multimedia library) к среде разработки Microsft Visual Studio 2013:

Скачиваем библиотеку http://www.sfml-dev.org/download/sfml/2.2/ (у меня это версия Visual C++ 12 (2013) – 32-bit);
Видеоверсия http://www.youtube.com/watch?v=IghUVIL6okk
Распаковываем куда вам угодно (у меня D:/SFML-2.2/); на всякий случай старайтесь избегать русских букв в папках пути. (то есть C:/приветик/ – лучше не использовать)
Далее вставляем вот этот тестовый код в файл main.cpp
Не пытайтесь сейчас это запустить – словите ошибки.
Для того, чтобы всё это работало – необходимо подключить библиотеку SFML.
Заходим вверху «проект»->свойства “имя проекта”->свойства конфигурации->C++->общие
В пункте «дополнительные каталоги включаемых файлов прописываем путь до раннее распакованного архива с библиотекой (+ \include.)
У меня получилось так: D:\SFML-2.2\include

Затем идем в компоновщик->общие и в пункте «дополнительные каталоги библиотек» прописываем путь к папке lib (у меня D:\SFML-2.2\lib);

Далее идем в компоновщике во вкладку ввод и в первой строке «дополнительные зависимости» вписываем перед всеми библиотеками следующую строчку:

Только что подключили основные необходимые для работы библиотеки. Есть еще звук и сеть, но о них поговорим позже.
(Все действия мы делаем для конфигурации Debug. Если вам нужен релиз, или сразу две конфигурации – меняйте значение конфигурации, а затем проделайте все те же действия, что идут после вставки тестового кода)
Последний штрих – идем во вкладку C++->препроцессор и в первой строке «определение препроцессора» в самом начале дописываем: SFML_DYNAMIC;
(с SFML_STATIC у меня в Visual Studio 2013 проект не компилируется)
Запустим и словим ошибку. Зато соберется проект и появится папка debug.
Теперь идем в папку бинарников “bin”, которую вы скачали и распаковали с библиотекой (мой вариант D:\SFML-2.2\bin\) и копируем всё содержимое этой папки (dll файлы типа sfml-graphics-2.dll) в папку с вашим проектом в папку debug (после сборки появилась эта папка), но не в тот debug, где лежит файл с исходным кодом “main.cpp”, а тот, где появляется exe файл. (мой вариант C:\Users\Павел\Documents\Visual Studio 2013\Projects\sfmltest\debug\)
В эту же папку копируем и вот эти файлы :
(они скорее всего есть в bin (в sfml 2.1 раньше были, в 2.2 – нету), и должны работать, но если вдруг нет)
(там в архиве еще и файл openal32.dll, он должен быть так же в папке bin изначально. он будет нужен нам потом, для работы со звуком).
Теперь проект можно запустить и если вы всё сделали правильно, то увидите зелёный круг как на скриншоте ниже:
Теперь можно приступать к самому интересному:)
На следующем уроке подробно разберем тестовый код, обязательно посмотрите. такое нельзя пропускать 
Вопросы задавать на форуме. Весь мануал был для дебага, мы пока разрабатываем проект, а не выпускаем.
1.1 SFML и Visual Studio
От переводчика: данная статья является первой в цикле переводов официального руководства по библиотеке SFML. Данный цикл статей ставит своей целью предоставить людям, не знающим язык оригинала, возможность ознакомится с этой библиотекой. SFML — это простая и кроссплатформенная мультимедиа библиотека. SFML обеспечивает простой интерфейс для разработки игр и прочих мультимедийных приложений. Оригинальную статью можно найти тут. Начнем.
Библиотека SFML предоставляет простой интерфейс для различных компонентов вашего компьютера, чтобы облегчить разработку игр и мультимедийных приложений. Она состоит из пяти модулей: system, window, graphics, audio и network.
Используя SFML, ваше приложение может быть скомпилировано и запущено на наиболее распространенных платформах: Windows, Linux, Mac OS X(планируется поддержка Android и IOS).
Предварительно скомпилированные SDK для вашей ОС доступны на странице загрузки.
1. Приступая к работе
Вступление
Эта статья — первая, которую вам следует прочитать, если вы используете среду разработки Visual Studio (Visual C++ compiler). В ней будет рассказано, как настроить ваш проект.
Установка SFML
Для начала вам необходимо скачать SFML SDK со страницы загрузки.
Скаченный вами пакет должен соответствовать вашей версии Visual C++. Например, библиотека, скомпилированная с помощью VC++ 10 (Visual Studio 2010) не будет совместима с VC++ 12 (Visual Studio 2013). Если вы не найдете на странице загрузки пакет SFML, скомпилированный для вашей версии Visual C++, вам придется собрать SFML самостоятельно.
Далее вы должны распаковать архив с SFML в любую удобную для вас директорию. Копировать заголовочные файлы и библиотеки в вашу установку Visual Studio не рекомендуется. Лучше держать библиотеки в отдельном месте, особенно если вы намереваетесь использовать несколько версий одной библиотеки или несколько компиляторов.
Создание и конфигурирование проекта SFML
Первое, что вам необходимо сделать — это выбрать тип создаваемого проекта: вы должны выбрать «Win32 application». Мастер предложит вам несколько опций для настройки проекта: выберите «Console application» в том случае, если вам нужна консоль, либо «Windows application» в обратном случае. Выберите «Empty project», если вам не нужен автоматически сгенерированный код.
Создайте файл main.cpp и добавьте его в проект. Этим вы примените настройки C++ (в противном случае Visual Studio не будет знать, какой язык мы будем использовать для данного проекта). Содержимое файла main.cpp будет приведено ниже.
Добавьте в свойства проекта следующее:
Важно указать библиотеки, соответствующие конфигурации: «sfml-xxx-d.lib» для Debug и «sfml-xxx.lib» для Release, иначе могут возникнуть ошибки.
Настройки, приведенные выше, позволят вам скомпоновать ваш проект с динамической версией SFML, для которой требуются DLL файлы. Если вы хотите напрямую интегрировать SFML в ваш исполняемый файл, а не использовать компоновку с динамической библиотекой, вы должны скомпоновать статическую версию библиотеки. Статические библиотеки SFML имеют суффикс «-s»: «sfml-xxx-s-d.lib» для конфигурации Debug и «sfml-xxx-s.lib» для Release.
Также вам необходимо определить макрос SFML_STATIC в опциях препроцессора вашего проекта.
Начиная с SFML 2.2 при статической компоновке вам также необходимо скомпоновать все зависимости SFML. Это означает, что если, к примеру, вы скомпонуете sfml-window-s.lib или sfml-window-s-d.lib, вам также придется скомпоновать opengl32.lib, winmm.lib и gdi32.lib. Некоторые из этих библиотек, возможно, уже перечислены в разделе «Inherited values», но добавление их не должно вызвать каких либо проблем.
Если вы немного запутались, не волнуйтесь, для начинающего совершенно нормально быть перегруженным всей этой информацией о статическом связывании.Если у вас что-то не получится с первого раза, вы можете попробовать еще раз имея в виду все сказанное выше. Если у вас все же возникнут трудности со статическим связыванием, вы можете попробовать поискать решение в разделе FAQ или на форуме.
Если вы не знаете чем отличаются динамические (также называемые общими) и статические библиотеки и какой тип библиотек использовать, вы можете найти больше информации в интернете. На данную тему есть множество хороших статей/блогов/постов.
Ваш проект готов, давайте напишем немного кода, что бы проверить, что все работает правильно. Поместите следующий код в файл main.cpp:
Если при создании проекта вы выбрали опцию «Windows application», то точкой входа в вашу программу должна быть функция «WinMain» вместо «main». Так как это специфика Windows, ваш код не будет компилироваться на Linux или Mac OS X. SFML предоставляет способ сохранить стандартной точкой входа «main» в том случае, если вы скомпонуете свой проект с модулем sfml-main («sfml-main-d.lib» для Debug, «sfml-main.lib» для Release) таким же способом, которым вы скомпоновали sfml-graphics, sfml-window и sfml-system.
Если вы используете модуль sfml-audio (независимо от того, статическую или динамическую его версию), вы также должны скопировать внешнюю dll библиотеку OpenAL32.dll. Этот файл также может быть найден в директории /bin.





















