Sfml что это
Перейти к содержимому

Sfml что это

Sfml что это

SFML2.png

Содержание

Описание [ ]

SFML (англ. Simple and Fast Multimedia Library — простая и быстрая мультимедийная библиотека) — свободная кроссплатформенная мультимедийная библиотека. Написана на C++.

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

Модули [ ]

В настоящее время доступны следующие модули:

  • System — управление временем и потоками, он является обязательным, так как все модули зависят от него.
  • Window — управление окнами и взаимодействием с пользователем.
  • Graphics — делает простым отображение графических примитивов и изображений, для своей работы требует модуль Window.
  • Audio — предоставляет интерфейс для управления звуком.
  • Network — для сетевых приложений.

Языки программирования [ ]

Название Язык Поддерживаемая версия
SFML C++ 2.5.1
CSFML 1 C 2.5
SFML.Net 1 .NET Framework 2.5
JSFML Java 2.2
DerelictSFML2 D 2.4
DSFML D 2.1
pySFML Python 2.3.2
rbSFML Ruby 2.3.2
GoSFML2 Go 2.2
rust-sfml Rust 2.4
Ocsfml OCaml 2.2
ocaml-sfml OCaml 2.0
EuSFML2 Euphoria 2.4
nim-csfml Nim 2.3
SFML.jl Julia] 2.2
SFML Haskell 2.3.2
PasSfml Pascal 2.4
crsfml Crystal 2.5

Простейшая програма [ ]

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

Sfml что это

SFML (Simple Fast Multimedia Library) — это C++ библиотека для мультимедиа. В статье мы воспользуемся SFML для рисования фигур в окне.

Содержание

Создайте каталог с названием sfml.1 . Откройте каталог в Visual Studio Code. Откройте терминал и убедитесь, что вы находитесь в этом каталоге:

Скриншот

Все упражнения и задания вы будете выполнять в подкаталогах каталога sfml.1 : sfml.1\00 , sfml.1\01 и так далее.

Следуйте инструкциям. Также выполните задания, указанные в тексте. Если при компиляции у вас возникнут ошибки, внимательно читайте текст ошибок в терминале.

Простая программа со сборкой через CMake

CMake — это система сборки. Нам она позволит не печатать каждый раз команды компиляции с нуля, тем более что команды будут становиться всё сложнее и сложнее.

  • Создайте в каталоге sfml.1 файл с именем CMakeLists.txt
  • Скопируйте следующий текст в файл и сохраните в этом файле:

Теперь создайте в каталоге sfml.1 подкаталог 00 , в каталоге 00 создайте ещё один файл с именем CMakeLists.txt . Сохраните в нём другой текст:

Затем создайте файл main.cpp в каталоге 00 и напишите в нём любую простую программу, например:

Сейчас каталог должен выглядеть так:

Скриншот

Далее следуйте шагам:

  1. Откройте терминал и введите команду g++ 00/main.cpp -o 00.exe . Убедитесь, что компиляция прошла успешно, затем выполните команду 00.exe .
  2. Удалите программу командой del 00.exe
  3. Затем соберите программу с помощью CMake. Эта операция выполняется в два шага: конфигурирование + сборка.

Внимание: в обеих командах ниже есть точка “.”, она означает “использовать текущий каталог”

Вывод первой команды будет примерно таким:

Вывод второй команды будет выглядеть так:

Если сборка была успешной, запустите 00\00.exe , чтобы проверить, что программа доступна и работоспособна.

Поздравляем, теперь вы умеете собирать проекты с помощью CMake!

Закрепим результат с помощью git

Чтобы ваши достижения не потерялись, вам надо использовать систему контроля версий Git. В консоли введите следующие команды

Ни одна из команд git add не должна выводить сообщений. Если где-то было сообщение, значит, у вас возникла ошибка. В этом случае проверьте команду и введите её снова.

Теперь введите команду git status и посмотрите на её вывод. Зелёным цветом помечены файлы, добавленные под контроль версий, красным помечены остальные файлы. Если вывод команды у вас совпадает со скриншотом, можно продолжить.

Скриншот

Пришло время зафиксировать свою первую версию! Введите команду git commit -m «Added A+B program» . Git зафиксирует версию и выведет краткий отчёт:

