Программируем игры на DirectX: различия между версиями
Строка 3: | Строка 3: | ||
== Урок 1 - Создание окна. Инициализация Direct3D == |
== Урок 1 - Создание окна. Инициализация Direct3D == |
||
Создадим проект с именем Lesson1. |
Создадим проект с именем Lesson1. Добавляем в проект файл main.cpp и начинаем его заполнять. |
||
Для работы приложения нам требуеться библиотеки d3d9.lib, d3dx9.lib, winmm.lib. Подключим их. |
|||
<source lang="cpp"> |
<source lang="cpp"> |
||
//Подключаем библиотеки |
//Подключаем библиотеки |
||
Строка 9: | Строка 10: | ||
#pragma comment(lib,"d3dx9.lib") |
#pragma comment(lib,"d3dx9.lib") |
||
#pragma comment(lib,"winmm.lib") |
#pragma comment(lib,"winmm.lib") |
||
</source> |
|||
Также нам потребуетьс подключить заголовочные файлы, чтобы компилятор не выдавал ошибку. Подключаем. |
|||
<source lang="cpp"> |
|||
//Подключаем закголовчные файлы |
//Подключаем закголовчные файлы |
||
#include <windows.h> |
#include <windows.h> |
||
#include <d3d9.h> |
#include <d3d9.h> |
||
#include <d3dx9.h> |
#include <d3dx9.h> |
||
</source> |
|||
Объявим глобальные переменные которые будут использованы в приложении |
|||
<source lang="cpp"> |
|||
//Глобальные переменные |
//Глобальные переменные |
||
HWND g_hWnd = NULL; //Дескриптор окна |
HWND g_hWnd = NULL; //Дескриптор окна |
||
Строка 21: | Строка 26: | ||
bool g_bApplicationState = true; //Состояние приложения (true - работает/false - неработает) |
bool g_bApplicationState = true; //Состояние приложения (true - работает/false - неработает) |
||
bool g_bFullScreen = false; //Режим окна (true - полноэкранный/false - оконный) |
bool g_bFullScreen = false; //Режим окна (true - полноэкранный/false - оконный) |
||
</source> |
|||
Объявим прототипы функции которые будут использоваться в приложении |
|||
<source lang="cpp"> |
|||
//Прототипы функций |
//Прототипы функций |
||
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow); |
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow); |
||
long WINAPI WndProc(HWND hWnd,UINT iMsg,WPARAM wParam,LPARAM lParam); |
long WINAPI WndProc(HWND hWnd,UINT iMsg,WPARAM wParam,LPARAM lParam); |
||
</source> |
|||
<source lang="cpp"> |
|||
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow) |
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow) |
||
{ |
{ |
Версия от 18:54, 28 ноября 2009
Введение
В этом учебнике я постараюсь научить вас программировать игры на языку С++ с помощью DirectX SDK. Программировать мы будем с вами для операционной системы Windows XP. В этом учебнике мы охватим такие важные темы как графика, музыка, физика, искусственный интеллект. Для применение полученных знаний мы напишем пару игр. Код используемый в книге был написан мною в среде Microsoft Visual C++ 6.0 с использованием DirectX SDK November 2009.
Урок 1 - Создание окна. Инициализация Direct3D
Создадим проект с именем Lesson1. Добавляем в проект файл main.cpp и начинаем его заполнять. Для работы приложения нам требуеться библиотеки d3d9.lib, d3dx9.lib, winmm.lib. Подключим их.
//Подключаем библиотеки
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
#pragma comment(lib,"winmm.lib")
Также нам потребуетьс подключить заголовочные файлы, чтобы компилятор не выдавал ошибку. Подключаем.
//Подключаем закголовчные файлы
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
Объявим глобальные переменные которые будут использованы в приложении
//Глобальные переменные
HWND g_hWnd = NULL; //Дескриптор окна
int g_iWindowWidth = 800; //Ширина окна
int g_iWindowHeight = 600; //Высота окна
bool g_bApplicationState = true; //Состояние приложения (true - работает/false - неработает)
bool g_bFullScreen = false; //Режим окна (true - полноэкранный/false - оконный)
Объявим прототипы функции которые будут использоваться в приложении
//Прототипы функций
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow);
long WINAPI WndProc(HWND hWnd,UINT iMsg,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX); //Размер структуры
wc.style = CS_HREDRAW|CS_VREDRAW; //Стили класса окна
wc.lpfnWndProc = WndProc; //Функция обработки сообщений
wc.cbClsExtra = 0; //Количество выделяемой памяти при создании приложения
wc.cbWndExtra = 0; //Количество выделяемой памяти при создании приложения
wc.hInstance = hInstance; //Дескриптор приложения
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); //Загружаем стандартную иконку
wc.hCursor = LoadCursor(0,IDC_ARROW); //Загружаем стандартный курсор
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //Окно будет закрашено в белый цвет
wc.lpszMenuName = 0; //Не используем меню
wc.lpszClassName = "Lesson 1"; //Названия класса
wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION); //Загружаем стандартную иконку
if(!RegisterClassEx(&wc)) //Регестрируем класс в Windows
{
MessageBox(NULL,"Can`t register window class","Error",MB_OK|MB_ICONERROR); //Выводим сообщение
return 0; //Завершаем работу приложения
}
DWORD iWindowStyleEx = 0;
DWORD iWindowStyle = 0;
if(g_bFullScreen) //Если у нас поноэкранный режим
{
iWindowStyleEx = WS_EX_APPWINDOW;
iWindowStyle = WS_POPUP;
}
else
{
iWindowStyleEx = WS_EX_APPWINDOW|WS_EX_WINDOWEDGE;
iWindowStyle = WS_OVERLAPPEDWINDOW;
}
g_hWnd = CreateWindowEx( //Создаем окно
iWindowStyleEx, //Расшыренный стиль окна
"Lesson 1", //Названия класса окна
"Lesson 1 - Create Window. Init Direct3D", //Названия окна
iWindowStyle|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, //Стиль окна
0, //Позиция окна по оси Х
0, //Позиция окна по оси У
g_iWindowWidth, //Ширина окна
g_iWindowHeight, //Высота окна
NULL, //У нас это окно главное
NULL, //Нету меню
hInstance, //Дескриптор приложения
NULL); //Дополнительный настройек неиспользуем
if(g_hWnd == NULL) //Если не создали окно
{
MessageBox(NULL,"Can`t create window","Error",MB_OK|MB_ICONERROR); //Выводим сообщение
return 0; //Завершаем работу приложения
}
ShowWindow(g_hWnd,SW_SHOW); //Отображаем окно
UpdateWindow(g_hWnd); //Обновляем окно
SetFocus(g_hWnd); //Устанавливаем фокус на наше окно
SetForegroundWindow(g_hWnd); //Устанавливаем высший приоритет окна
MSG msg;
ZeroMemory(&msg,sizeof(msg));
while(g_bApplicationState)
{
if(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0; //Завершаем работу приложения
}
long WINAPI WndProc(HWND hWnd,UINT iMsg,WPARAM wParam,LPARAM lParam)
{
switch(iMsg)
{
case WM_DESTROY:
{
g_bApplicationState = false;
return 0;
}
}
return DefWindowProc(hWnd,iMsg,wParam,lParam);
}