1.1 SFML и Visual Studio



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

Библиотека SFML предоставляет простой интерфейс для различных компонентов вашего компьютера, чтобы облегчить разработку игр и мультимедийных приложений. Она состоит из пяти модулей: system, window, graphics, audio и network.

Используя SFML, ваше приложение может быть скомпилировано и запущено на наиболее распространенных платформах: Windows, Linux, Mac OS X(планируется поддержка Android и IOS).

Предварительно скомпилированные SDK для вашей ОС доступны на странице загрузки.

SFML официально поддерживает C и .NET. Также, благодаря своему активному сообществу, она доступна на многих других языках, таких как Java, Ruby, Python, Go и др.

Оглавление:
0.1 Вступление

1. Приступая к работе

  1. SFML и Visual Studio
  2. SFML и Code::Blocks (MinGW)
  3. SFML и Linux
  4. SFML и Xcode (Mac OS X)
  5. Компиляция SFML с помощью CMake

2. Модуль System

  1. Обработка времени
  2. Потоки
  3. Работа с пользовательскими потоками данных

3. Модуль Window

  1. Открытие и управление окнами
  2. Обработка событий
  3. Работа с клавиатурой, мышью и джойстиками
  4. Использование OpenGL

4. Модуль Graphics

  1. Рисование 2D объектов
  2. Спрайты и текстуры
  3. Текст и шрифты
  4. Формы
  5. Проектирование ваших собственных объектов с помощью массивов вершин
  6. Позиция, вращение, масштаб: преобразование объектов
  7. Добавление специальных эффектов с шейдерами
  8. Контроль 2D камеры и вида

5. Модуль Audio

  1. Проигрывание звуков и музыки
  2. Запись аудио
  3. Пользовательские потоки аудио
  4. Спатиализация: звуки в 3D

6. Модуль Network

  1. Коммуникация с использованием сокетов
  2. Использование и расширение пакетов
  3. Веб-запросы с помощью HTTP
  4. Передача файлов с помощью FTP


Вступление


Эта статья — первая, которую вам следует прочитать, если вы используете среду разработки 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 будет приведено ниже.

Теперь вам необходимо указать компилятору, где искать заголовочные файлы (файлы с расширением .hpp) и компоновщику, где искать библиотеки SFML (файлы с расширением .lib).

Добавьте в свойства проекта следующее:

  • Путь до заголовочных файлов SFML (<путь-к-установке-SFML>/include) в C/C++ » General » Additional Include Directories
  • Путь до библиотек SFML (<путь-к-установке-SFML>/lib) в Linker » General » Additional Library Directories

Эти пути совпадают для конфигураций Debug и Release, так что вы можете установить их глобально для вашего проекта («All configurations»).



Следующий шаг — компоновка вашего приложения с библиотеками SFML (файлы с расширением .lib). SFML состоит из пяти модулей (system, window, graphics, network и audio) и библиотек для каждого из них. Библиотеки должны быть добавлены в свойства проекта в Linker » Input » Additional Dependencies. Добавьте те библиотеки SFML, в которых вы нуждаетесь, например «sfml-graphics.lib», «sfml-window.lib» и «sfml-system.lib».

Важно указать библиотеки, соответствующие конфигурации: «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», но добавление их не должно вызвать каких либо проблем.

В таблице ниже представлены зависимости для каждого модуля, добавьте -d если вы хотите скомпоновать Debug библиотеки SFML:
Модуль Зависимости
sfml-graphics-s.lib
  • sfml-window-s.lib
  • sfml-system-s.lib
  • opengl32.lib
  • freetype.lib
  • jpeg.lib
sfml-window-s.lib
  • sfml-system-s.lib
  • opengl32.lib
  • winmm.lib
  • gdi32.lib
sfml-audio-s.lib
  • sfml-system-s.lib
  • openal32.lib
  • flac.lib
  • vorbisenc.lib
  • vorbisfile.lib
  • vorbis.lib
  • ogg.lib
sfml-network-s.lib
  • sfml-system-s.lib
  • ws2_32.lib
sfml-system-s.lib
  • winmm.lib

Из таблицы вы могли заметить, что одни модули SFML могут зависить от других, например, sfml-graphics-s.lib зависит от sfml-window-s.lib и sfml-system-s.lib. Если вы производите статическую компоновку библиотеки SFML, будьте уверены, что все зависимости из цепочки зависимостей были удовлетворены. Если одна из зависимостей отсутствует, вы получите ошибку компоновщика.

Если вы немного запутались, не волнуйтесь, для начинающего совершенно нормально быть перегруженным всей этой информацией о статическом связывании.Если у вас что-то не получится с первого раза, вы можете попробовать еще раз имея в виду все сказанное выше. Если у вас все же возникнут трудности со статическим связыванием, вы можете попробовать поискать решение в разделе FAQ или на форуме.

Если вы не знаете чем отличаются динамические (также называемые общими) и статические библиотеки и какой тип библиотек использовать, вы можете найти больше информации в интернете. На данную тему есть множество хороших статей/блогов/постов.

Ваш проект готов, давайте напишем немного кода, что бы проверить, что все работает правильно. Поместите следующий код в файл main.cpp:

#include <SFML/Graphics.hpp>

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

Если при создании проекта вы выбрали опцию «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, не забудьте скопировать файлы с расширением .DLL (они расположены в <путь-к-установке-SFML>/bin) в директорию, в которой расположен исполняемый файл вашей программы. Запустите программу, и, если все было сделано правильно, вы должны увидеть это:



Если вы используете модуль sfml-audio (независимо от того, статическую или динамическую его версию), вы также должны скопировать внешнюю dll библиотеку OpenAL32.dll. Этот файл также может быть найден в директории <путь-к-установке-SFML>/bin.

Следующая статья: SFML и Code::Blocks (MinGW).
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 11

    +8
    Неплохо было бы начать с того, что за библиотека SFML и для чего она может понадобиться.
      0
      Добавил вступление от переводчика. Там основная информация об SFML.
        0
        Лучше добавлять информацию ДО хабраката, а то непонятно, что за библиотека.
          +1
          Поправил. Спасибо.
            0
            И всё-таки… Полистал статьи, вроде понял что представляет из себя эта библиотека. Но не понял каковы её возможности, преимущества и недостатки в сравнении с конкурентами.

            Сделайте обзорную статью.
      +1
      Осталось запилить статью про «Hello world!». Только не как обычно, а такую, как в книгах «С++ за 21 день».
        0
        Не понял, это статья о том как прописать инклуды и либы в проекте? Скоро похоже и правда будут появляться статьи, как набирать текст на клавиатуре ((
          +1
          в начале написано, что эта статья-перевод официальной документации по SFML. Первые разделы документации-установка и конфигурирование SFML (Getting started если точнее).
            +2
            Не будет таких статей. будут видеоуроки
            0
            Это же CMake-based проект? Так давайте использовать возможности CMake!

            Разве нельзя сделать как-то вот так?

            project(MyProject)
            
            find_package(SFML COMPONENTS system window graphics REQUIRED)
            include_directories(${SFML_INCLUDE_DIRS})
            
            add_executable(MyProgram main.cpp)
            target_link_libraries(MyProgram ${SFML_LIBRARIES})

            Разработчики не позаботились об этом? Они предлагают настраивать проект, использующий их библиотеку, вручную? Серьёзно?
              0
              Я с вами полностью согласен, однако в официальной документации рассматривается лишь настройка проектов под определенными IDE.

            Only users with full accounts can post comments. Log in, please.