Как создать игру ? - Программируем сами. Рассмотрение программирования игр под DirectX 9c на C++ с использованием среды разработки MSVS 2005 или выше. |
||
Продолжаем цикл статей на тему программирования игр. Здесь Мы рассмотрим кратко что нужно для начала работы и как начать освоение этой обширной темы. |
||
Вам потребуется: - среда разработки Microsoft Visual Studio 2005 или выше; - DirectX SDK Aug 2008 или выше; - хотя бы минимальные знания английского языка, а еще лучше запастить программой словарем-переводчиком для англо-русского/русско-английского перевода - X-translator, Lingvo или что-то еще. |
||
Когда всё это будет у Вас под рукой и полностью установлено и готово к работе можно приступать. | ||
Самый первый шаг. | ||
Сначала нужно установить MSVS (Microsoft Visual Studio), затем DirectX SDK. В этому случае в процессе установки DX SDK будет подготовлена среда для программирования под DirectX и многие настройки, особенно отладку DX-приложений Вам не нужно будет перенастраивать вручную. |
||
Несколько уроков на тему создания игр | ||
Сегодня наша цель: - познакомиться с основами работы в среде MSVS; - создать первое простейшее игровое приложение; - попробовать модифицировать его для проверки и отладки; |
||
Запускаем MSVS Выбираем пункт меню File > Open > Project Solution Находим папку с примерами из DirectX SDK - C:\DXSDK_Aug2008\Samples На Вашем компьютере этот путь может быть другим, если Вы при установке DirectX SDK задали другой диск и другую папку, так что вначале уточните, куда Вы установили DX SDK ! |
||
А мы откроем самый первый пример - C:\DXSDK_Aug2008\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice |
||
И попробуем его изучить | ||
После открытия этого проекта в окне Solution Explorer дважды щелкаем файл CreateDevice.cpp, чтобы воочию увидеть этот магический cpp код. | ||
Найдите функцию wWinMain | ||
можете щелкнуть данное изображение, чтобы увидеть его в полномасштабном варианте, затем вернитесь на данную страницу | ||
Рассмотрим этот код по-порядку | ||
INT
WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT ) { // Register the window class WNDCLASSEX wc = { sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle( NULL ), NULL, NULL, NULL, NULL, L"D3D Tutorial", NULL }; RegisterClassEx( &wc );
// Create the application's window
// Initialize Direct3D
// Enter the message loop UnregisterClass(
L"D3D Tutorial", wc.hInstance ); |
||
Данная функция wWinMain - является стартовой функцией работы любого игрового приложения, судя по названию Win - сокращение от Windows и Main - главная. Префикс w означает, что данная функция использует строковые параметры вида WideChar, т. е. двубайтовые строки. |
||
Когда Вы будете запускать данное приложение операционная система в первую очередь передаст управление этой функции - wWinMain. | ||
Я думал писать игры сложно, можете сказать Вы, а оказывается всё начинается с какой-то маленькой функции wWinMain. | ||
Могу ответить Вам одно - всё в этом мире начинается с малого, мой друг ! | ||
Что же происходит внутри этой функции ? //
Register the window class - регистрируем класс окна приложения |
||
Вы наверное уже догадались, что строки начинающиеся с символа двойной наклонной черты // представляют из себя комментарии и исполнимым кодом не являются. Всё остальное представляет действительно исполнимый код, который в процессе компиляции превращается в исполнимый машинный код, доступный для обработки центральным процессором CPU Вашего и любого другого ПК. |
||
Мы создаем переменную wc с типом WNDCLASSEX и заносим в неё значения Данная запись краткая, чтобы Вам было более ясно что здесь происходит приведу более описательный аналог этого кода -
|
||
WNDCLASSEX wc;
|
||
Объявляем переменную wc с типом WNDCLASSEX SecureZeroMemory - очищаем все поля данной переменной значением ноль. Далее присваиваем каждому полю данной записи соответствующее значение - размер записи - получаем при помощи функции sizeof стиль оконная процедура MsgProc Обработчик экземпляра приложения wc.hInstance получаем при помощи функции GetModuleHandle wc.lpszClassName = L"D3D Tutorial"; - задаем имя класса приложения. Все остальные поля выставляются либо в 0, либо в NULL. |
||
0 в случае числовых полей, NULL - в случае полей-указателей. | ||
RegisterClassEx - выполняем регистрацию класса с указанными параметрами в системе. | ||
CreateWindow - создаем окно приложения | ||
if( SUCCEEDED( InitD3D( hWnd ) ) ) - инициализируем приложение и если всё прошло без ошибок - ShowWindow(
hWnd, SW_SHOWDEFAULT ); |
||
//
Enter the message loop запускаем бесконечный цикл приема и обработки сообщений системы, в случае если функция GetMessage вернет FALSE цикл будет остановлен и выполнена строка следующая за строкой цикла - UnregisterClass(
L"D3D Tutorial", wc.hInstance ); |
||
[далее] | ||