События

Введение

Этот урок представляет подробный перечень событий окна. Он описывает их и показывает как можно и нельзя использовать события.

Тип sf::Event

Прежде чем перейти к событиям, важно понять что из себя представляет тип sf::Event и как правильно им пользоваться. sf::Event — это объединение, а значит, что только один из членов этого объединения допустим (т.е. существует) в данный момент времени (все элементы объединения хранятся в одной области памяти; за подробностями — в любой учебник по с++). Допустимым членом является тот, который соответствует типу события, например event.key для события KeyPressed. Попытка считывания другого члена приведёт к неопределённому поведению (скорее всего вы получите недопустимые или случайные значения). Поэтому никогда не пытайтесь использовать член события, который не соответствуют типу этого события.

Экземпляры sf::Event в качестве аргументов принимаются методом pollEvent() (или waitEvent()) класса sf::Window. Только две эти функции могут предоставить допустимые события, любая попытка использовать sf::Event без предварительного успешного вызова pollEvent() (или waitEvent()) приведёт к такому же неопределённому поведению, о котором говорилось выше.

Для большей ясности, вот так выглядит типичный цикл с использованием событий:

sf::Event event;

// пока имеются события в очереди...
while (window.pollEvent(event))
{
    // проверка типа события...
    switch (event.type)
    {
        // закрытие окна
        case sf::Event::Closed:
            window.close();
            break;

        // нажатие клавиш
        case sf::Event::KeyPressed:
            ...
            break;

        // мы не обрабатываем другие типы событий
        default:
            break;
    }
}

(далее…)

Открытие и управление окном SFML

Введение

Этот урок рассказывает только о том, как открывать окно и как управлять им. Рисование объектов находится вне сферы действия модуля sfml-window: оно обрабатывается модулем sfml-graphics. Однако, управление окном остаётся точно таким же, поэтому прочитать этот урок в любом случае нужно.

Открытие окна

Окна в SFML определяются с помощью класса sf::Window. Окно может быть создано и открыто непосредственно в конструкторе:

#include <SFML/Window.hpp>

int main()
{
    sf::Window window(sf::VideoMode(800, 600), "My window");

    ...

    return 0;
}

Первый аргумент — видео режим (video mode), определяет размер окна (внутренний размер, без заголовка и границ). Здесь мы создаём окно 800 x 600 пикселей.
Класс sf::VideoMode имеет несколько интересных статических функций для получения разрешения рабочего стола или списка допустимых видео режимов для полноэкранного режима. Если интересно, то загляните в документацию.

Второй аргумент это просто заголовок окна. (далее…)

Пользовательские потоки данных

Введение

SFML имеет несколько ресурсных классов: для картинок, шрифтов, звуков и т.д. В большинстве программ эти ресурсы будут загружены из файлов, при помощи своих функций loadFromFile(). В некоторых других случаях, ресурсы будут упакованы в исполняемый файл или в большой файл данных, и тогда будут загружаться из памяти с помощью loadFromMemory(). Эти функции покрывают практически все возможные варианты использования — но не все.

Иногда вы хотите загрузить файлы их необычного места, такого как сжатый/зашифрованный архив или удалённая сеть, например. Для подобных специальных случаев SFML предоставляет третью функцию загрузки: loadFromStream(). Эта функция считывает данные из абстрактного класса sf::InputStream, который позволяет определить собственные реализации.

В этом уроке вы узнаете как написать и использовать свой собственный производный входной поток. (далее…)

Потоки

Что такое поток?

Большинство из вас должно быть уже знают что такое потоки, но тем не менее, здесь приведено небольшое объяснение для тех, кто впервые сталкивается с этой концепцией.

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

(далее…)

Обработка времени

Время в SFML

В отличии от большинства других библиотек, в которых время представлено в виде числа миллисекунд (тип данных uint32) или числа секунд (float), SFML не навязывает какие-либо специфические единицы или типы для значений времени. Вместо этого библиотека оставляет этот выбор за пользователем через гибкий класс sf::Time. Все классы и функции библиотеки SFML, работающие со временем, используют этот класс.

sf::Time определяет временной интервал. Иными словами, не представляет какое-то конкретное значение даты и времени (год/месяц/день/час/минута/секунда), а просто показывает количество времени, и то как оно будет истолковываться, зависит уже от контекста.

(далее…)

Подключение SFML в Qt Creator

Создаём пустой проект и в проектном файле (.pro) добавляем следующие строчки:

LIBS += -LC:/SFML/lib

CONFIG(release, debug|release): LIBS += -lsfml-audio -lsfml-graphics -lsfml-main -lsfml-network -lsfml-window -lsfml-system
CONFIG(debug, debug|release): LIBS += -lsfml-audio-d -lsfml-graphics-d -lsfml-main-d -lsfml-network-d -lsfml-window-d -lsfml-system-d

INCLUDEPATH += C:/SFML/include
DEPENDPATH += C:/SFML/include

(далее…)

Что такое SFML

Что же такое этот SFML?

SFML (Simple and Fast Multimedia Library) — это библиотека для представления мультимедийных данных. SFML обеспечивает простой интерфейс для разработки игр и прочих мультимедийных приложений. Состоит она из пяти модулей: system, window, graphics, audio и network. Об особенностях всех этих компонент и будет рассказано в уроках.

(далее…)