Данный материал взят с сайта old.shatalov.su и является его зеркалом

Создаём компьютерную игру. Создание игр на C++/DirectX

Есть вопросы?
Ошибка на сайте?
рус eng esp
Внимание! Данный сайт не обновляется. Новая версия: shatalov.su

Установка DirectX SDK и directx end-user runtimes

Дата создания: 2009-03-31 15:25:43
Последний раз редактировалось: 2012-02-08 08:19:22

    Ссылки на программы:
  1. DirectX End-User Runtimes (directx для запуска игр) июнь 2010. Скачать (95 мегабайт).
  2. DirectX SDK (directx для программирования) июнь 2010. Скачать (2 мегабайта).

DirectX - набор библиотек, предназначенных прежде всего для вывода графики.

Для того чтобы писать программы, в которых используется DirectX, нужно установить Directx sdk. Для запуска программ написанных с использованием DirectX, необходимо установить directx end-user runtimes. В данном уроке мы рассмотрим установку обоих компонентов.

Для разных версий DirectX используются одни и те же файлы: DirectX 9.0c на Windows XP, DirectX 10 на Windows Vista и DirectX 11 на Windows 7 - для всех этих версий подходят одни и те же установочные файлы. Т.е. для всех версий Windows нужен один и тот же архив с установочными файлами DirectX End-User Runtimes или DirectX SDK.

Установка DirectX End-User Runtimes (directx для запуска игр)

Для запуска игр и программ, написанных с использованием библиотеки Directx нужно установить directx end-user runtimes.

На вашем компьютере уже установлена одна из версий DirecX end-user runtimes. Для программ, которые мы будем создавать, вполне достаточно и старых версий, и если вам не нужна последняя версия DirectX end-user runtimes, можете переходить к следующему пункту.

Последняя на данный момент (июль 2010) версия directx end-user runtimes вышла в июне 2010г. Найти последнюю версию можно на диске с какой-нибудь недавно вышедшей игрой или скачать по ссылке в начале урока.

После того как вы скачали и запустили файл directx_jun2010_redist.exe, появится окно с лицензионным соглашением:

После нажатия на кнопку Yes, нужно будет ввести путь к временной папке, куда будет распакован архив:

После того как архив распаковался, нужно перейти в указанную вами временную папку и запустить файл DXSETUP.exe. Откроется вот такое окно:

Теперь нужно нажать два раза Далее и начнётся установка.

Всё. С установкой DirectX end-user runtimes мы закончили. Теперь, для того чтобы создавать программы, использующие возможности directx, нужно установить directx sdk. Но сначала небольшой урок истории:

Немного истории directx sdk

Прежде чем приступать к чтению уроков из данного раздела (DirectX), вы должны были изучить большую часть материалов из раздела C++. Скорее всего у вас возник ряд вопросов. И самый главный из них: как используя изученный материал, начать создавать свою игру? Ниже я попытаюсь ответить на него. По крайней мере, вы узнаете теорию. Практикой же мы займёмся позже.

До сих пор наши программы работали в досовской консоли. При этом мы использовали язык C++.

C++ - это основа. Не зная этого языка, вы не сможете создать какую-нибудь игру. Конечно адепты Паскаля, Бейсика или Фортрана (если такие есть :)) могут возразить, что на этих языка тоже можно создавать о-го-го какие игры!!! Только о-го-го какими, они были в середине восьмидесятых. Тогда, да, они выглядели очень круто.

Сейчас я расскажу вам очень важную вещь. Она простая, и возможно вы её уже знаете. По крайней мере, если бы кто-нибудь объяснил мне это лет десять назад, возможно вся моя жизнь сложилась бы по-другому.

Итак: "у компьютеров есть слои" (С) Шрек. :) Извините, не сдержался.

