Программирование: SFML и Visual studio

» Раздел: C++

Оригинал статьи - официальный туториал
Автор перевода - Nerevar

Введение

Эта статья - первое,что вы должны изучить перед использованием SFML с помощью Visual Studio IDE (компилятор Visual C++). Здесь описывается,как настроить ваши проекты SFML.

Устанавливаем SFML

Во-первых,вы должны загрузить SFML SDK со страницы загрузки.
Вы должны загрузить пакет,который соответствует вашей версии Visual C + + . Например,библиотека,собранная с помощью VC + + 9 (Visual Studio 2008) не является совместимой с VC ++ 10 (Visual Studio 2010). Если вы не нашли пакета SFML,собранного для вашей версии Visual C + + ,вы можете пересобрать SFML.
Далее вы должны разархивировать SFML куда вам будет удобно.Копировать заголовочные файлы и библиотеки в вашу папку Visual Studio не рекомендуется,лучше хранить библиотеки в их отдельной папке,особенно если вы используете несколько версий библиотеки или несколько компиляторов.

Создание и настройка проекта SFML

Первым делом необходимо выбрать какой тип проекта создать - вы должны выбрать "Win32 application".Мастер предложит несколько пунктов для настроек вашего проекта - выберите "Console application",если вам нужна консоль,или "Windows application",если она вам не требуется.Выберите "Empty project",если вам не требуется сгенерированный автоматически код.
Для целей этой статьи,вы должны создать main.cpp и добавить его в проект,теперь мы будем иметь доступ к настройкам C++(в ином случае Visual Studio не будет знать какой язык будет использоваться в этом проекте).Далее вы увидите,какой код мы напишем в этом файле.
Теперь нам требуется сообщить компилятору - где располагаются заголовочные файлы SFML(файлы .hpp) и линкеру - где располагаются библиотеки SFML (файлы .lib).
В свойствах проекта добавьте:
Путь к заголовочным файлам SFML (<sfml-install-path>/include) в C/C++ » General » Additional Include Directories
Путь к библиотекам SFML (<sfml-install-path>/lib) в Linker » General » Additional Library Directories
Эти пути одинаковы в режиме Debug и Release,поэтому установите их глобально для вашего проекта("All configurations").
Следующим шагом будет линковка к вашему проекту необходимых вам библиотек SFML (файлов .lib).SFML состоит из 5 модулей (system, window, graphics, network and 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-файлы.Если вы хотите избавиться от этих DLL-файлов и иметь SFML напрямую встроенную в ваш .exe-файл,вы должны прилинковать статическую версию.Статические библиотеки SFML имеют "-s" суффикс - "sfml-xxx-s-d.lib" для Debug и "sfml-xxx-s.lib" для Release.Также вы должны определить макрос SFML_STATIC в опциях препроцессора вашего проекта.
Если вы не знаете разницы между динамической и статической библиотекой и не знаете какую использовать,вы можете найти о них подробную информацию в Google.
Ваш проект готов,так давайте же добавим немного кода,чтобы убедиться что он работает.Добавьте этот код в ваш файл main.cpp:
» code
#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("sfml-main-d.lib" в Debug, "sfml-main.lib" в Release),таким же образом прилинкуйте sfml-graphics, sfml-window и sfml-system.
Теперь скомпилируйте проект и если вы прилинковали к динамической версии SFML,не забудьте скопировать DLL-файлы SFML (они находятся в <sfml-install-path/bin>) в директорию,где находится ваш .exe файл.Затем запустите его и если всё в порядке,вы увидите это:
Если вы используете модуль sfml-audio,вы должны также скопировать DLL-файлы соответствующей библиотеки - libsndfile-1.dll и OpenAL32.dll.Их можно найти по пути <sfml-install-path/bin>.

Просмотров: 4 209

» Лучшие комментарии


Buulichkaa #1 - 4 года назад 6
Перевел, красава)

Почему не на главке?
Nerevar #2 - 4 года назад 5
на главной уже,просто нужно было кое-какие корректировки по оформлению провести
это только начало цикла перевода статей отсюда
GeneralElConsul #3 - 4 года назад (отредактировано ) 5
Хм, интересно, а насколько далеко можно зайти с этой библиотекой, например, в разработку игр? Смотрел в Википедии, там насчет модуля Graphics только: "делает простым отображение графических примитивов и изображений".
Nerevar #4 - 4 года назад (отредактировано ) 6
GenElCon:
Хм, интересно, а насколько далеко можно зайти с этой библиотекой, например, в разработку игр? Смотрел в Википедии, там насчет модуля Graphics только: "делает простым отображение графических примитивов и изображений".
по сути это обертка,которая дает разрабатывать под указанные в её описании платформы - при этом пользователь сам выбирает инструмент - встроенные возможности для 2д-графики,либо если человеку нужны более широкие возможности - полная поддержка OpenGL
Buulichkaa #5 - 4 года назад 6
GenElCon, вот демонстрация (взял с экзамплов). Сам в 3д ничего серьёзного не делал, но на это либе можно приличные вещи пилить.
GeneralElConsul #6 - 4 года назад 5
вот демонстрация (взял с экзамплов)
opengl - "память не может быть read". Это у меня проблемы?
Nerevar #7 - 4 года назад 3
GenElCon:
вот демонстрация (взял с экзамплов)
opengl - "память не может быть read". Это у меня проблемы?
у меня норм всё,обновлял дрова на видеокарту? там если дрова от винды,то не будет версии OpenGL свежее 99 года
GeneralElConsul #8 - 4 года назад 5
там если дрова от винды,то не будет версии OpenGL свежее 99 года
Хм, так и есть.
P.S.
Теперь ясно, из-за чего у меня Minecraft не идет. Там что-то тоже с OpenGL связано было.
SSrunX #9 - 4 года назад 0
Стоит делать пробелы после запятых, а так отлично :3
coderx0x #10 - 4 года назад 2
Привет всем. Я вот как раз пробую эту библиотеку.
Это мой небольшой результат )
Забыл написать клавиши управления ))
Стрелки - движение
Пробел - стрельба
Левый Альт - рокета
Nerevar #11 - 4 года назад 1
coderx0x, лучше прикрепляй к сообщению,залив к нам на сайт
результат отличный)