Гайд [GameDev] Урок 1. Вступление

Участник
Статус
Оффлайн
Регистрация
4 Авг 2017
Сообщения
464
Реакции[?]
212
Поинты[?]
0
Всем привет! Сегодня мы начнем разрабатывать свою собственную игру. В этом уроке мы:
  • выберем библиотеку, на основе которой будем писать игру
  • установим выбранную библиотеку
  • попробуем сделать заготовку
  • обсудим планы на будущее
Начну с того, что в моём исходнике игры уже многое реализовано и делать это я буду заново. Также я должен отметить, что мы будем писать игру на C++, ибо мне так захотелось (не ну не на паскале же).

Теперь приступим к выбору библиотеки. На мой взгляд, одной из лучших вариантов на сегодняшний день является высокоуровневая библиотека SFML. Почему именно она, вы поймете во время разработки. Но только лишь её использовать не круто, нам потребуется средство отладки (если это так можно назвать). И тут нам на помощь приходит старая-добрая библиотека ImGui. Опять же, почему именно она, вы поймете во время разработки. Все ссылки будут предоставлены в конце статьи.

Установка библиотек. Я не буду описывать установку ImGui + SFML, так как это можно вывести в отдельный урок. К тому же до меня это уже сделали более опытные и умные люди. Я настоятельно советую ознакомиться с этим *
Пожалуйста, авторизуйтесь для просмотра ссылки.
*, который кстати, меня вдохновил. Там все подробно и понятно написано и переписывать это не имеет смысла. Тут показана установка ImGui поверх SFML, но чтобы установить саму SFML вы можете перейти по *
Пожалуйста, авторизуйтесь для просмотра ссылки.
*. Это официальная документация на английском, но с картинками, да и базового знания английского вам хватит. Чуть не забыл, устанавливайте статическую версию библиотеки, чтобы обойтись без лишних dll файлов в папке с игрой.

Создание заготовки, или MainLoop. Весь смысл SFML заключается в повторяющемся цикле, то есть как бы в покадровом отображении определенных действий, сдвигов игрока, противников, анимации предметов. Далее вы все поймете.
Создайте файл main.cpp и вставьте туда этот код:
Код:
#include "imgui.h"
#include "imgui-sfml.h"

#include <SFML/Graphics/RenderWindow.hpp>
#include <SFML/System/Clock.hpp>
#include <SFML/Window/Event.hpp>

using namespace sf;

int main()
{
    sf::RenderWindow window(sf::VideoMode(640, 480), "Window"); // создаем окно с названием "Window" и разрешением 640X480
    window.setVerticalSyncEnabled(true); //устанавливаем вертикальную синхронизацию для плавности картинки
 
    ImGui::SFML::Init(window); //инициализируем окно ImGui в нашем основном окне

    sf::Clock deltaClock; //создаем "таймер" который поможет обновлять окно
 
    while (window.isOpen())  //основной цикл программы, работающий, пока окно открыто
    {
        sf::Event event; //событие, может быть равно "закрытию программы", "нажатию клавиши" и др.
        while (window.pollEvent(event))  //обработчик события
        {
            ImGui::SFML::ProcessEvent(event); // программа принимает на себя событие

            if (event.type == sf::Event::Closed)   // обработчки события, в данном случае, закрытия окна
            {
                window.close();
            }
        }

        ImGui::SFML::Update(window, deltaClock.restart()); // обновляем окно

        ImGui::Begin("ImGui Window"); // создаём окно ImGui
 
        ImGui::End(); // end window

        window.clear(Color::White); // заполняем окно заданным цветом
        ImGui::SFML::Render(window);// отображаем окно ImGui в основном окне
        window.display(); // отображаем все это на экране
    }

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

Что же дальше? Если вы про раздел, то я буду продолжать писать для вас гайды, возможно, они будут меньше, а может, и больше. Но я склоняюсь к первому варианту. Также я очень жду других обитателей этого раздела и надеюсь, что их будет не меньше чем в разделе "Разработка игрового ПО". Если вы про игру которую мы будем делать, то тут вариантов много. Я буду делать платформер с видом сверху, суть которого заключается в квестах и поединках, но в статьях я буду описывать и другие типы игр и показывать их отличия, а также реализовывать их.

Данная статья получилась больше, чем я думал, но это к лучшему. Всем спасибо за внимание, ждите следующих уроков.

Пожалуйста, авторизуйтесь для просмотра ссылки.

(скачивать для своей VS)
Остальные ссылки есть в статье по установке ImGui + SFML.
 
Последнее редактирование:
Новичок
Статус
Оффлайн
Регистрация
13 Июл 2018
Сообщения
1
Реакции[?]
1
Поинты[?]
0
Согласен, ты хорошо всё объесняешь, удачи в дальнейшем :seemsgood:
 
Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2020
Сообщения
28
Реакции[?]
3
Поинты[?]
0
О! Toy один урок! Спасибо за информацию, все четко и понятно. Считайте, я что я на вас подписался.
 
Забаненный
Статус
Оффлайн
Регистрация
27 Июн 2020
Сообщения
51
Реакции[?]
49
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Слава, спасибо большое еще раз!
 
не гавноед
Забаненный
Статус
Оффлайн
Регистрация
13 Июл 2020
Сообщения
252
Реакции[?]
20
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
тема 18 года, понял принял обработал
 
Сверху Снизу