У компьютеров есть уровни. Самый низкий уровень - уровень физических элементов (транзисторы и провода). Самый высокий (из тех, что мы пока знаем) - это язык C++. Именно поэтому он называется языком высокого уровня. Между этими уровнями расположено ещё несколько: микроархитектурный уровень (на этом уровне идёт общение с процессором), уровень операционной системы, уровень языка ассемблера (ассемблер - язык низкого уровня).

Когда мы начинаем выполнение программы, команды на языке C++ переводятся на более низкие уровни. На самом нижнем уровне эти команды выполняются непосредственно электрическим сигналом. Одна команда более высокого уровня может состоять из нескольких команд более низкого.

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

В конце восьмидесятых - начале девяностых не существовало (точнее они ещё не получили широкого распространения) более высоких абстракций (уровней) чем язык программирования. В нашем случае - это C. Все приложения писались на языке высокого уровня: Pascal, C, Fortran. Создание графики и графических приложений происходило непосредственно на языке высокого уровня.

Тут что надо заметить! Большинство языков программирования высокого уровня обладают примерно равными возможностями. Будь то Pascal, Java или С++. Понятно, что у некоторых этих возможностей побольше, у других поменьше. Но у них много общего: у всех есть циклы и ветвления, функции, переменные.

Ходят слухи, что изучить C++ намного сложнее, чем Pascal или другие языки программирования. Надеюсь, что изучая материал из раздела C++, вы убедились, что это не так.

На мой взгляд, распространённое мнение о сложности C++ - это результат наглой и бессовестной диверсии со стороны адептов Delphi! На самом деле Pascal намного сложнее в изучении. Вы только подумайте, они вместо скобочек { } используют begin и end!!! А как они выполняют присваивание - оператором := (да-да, двоеточие и знак равенства). Короче, настоящий дурдом!

Когда появились видеоускорители, программистам приходилось писать отдельный код для каждого!!! Зайдите в любой интернет-магазин торгующий видеокартами и представьте, что Вам пришлось бы писать отдельный код для каждой видеокарты. В общем, перед программистами появилась серьёзная проблема.

В середине девяностых очень быстро начала распространяться операционная система Windows. Первоначально Windows была написана на C (не на C++, нет. Т.е. там не было классов). Windows до сих пор использует часть старого кода. Когда мы начнём создавать приложения под Windows, мы познакомимся с ещё более высоким уровнем - WinAPI (Windows API). WinAPI используют все приложения под Windows.

WinAPI (API - Application Programming Interface. Интерфейс программирования приложений) - представляет собой набор функций и структур, написанных на C.

В Windows использовалась (и используется) своя система вывода графики. Называется она - GDI (расшифровывается как Graphical Device Interface - интерфейс графического устройства, а не Global Defence Initiative как мог подумать особо проницательный и эрудированный читатель).

GDI в силу особенностей WinAPI не годилась для создания игр. Потому что GDI - оооочеееень меееедлеееннаааааяяя. Кстати, если заглянуть на форумы приспешников Delphi, можно обнаружить, что многие пытаются создавать игры с использованием GDI. Я же говорю, это больные люди. Так вот, разработчики игр не спешили создавать игры под Windows, им было привычнее работать под старой доброй DOS.

И тогда Microsoft создаёт DirectX. Первая версия была полным отстоем. Но время шло, и DirectX становился всё более надёжным. В новой операционной системе Windows 7 уже будет доступна одиннадцатая версия.

Мы будем разбирать примеры для девятой версии. Отличия между девятой и десятой существенные. Возможно, в будущем мы рассмотрим и десятую, хотя скорее всего, сразу перейдём на одиннадцатую.

Что же из себя представляет DirectX. Это высокоуровневая API, которая написана на С++, с использованием технологии COM (Component Object Model - компонентная модель объектов. Мы её кратко рассмотрим). DirectX предназначена для работы с драйверами видеокарт. Для каждой видеокарты создаются драйвера (язык команд, которые понимает видеокарта). Программисту больше не нужно писать отдельный код для каждого драйвера каждой видеокарты. Ему нужно только знать API DirectX. Всю низкоуровневую работу (взаимодействие с драйверами) берёт на себя DirectX.

Справедливости ради, нужно сказать, что существует ещё одна популярная библиотека - OpenGL. Принцип работы - примерно тот же: программист работает с API, а сама OpenGl работает с драйверами. Неоспоримое преимущество OpenGL - мультиплатформенность. Т.е. OpenGL будет работать на всех операционных системах. DirectX работает только на Windows. Преимущества DirectX мы рассмотрим позднее (а они есть, и они, на мой взгляд, гораздо существеннее).

Для того чтобы запускать программы, написанные с использованием DirectX, вам необходим DirectX End-User Runtimes (мы его установили в предыдущем пункте).

Чтобы писать приложения, использующие DirectX, нужно скачать DirectX SDK (Software Development Kit - набор инструментов разработки приложений).

У Вас на выбор два варианта установки directx sdk:

1. Скачивание DirectX SDK с сайта Microsoft. При этом Вы скачаете полный вариант со всеми примерами, документацией и дополнительными инструментами. Размер архива - примерно 580 мегабайт. При установке DirectX SDK займёт больше гигабайта.

2. Скачивание DirectX SDK с вашего любимого сайта (ссылка в начале урока). При этом Вы скачаете урезанный мной вариант, в котором я оставил только библиотечные/заголовочные файлы и один пример. Размер архива - 2 мегабайта (два мегабайта!!!). Что называется, прочувствуй разницу! При установке, DirectX SDK займёт двадцать семь мегабайт.

Внимание:
Если вы переустанавливаете DirectX SDK, то обязательно удалите предыдущую версию (через Установку и удаление программ). Устанавливать новую версию DirectX SDK поверх старой крайне нежелательно. Это замечание касается только полной версии DirectX SDK. Для урезанной версии достаточно заменить папки lib и include.

Установка directx sdk с сайта Microsoft

Заходим на домашнюю страницу DirectX.

Домашняя страница DirectX

И щёлкаем на ссылку - Get The Latest DirectX SDK или June 2009 DirectX SDK Now Available (последняя на данный момент версия вышла в июне).

Откроется страница, с которой можно скачать последнюю на данный момент версию DirectX SDK - от девятого августа.

Итак, на следующей странице нажимаете на кнопку Download. Появится диалог сохранения файла и начнётся скачивание directx sdk:

DirectX SDK

Кстати, в одной из последних версий DirectX были добавлены технические обзоры двух новых технологий, которые будут использоваться в DirectX 11: Direct2D и DirectWrite. Если знаете английский, обязательно посмотрите соответствующие разделы в MSDN: Direct2d и DirectWrite. Я когда готовил урок, два часа в документации просидел. Жалко, что протестировать не удалось. Думаю, в будущем мы обязательно будем обсуждать данные технологии в рассылке.

После скачивания установочного файла запускаем его. Дальнейший процесс щёлканья на кнопку "Next" я проиллюстрирую картинками:

Установка DirectX SDK

Далее начнётся установка.

Скачать и установить DirectX SDK с сайта

Тут всё намного проще и быстрее. Щёлкаете по ссылке, расположенной в начале урока. Или в разделе Листинги и программы ищете "DirectX SDK", загружаете файл на свой компьютер и распаковываете. У себя я распаковал архив в корневой каталог диска D. В итоге установочная папка выглядит так: D:\directx\

Небольшое замечание: я много чего вырезал, чтобы уменьшить архив. В будущем, Вам нужно будет скачать ещё несколько файлов, о чём будет сообщено дополнительно. Они тоже будут небольшими.

После установки directx sdk

Напоследок давайте посмотрим, как оно работает.

Для того чтобы во время выполнения программы работали библиотеки DirectX, в программу нужно включить соответствующие заголовочные файлы. Кроме того необходимы библиотечные файлы. Что это такое? Мы с ними пока не сталкивались. Как мы знаем, в заголовочных файлах хранятся объявления функций. Тела функций обычно хранятся в другом месте. В уроке по многофайловым программам мы хранили тела функций в отдельных исходных файлах. В случае если вы приобретаете библиотеку функций и классов у кого-нибудь, вы получаете заголовочные файлы (где хранятся объявления) и библиотечные файлы (где хранятся определения). Библиотечные файлы имеют расширение .lib.

В данный момент IDE не знает о существовании DirectX. Нам нужно сообщить, где IDE Visual C++ 2008 должна искать заголовочные и библиотечные файлы.

Откройте пункт меню Tools → Options (Сервис → Параметры).

Создание трёхмерных компьютернхы игр с нуля

В левой части открывшегося окна выберите Projects and Solutions → VC++ Directories (Проекты и решения → Директории VC++):

Создание трёхмерных компьютернхы игр с нуля

В правой части в выпадающем списке Show directories for (Показать директории для:) выберите Include files (Включаемых файлов, за точное имя пункта на русском не ручаюсь, он там второй). Затем из панели инструментов выберите New Line (Новая строка) или щёлкните Ctrl+Ins. Для более наглядной иллюстрации смотрите картинку. Появится новая строка. Щёлкните на кнопку с тремя точками в конце строки

Откроется окно выбора директории. Перейдите в папку, где у вас установлен DirectX. И выберите папку Include.

Теперь в выпадающем списке (где вы выбирали Include files) выберите Library files (библиотечные файлы) и повторите операцию добавления строки. Только теперь выберите папку Lib/x86 если у Вас 32-ух разрядная операционная система или Lib/x64 если 64-ёх разрядная. Иногда, при использовании 64-битных библиотек, во время запуска программ возникают ошибки, поэтому, если программа, использующая DirectX, у вас не запустилась, вернитесь к этому окну и для поля Library files выберите папку Lib/x86.

Нажимаем OK. Теперь IDE знает, где искать заголовочные и библиотечные файлы DirectX SDK.

Запуск приложения

Теперь открываем проект File - Open - Project/Solution или щёлкаем Ctrl+Shift+O.

Если вы загружали SDK с сайта Microsoft, то пример находится в папке (D:\directx - папка, куда я установил свою версию):D:\directx\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice

Если вы загружали SDK с моего сайта, проект можно найти по адресу (D:\directx - папка, куда я установил свою версию): D:\directx\Samples\Tut01_CreateDevice

В папке лежат два решения: для Visual C++ 2005 и для Visual C++ 2008. Выберите решение, соответствующее вашей версии Visual C++.

Теперь нажимаем Ctrl+Alt+F7 и F5.

Вот она!!! Первая программа использующая DirectX.

Прежде чем закрывать IDE, давайте взглянем на код.

В обозревателе решений выберите файл CreateDevice.cpp. Если вы бегло просмотрите весь файл, то скорее всего ничего не поймёте.

Как это ни удивительно :), но структура программы очень похожа на то, что мы уже создавали: директивы #include, функции InitD3D(), CleanUp(), Render(), MsgProc().

Функция wWinMain - аналог main. С неё начинается выполнение программы в Windows.

В строках объявления переменных:
LPDIRECT3D9 g_pD3D = NULL; // Used to create the D3DDevice
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Our rendering device

Встречаются новые типы. На самом деле они переопределены с помощью typedef (который мы уже рассматривали) из стандартных типов.

Кое-что нам не знакомо:
g_pD3D->CreateDevice
Здесь, g_pD3D - объект, а CreateDevice() - метод. Почему используется синтаксис -> вместо привычной для нас точки мы узнаем в одном из следующих уроков.

Да, здесь используется много новых типов, много новых функций, но всё же за всей этой мишурой можно угадать уже привычный (надеюсь, что это действительно так) для нас C++.

На сегодня всё.