Эта приключенческая игра 0: Введение

Определяем структуру, которую мы будем использовать для нашей игры.

Это часть продолжающейся серии, в которой мы пишем полноценную приключенческую 2D-игру на C++ и SFML. Начав с основ (игровые циклы, рендеринг и т. д.), мы быстро перейдем к более сложным темам, таким как обработка коллизий, Quadtrees, анимация, трассировка лучей и создание объектов на основе компонентов. В процессе мы рассмотрим все, что вам нужно для создания 2D-игр. Вы можете скачать исходный код со страницы проекта на GitHub.

Это первое из нескольких руководств, которые проведут вас через разработку полной, полнофункциональной приключенческой игры. Попутно я расскажу о ряде полезных паттернов и систем; и к концу серии у вас будет полная игра. Следуя руководствам, вы не только лучше поймете, как создаются игры, но и получите базовые знания для создания собственных игр, независимо от жанра.

Краткий обзор некоторых вещей, которые мы создадим в этой серии:

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

  • Получите информацию от игроков: опрос и в режиме реального времени; и когда использовать каждый.
  • Управляйте различными ресурсами, которые требуются типичной игре (текстуры, аудио и файлы шрифтов, и это лишь некоторые из них).
  • Управляйте различными сценами, например. главное меню, игра и состояния паузы.
  • Анимируйте наших персонажей.
  • Создайте простой физический движок.
  • Создавайте и импортируйте тайловые карты.
  • Эффективное управление столкновениями с картой и другими объектами на уровне.
  • Создайте систему компонентов сущности.
  • Создайте звуковой движок.
  • Управление межсистемной связью.
  • Создание и обработка событий.
  • Сериализация и десериализация объектов.

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

Для этого проекта мы будем использовать C++ и SFML. Я предполагаю, что у вас есть некоторое знание C++ или аналогичного языка, и вы глубоко погрузитесь в особенности языка. Если вы не знакомы с C++, я бы порекомендовал сначала пройти вводный курс. Я не претендую на знание SFML и буду обсуждать соответствующие темы SFML по мере их возникновения.

Зачем использовать SFML?

SFML хорошо задокументирован в Интернете, поэтому я не буду вдаваться в подробности о том, что это такое, за исключением того, что он поможет нам с различными функциями, такими как рисование на экране и воспроизведение звука. Я рекомендую начать с веб-сайта SFML для получения дополнительной информации: https://www.sfml-dev.org. Однако я упомяну причины, по которым я использую его в этой серии руководств:

  • Я использовал его раньше, поэтому я могу сосредоточиться на фактической реализации, не изучая новую библиотеку.
  • Он имеет ряд привязок для разных языков, в том числе: java, python и ruby. Я буду использовать привязки C++, но вы можете использовать любой из других доступных языков.
  • У него приличная установочная база; а это значит, что найти поддержку не должно быть слишком сложно.
  • Он мультиплатформенный, вы можете следить за ним в Windows, MacOS или Linux. Он также портируется на Android и iOS, но это было недоступно, когда я начинал эту серию.

SFML, конечно, не единственный выбор, и вы можете найти множество хороших альтернатив в Интернете.

Сказав все это, на самом деле не важно, какую библиотеку вы решите использовать. Если вам удобнее использовать другую библиотеку или даже язык, не стесняйтесь делать это. Неважно, на каком языке написана игра, важно то, как мы строим и комбинируем различные системы (или строительные блоки) нашей игры.

Почему бы не использовать Unity/Unreal Engine?

Я большой поклонник Unity, поскольку использовал его на протяжении большей части своей профессиональной карьеры. Я уверен, что Unreal Engine тоже великолепен, я просто случайно использовал Unity (на самом деле я даже написал книгу для начинающих по Unity, которую вам обязательно стоит прочитать). Тем не менее, я также думаю, что как программист игр вы должны хорошо понимать, что происходит под капотом. Так что, хотя я очень благодарен за то, что мне больше не нужно писать свои собственные системы компонентов сущностей и системы анимации, мне нравится понимать, как они работают, исходя из основных принципов.

Как настроить SFML?

Это хорошо задокументировано в сети, и я не буду здесь вдаваться в подробности, так как процесс обязательно изменится в какой-то момент.

Я создаю и тестирую проекты в Visual C++ 14 (2015) 32bit для Windows и Clang 64bit для MacOS. Вы можете загрузить их с сайта SFML, но опять же, вы можете использовать любую реализацию, какую пожелаете. Я буду размещать исходные файлы для каждого урока, как только вы настроите проект, вы можете перетащить эти файлы в свой проект.

Вы можете загрузить исходный код каждой главы из репозитория Github по мере их появления (ссылка будет вверху каждой страницы). Я буду включать исходные файлы для каждой главы в отдельные папки и текущую сборку для Xcode. Сборку Xcode можно считать сборкой Dev, она может не всегда работать и будет включать код, который еще не был описан в этой серии.

Это первый и, скорее всего, последний пост из серии, в котором нет кода. С этого момента мы будем застревать и создавать новые функции для нашей игры. Если у вас есть какие-либо проблемы с настройкой или у вас есть предложения по тому, что вы хотели бы видеть включенным, сообщите мне об этом в комментариях.

Спасибо за прочтение 🙂

Обновление: следующее руководство из этой серии уже доступно.