Возможно, git откажется выполнять фиксацию и предложит ввести свой email и имя. Ему нужны эти данные, чтобы у каждой версии был указан автор изменений. Вы можете ввести данные двумя командами, заменив «ваш.email» и «ваше.имя» на ваши email и имя, например «admin@localhost.ru» и «Lavrentiy Pavlovich»

Теперь введите команду git clean -fd . О чудо! Все посторонние файлы, кроме исходного кода, теперь исчезли. Команда убрала всё, что не занесено под контроль версий.

Простая программа с библиотекой SFML

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

  • SFML system, потому что его используют остальные два модуля
  • SFML window, чтобы создать окно программы
  • SFML graphics, чтобы нарисовать хотя бы что-то в этом окне

Для начала создайте каталог 01 , и в нём создайте файл CMakeLists.txt , сохраните в нём текст:

Этот текст — скрипт сборки на языке CMake. В этом скрипте мы подключаем три модуля SFML (window, graphics, system), устанавливаем версию языка (C++2017), настраиваем зависимости SFML (библиотеки libjpeg и freetype). Если бы мы напрямую вызывали g++, нам бы пришлось писать очень длинные команды — скрипт позволяет такого избежать.

Теперь создайте в каталоге 01 файл main.cpp , и аккуратно перепишите в него код:

Скриншот

Теперь вернитесь к основному файлу CMakeLists.txt и добавьте строку add_subdirectory(01) , чтобы он выглядел так:

После этого снова запустите CMake:

Если сборка была успешной, запустите программу 01\01.exe . На 5 секунд появится окно, а затем оно исчезнет.

Скриншот

Окно показывается, пока выполняется инструкция sf::sleep(sf::seconds(5)); , а затем программа заканчивается и окно скрывается. В будущем мы научимся показывать окно столько, сколько захотим, и закрывать по нажатию на кнопку в верхнем правом углу окна.

Давайте разберём, что выполняет код:

  1. Инструкция sf::RenderWindow window(sf::VideoMode(<800, 600>), «title») объявляет переменную window, которая имеет тип “графическое окно”, размеры 800×600 px и незамысловатый заголовок “title”.
  2. Вызов метода window.clear() очищает окно, а вызов window.display() выводит на экран то, что было нарисовано после очистки.
    • подробнее о методах sf::RenderWindow вы узнаете в документации SFML (sfml-dev.org).
  3. Инструкция sf::CircleShape shape1(40) объявляет переменную shape1 — круг размером 40px.
  4. Вызовы shape1.setPosition и shape1.setFillColor задают позицию круга в пикселях и цвет в виде RGB-компонентов (Red, Green, Blue).
    • подробнее о методах CircleShape вы узнаете на странице документации (sfml-dev.org)

Теперь добавьте больше фигур:

Скриншот

Запустите CMake, а затем программу:

У вас должно получиться что-то такое:

Скриншот

Освоим прямоугольники (rectangles) и повороты (rotation)

SFML позволяет рисовать разные типы фигур, в том числе прямоугольники. Прямоугольным фигурам соответствует класс sf::RectangleShape.

Создайте каталог 02 , и в нём создайте файл CMakeLists.txt и сохраните текст:

Теперь создайте в каталоге 02 файл main.cpp , и аккуратно перепишите в него код. Посмотрите на код: определите, где создаются два прямоугольника (rectangle) и где устанавливается поворот в градусах (rotation).

Скриншот

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

Теперь вернитесь к основному файлу CMakeLists.txt и добавьте строку add_subdirectory(02) , чтобы он выглядел так:

Соберите через CMake и запустите 02\02.exe . Результат будет таким:

Скриншот

Теперь вам надо зафиксировать успех! В терминале выполните команды:

Введите команду git log . Она покажет вам журнал изменений; этот журнал показывает все ранее зафиксированные версии. Выйти из просмотра лога можно с помощью горячей клавиши Q .

Задание sfml1.1

Нарисуйте с помощью кругов и прямоугольников светофор такого вида:

Скриншот

  • Перед тем, как написать код, нарисуйте светофор на клетчатой бумаге — так вы сможете измерить координаты, на которых должны располагаться фигуры.
  • Светофор должен быть нарисован ровно, без явных искажений.
  • Размер окна должен быть немного больше размера светофора (отступ 10-20px)
  • Когда вы сделаете задание, зафиксируйте его с помощью git.

Задание sfml1.2

Нарисуйте фигурами свои инициалы в английской транскрипции.

  • Например, если вас зовут “Fadeev Victor Andreevich”, напишите фигурами три буквы: FVA .
  • Перед тем, как написать код, нарисуйте эти буквы на клетчатой бумаге — так вы сможете измерить координаты, на которых должны располагаться буквы, и примерно оценить углы поворота.
  • Нарисованные инициалы должны быть читаемые и аккуратные.
  • Когда вы сделаете задание, зафиксируйте его с помощью git.

Освоим выпуклые многоугольники (convex shapes)

SFML позволяет рисовать выпуклые многоугольники — то есть трапеции, треугольники, некоторые пятиугольники и так далее. Таким фигурам соответствует класс sf::ConvexShape.

Создайте каталог 03 , и в нём создайте файл CMakeLists.txt , сохраните текст:

Теперь создайте в каталоге 03 файл main.cpp , и аккуратно перепишите в него код. Посмотрите на код: определите, где создаются два прямоугольника (rectangle) и где устанавливается поворот в градусах (rotation):

Скриншот

Теперь вернитесь к основному файлу CMakeLists.txt и добавьте строку add_subdirectory(03) , чтобы он выглядел так:

Соберите через CMake и запустите 03\03.exe . Результат будет таким:

Скриншот

Если всё в порядке, зафиксируйте код с помощью Git (добавьте файлы и сделайте commit).

Введите команду git log , проверьте, что commit сделан. Выйти из просмотра лога можно с помощью горячей клавиши Q .

Задание sfml1.3

Нарисуйте с помощью ConvexShape, RectangleShape и CircleShape домик такого вида:

SFML/SFML

SFML is a simple, fast, cross-platform and object-oriented multimedia API. It provides access to windowing, graphics, audio and network. It is written in C++, and has bindings for various languages such as C, .Net, Ruby, Python.

State of Development

SFML is currently in an interesting state of development, which can quickly become confusing if you aren’t following it closely. As such we want to clarify where to get which version.

  • The master branch contains work in progress for the next major version SFML 3. As such it’s considered unstable, but any testing and feedback is highly appreciated.
  • The 2.6.x branch is the nearly complete next minor version SFML 2.6, which should be very stable, even if it hasn’t been officially released yet.
  • The 2.5.1 tag is the last official SFML release, but it lacks a lot of fixes and features that can already be found on the 2.6.x branch.
  • You can get the latest official release on SFML’s website.
  • You can also get the source code of the current development version from the Git repository.
  • Alternatively, you can get the latest snapshot / artifact builds from the artifacts storage.

Follow the instructions of the tutorials, there is one for each platform/compiler that SFML supports.

There are several places to learn SFML:

  • The official tutorials
  • The online API documentation
  • The community wiki

Here are some useful community links:

SFML is an open-source project, and it needs your help to go on growing and improving. If you want to get involved and suggest some additional features, file a bug report or submit a patch, please have a look at the contribution guidelines.

  • Laurent Gomila (laurent@sfml-dev.org)
  • Marco Antognini (hiura@sfml-dev.org)
  • binary1248 (binary1248@hotmail.com)
  • Lukas Dürrenberger (eXpl0it3r@sfml-dev.org)
  • Jonathan De Wachter (dewachter.jonathan@gmail.com)
  • Jan Haller (bromeon@sfml-dev.org)
  • Mario Liebisch (mario@sfml-dev.org)
  • Stefan Schindler (tank@sfml-dev.org)
  • Artur Moreira (artturmoreira@gmail.com)
  • Vittorio Romeo (vittorioromeo@sfml-dev.org)
  • And many other members of the SFML community

The SFML libraries and source code are distributed under the zlib/libpng license. See license.md. External libraries used by SFML are distributed under their own licenses.

In short, SFML is free for any use (commercial or personal, proprietary or open-source). You can use SFML in your project without any restriction. You can even omit to mention that you use SFML — although it would be appreciated.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *