Загрузка...
 
Печать
ИГРОКОДИНГ  »  ИГРОКОДИНГ: Учебный курс  »  Программируем 3D-шутер от первого лица (FPS) (Win32, Cpp, DirectX9)
Программируем 3D-шутер от первого лица (FPS) (Win32, C++, DirectX9)


Предисловие. Что и чем будем кодить

Quake II (1997, iD Software)
Quake II (1997, iD Software)

3D-шутер (или 3D-стрелялка) от первого лица - самый популярный жанр компьютерных игр на ПК. Наиболее известные игры, созданные в этом жанре: Doom, Quake, Unreal, Serious Sam, FEAR, серия Call of Duty и др. Во всех этих играх мы управляем персонажем, который скрыт, но видны только его руки, держащие оружие. Всё происходящее мы видим,как бы его глазами, что позволяет более полно погрузиться в атмосферу игры. Суть любого 3D-шутера - массовый отстрел врагов, постоянно нападающих со всех сторон.

Для тех, кому не нравятся такие игры (например из-за излишней жестокости или однообразия):

  • Любой 3D-шутер можно переделать в игру другого жанра, добавив соостветствующий функционал. Легендарная игра Half-Life, основанная на переработанном движке Quake, - яркое тому подтверждение.
  • Начинать программирование трёхмерных игр лучше, всё же, с 3D-шутеров. Так как этот жанр является фундаментальным для всех других жанров трёхмерных игр.


Язык программирования и API:

  • Язык программирования: С++.

В терминологии Microsoft будем создавать "неуправляемый" (unmanaged) код. Классическая версия языка для создания приложений под 32-битные версии операционных систем (далее "ОС") MS Windows XP/Vista/7/8. Также создаются и успешно работают под 64-битными (х64) версиями этих ОС в так называемом "режиме совместимости" (compatibility mode).

  • Графичесий API: MS DirectX9 .

MS DirectX распространяется в двух видах:

  • MS DirectX Runtime library (т.н. "библиотека времени выполнения"; необходима для запуска игр на ПК; включена по-умолчанию во все версии ОС MS Windows Vista/7)
  • MS DirectX SDK (Software Development Kit, набор для разработки ПО; необходим для создания игр).


В данном курсе:

  • В режиме "Шаг за шагом" мы рассмотрим все стадии программирования 3D-игры. Пройдя весь курс до конца, вы обнаружите, что им можно пользоваться в том числе как справочным пособием.
  • Создадим так называемый "каркас" (framework), который позднее может быть использован при создании других игр (в программировании это называется "рефакторинг"). В том числе других жанров. По ходу повествования каркас будет "обрастать" всевозможными "фишками".
  • Обязательно коснёмся теории стейтов (states), подробно расскажем об игровом конвейере (pipeline) и о менджменте ресурсов (модели, сцены, звуки и т.д.).
  • В конце курса на базе собственноручно созданного движка мы создадим демо-версию FPS-игры, вполне играбельную и готовую к дальнейшему масштабированию (добавлению уровней и контента).


Весь курс делится на 2 основные части:

  • Создание Проекта движка;
  • Создание Проекта игры (в виде исполняемого файла с расширением .exe и прилагаемых ресурсов).


В течение всей 1 части курса мы будем создавать игровой движок (от англ "engine" - двигатель, движок), который "физически" будет выглядеть как Проект в MS Visual C++, конечной целью которого станет компиляция статической LIB-библиотеки.

Закрыть
noteПримечание

Формат LIB является внутренним форматом MS Visual C++ и применяется (как правило) только внутри этой среды программирования. Статические LIB-библиотеки являются хорошим способом повторного использования кода. Вместо того чтобы каждый раз реализовывать одни и те же подпрограммы для обеспечения той или иной функциональности в каждом создаваемом приложении, их можно создать единожды и затем вызывать из приложений. Код, подключенный из статической LIB-библиотеки, становится частью вашего приложения — для использования кода не нужно устанавливать еще какой-либо файл.

После своей компиляции LIB-библиотека будет добавлена в Проект игры, который позднее создадим в том же Решении (так, начиная c MS Visual Studio 2005, теперь зовётся рабочее пространство "workspace"), что и движок. Таким образом, одно Решение будет содержать 2 Проекта: Engine (Проект движка) и Game (Проект игры). Это придаст исходному коду чёткую стркутуру, повысит читабельность, сделает его более инкапсулированным.
Во 2 части курса на основе разработанного движка, мы создадим игру (демо-версию игры), которая "физически" будет выглядеть как 1 файл приложения Windows с расширением .exe. В общем виде файловую структуру будущей игры можно представить так:

Исполняемый ("стартовый") файл игры (файл с расширением .exe) Является обычным приложением Win32. Содержит функционал игры (порядок загрузки ресурсов, смена стейтов, активация видеовставок и т.д.). Обычно на него указывает ярлык, размещаемый на Рабочем столе Windows.
Ресурсы игры Изображения (текстуры, заставки), звуки, модели, локации и т.д. Как правило, аккуратно разложены по папкам внутри каталога с игрой (maps, textures, sounds и т.д.)

Полученный после компиляции исполняемый файл игры, в принципе, автономен и без труда запустится на любом компьютере под управлением ОС Windows и установленным DirectX Runtime (при условии, что видеоадаптер поддерживает DirectX 9). Таким образом, получив от IDE исполняемый файл игры, про остальные библиотеки и заголовки можно забыть, бережно перенеся exe-шник и его ресурсы из каталога с Проектом в новый каталог (папку) на жёстком диске с названием игры. Именно эту папку ты затем заархивируешь, перенесёшь на флэшку и будешь с гордостью показывать своё творение на компьютерах друзей. (Собственно, для чего всё и затевалось.))

В начальных главах мы "пробежимся" по основам языка программирования C++ и затронем принципы объекто-ориентированного программировани вцелом. Курс составлен в том числе для новичков, но знать хотя бы азы программирования всё же очень желательно.

Вообще, программированием движка игры с чистого листа, как правило, никто не занимается, так как это самый долгий и трудоёмкий процесс. Для создания крупных коммерческих проектов обычно используют готовые игровые движки (Unreal Engine, Cry Engine, Ogre, Irrlicht и др.) или собственные наработки в данной области. Но чтобы как следует разобраться во всей этой игрокодинговой "кухне", необходимо начать всё буквально "с нуля". Также это нужно, чтобы чётко понимать, что где "лежит" и откуда взялось. Наша цель - чёткий, хорошо структурированный код, в котором его автор может, при необходимости, менять абсолютно всё, что посчитает нужным. Приготовьтесь к головокружительному путешествию в мир программирования 3D-графики. И запаситесь терпением: объём информации для запоминания будет просто огромным! Компьютерные игры - самые сложные программные приложения. Да и Microsoft DirectX является низкоуровневым API, а не игровым движком. Что также не делает жизнь игрокодера проще.

Нам потребуется:

ПК Intel x86-совместимый компьютер с установленной ОС MS Windows 7, 8. Компьютер должен без труда "крутить" 3D-приложения под DirectX9 (интегрирован в эти ОС). Для этого наведите справки о возможностях графического адаптера или дискретной видеокарты, установленной в вашем ПК. DirectX9 появился в 2004 году. Так что современные видеокарты без труда его "подхватят" (в DirectX заложена обратная совместимость версий; т.е. библиотеки DirectX10 и DirectX11 подойдут для программирования под DirectX9).
Microsoft Visual C++ 2010 Express Официально бесплатная (для некоммерческого использования) интегрированная среда разработки приложений (ИСР или IDE) от Microsoft. Включает в себя 32-разрядный компилятор Visual C++ и упрощённую среду разработки. Берём здесь: https://www.microsoft.com/ru-ru/softmicrosoft/VisualStudioExpress.aspx(external link). Ссылка пока ещё актуальна (10.08.2015). Но Microsoft чуть ли не каждый месяц меняет структуру раздела загрузок на своём сайте, продвигая свою новую бесплатную IDE MS Visual Studio Community 2015 и "задвигая" другие свои продукты подальше от посторонних глаз. Как вариант, Microsoft Visual C++ 2010 Express можно без труда найти в yandex.ru(external link) или google.ru(external link) . Устанавливаем на ПК. Программа запросит регистрационный ключ, который теоретически можно получить, бесплатно зарегистрировавшись на сайте Microsoft. Но на практике ссылка на ключ в самой MS Visual C++ 2010 уже сейчас (04.07.2015) не работает. А на сайте Microsoft сам чёрт ногу сломит. Так что вводим этот ключ: 6VPJ7-H3CXH-HBTPT-X4T74-3YVY7 Подойдут и другие версии (MSVС++ 2003/2005/2008). Все версии MSVС++ отличаются друг от друга лишь набором "фишек" и расположением элементов интерфейса. Но курс написан конкретно для MSVС++2010.
Microsoft DirectX SDK Набор для разработки (графических) приложений (Software Development Kit) от Microsoft. Включает в себя библиотеки, заголовочные файлы, документацию, примеры. После установки рекомендуется заглянуть в каталог с установленным SDK (по умолчанию C:\Program Files (x86) для Win7 x64), просмотреть документацию (на англ. языке) и исходные коды примеров. Из него мы также будем использовать подключаемые динамические библиотеки (dll) и заголовочные файлы. Распространяется бесплатно. Последнюю версию (в нашем случае это т.н. "DirectX SDK June 2010") берём здесь: http://www.microsoft.com/en-US/download/details.aspx?id=6812(external link).
Microsoft DirectX SDK 8.0 (8.1) Ряд компонентов, которые мы будем использовать, давно признан компанией Майкрософт устаревшими. В частности, в последних версиях DirectX SDK нет ни слова о DirectMusic и DirectSound, т.к. они о были объединены в DirectAudio (XAudio). В связи с эти настоятельно рекомендуем скачать и держать на компьютере в распакованном виде DirectX SDK 8 версии, впервые вышедшей в свет аж в 2001 году. И, несмотря на то, что Майкрософт не считает нужным хранить у себя на сайте подобную "ересь", восьмой SDK всё ещё можно найти в гугле по запросу DX81SDK_FULL.EXE. Также ссылки на него встречаются на форумах разработчиков инди-игр и даже на торрент-трекерах.
GUIDGEN Генератор GUID-идентификаторов. Раньше шёл в наборе с MS Visual C++ 6.0. В современных версиях MS Visual C++ Express его нет. Берём здесь: GUIDGEN(external link), либо пользуемся онлайн-сервисами вроде https://www.guidgen.com(external link).

Содержание:


ИГРОКОДИНГ  »  ИГРОКОДИНГ: Учебный курс  »  Программируем 3D-шутер от первого лица (FPS) (Win32, Cpp, DirectX9)

Contributors to this page: slymentat .
Последнее изменение страницы Суббота 22 / Апрель, 2017 11:43:25 MSK автор slymentat.

Последние комментарии

No records to display

Хостинг