SFML в Ubuntu 16.04

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

SFML содержит ряд модулей для простого программирования игр и мультимедиа приложений. Исходный код библиотеки предоставляется под лицензией zlib/png license.

В Ubuntu 16.04 SFML представлен модулями:

Модуль deb-пакет Описание
System libsfml-system2.3v5 Управление временем и потоками, он является обязательным, так как все модули зависят от него.
Window libsfml-window2.3v5 Управление окнами и взаимодействием с пользователем.
Graphics libsfml-graphics2.3v5 Делает простым отображение графических примитивов и изображений, для своей работы требует модуль Window.
Audio libsfml-audio2.3v5 Предоставляет интерфейс для управления звуком.
Network libsfml-network2.3v5 Для сетевых приложений.

Установить все модули можно с помощью пакета libsfml-dev:

sudo apt install libsfml-dev

Дополнительно доступны еще пакет документации libsfml-doc и пакет отладочных символов libsfml2.3-dbg.

Компиляция программы c SFML

Рассмотрим следующий код на языке C++ демонстрирующее простейшее приложение на SFML (отображаем окно и заливаем его синим цветом):

//Подключаем заголовок модуля '''Graphics''', а он автоматически подключает заголовок модуля '''Window'''
# include <SFML/Graphics.hpp>

int main()
{
    // Создаём окно
    sf::RenderWindow App(sf::VideoMode(800, 600, 32), "Hello World - SFML");

    // Основной цикл
    while (App.isOpen())
    {
        // Проверяем события (нажатие кнопки, закрытие окна и т.д.)
        sf::Event Event;
        while (App.pollEvent(Event))
        {
            // если событие "закрытие окна":
            if (Event.type == sf::Event::Closed)
                 //закрываем окно
                App.close();
        }

        // очищаем экран, и заливаем его синим цветом
        App.clear(sf::Color(0,0,255));

        // отображаем на экран
        App.display();
    }

    return 0;
}

Файл с кодом назовем hello.cpp. Простой makefile для сборки:

PACKAGE = hello

CC      = g++
CLEAN   = rm -f
CFLAGS  = -Wall -g
LDADD   = `pkg-config sfml-all --libs` -lm


all: $(PACKAGE)

$(PACKAGE): hello.o
    $(CC) -o $(PACKAGE) hello.o $(LDADD)

hello.o: hello.cpp
    $(CC) $(CFLAGS) -c -o hello.o hello.cpp

clean:
    $(CLEAN) $(PACKAGE)
    $(CLEAN) hello.o

В Ubuntu заголовочные файлы имеют стандартное расположение, поэтому указывать путь на них не надо. Подключаются библиотеки ключами:

Модуль Ключ
System -lsfml-system
Window -lsfml-window
Graphics -lsfml-graphics
Audio -lsfml-audio
Network -lsfml-network

Указывать библиотеки можно с помощью pkg-config. Следующая команда подключит все модули:

LDADD = `pkg-config sfml-all --libs` -lm

Вернуться на главную страницу