Как создать игру ? - Программируем сами. Рассмотрение программирования игр под DirectX 9c на C++ с использованием среды разработки MSVS 2005 или выше. |
||
[содержание] [назад] [страница 3] [далее] | ||
Введение в 2d-игры - D3DApp - Внедряем простейшее d3d-приложение | ||
В предыдущем уроке Мы с Вами создали простейшую игровую оболочку, которая выполняет запуск игры или показ веб-страничек <Купить> или <Еще игр>, подразумевая приобретение полной версии игры или показ других проектов. | ||
Я надеюсь, что Вы нашли ответ на все свои вопросы, а предложенный метод решения у Вас привел к положительному результату. Если вопросы еще остались - советую практиковаться или задавать вопросы на нашем форуме и по e-mail (см. внизу данной страницы) | ||
В данном уроке, как я и обещал, мы приступим к созданию основы будущей нашей игры Веселый Буквоежка. По сути игра уже готова - Вам полностью доступен для покупки ПОЛНЫЙ ИСХОДНЫЙ КОД игры ВЕСЕЛЫЙ БУКВОЕЖКА за символическую плату - 200 рублей. | ||
Данный и последующий уроки позволят Вам понять смысл работы исходного кода игры Веселый Буквоежка, предоставят дополнительные сведения не только как модифицировать этот код, но и создать на основе него нечто своё, а в дальнейшем полученные знания позволят Вам создать любой игровой проект. Как я уже упоминал, сейчас мы займемся рассмотрением реализации функции StartD3DApp. |
||
Здесь и далее я буду подразумевать, что наш проект называется Fle, если не указано иное. В соответствии с этим условием будут называться и многие связанные с проектом файлы. Вы вольны назвать собственный проект как угодно - учитывайте только, что вместо Fle нужно подставлять имя Вашего собственного проекта. | ||
Пока что наше приложение обходилось без использования DirectX-кода. Теперь мы рассмотрим как внедрить код DirectX. | ||
1) Откройте настройки проекта - Project > Fle Properties и в разделе Configuration Properties > C/C++ > General в поле Additional Include Directories пропишите пути к следующим папкам -
|
||
..\..\..\..\..\Include\; common\DXUT\Core; common\DXUT\Optional; common; common\DMusic; game_common; fmod4_api\inc; fmod4_api\src; common\DSound |
||
заметьте, что здесь указаны относительные пути, т. е. папка Include представляет папку с заголовочными файлами из DirectX SDK и расположена на пять папок выше относительно текущей папки проекта Fle. Остальные папки должны находиться внутри папки проекта Fle. Их содержимое находится в ПОЛНОМ ИСХОДНОМ КОДЕ игры Веселый Единственный Буквоежка, который Вы можете приобрести. | ||
Configuration Properties > Linker > General в поле Additional Library Directories ..\..\..\..\..\Lib\x86; fmod4_api\lib |
||
Configuration Properties > Linker > Input в поле Additional Dependencies для конфигурации Debug dxerr.lib dxguid.lib d3dx9d.lib d3d9.lib comctl32.lib dsound.lib shlwapi.lib dinput8.lib winmm.lib fmodexL_vc.lib для конфигурации Release dxerr.lib dxguid.lib d3dx9.lib d3d9.lib comctl32.lib winmm.lib dsound.lib shlwapi.lib dinput8.lib fmodex_vc.lib |
||
Сохраните эти изменения используя кнопку Save All на стандартной панели инструментов. | ||
2) Вам постепенно будут требоваться для работы те или иные файлы из ПОЛНОГО ИСХОДНОГО КОДА игры Веселый Единственный Буквоежка, поэтому подумайте о его приобретении, либо Вам придется создавать собственные аналоги, правда зато Вы сможете сделать это совершенно бесплатно. | ||
Для начала попробуем внедрить в наше приложение код, аналогичный уроку Самый первый шаг, т. е. при нажатии кнопки <Играть> в окне нашей игровой оболочки будет выполняться создание окна и заполнение его рабочей области одним цветом средствами DirectX, а далее мы будем постепенно наращивать этот потенциал. | ||
В файле Fle.h добавляем следующие строки кода - #include
<d3d9.h> //название
приложения INT StartD3DApp();
|
||
В файле Fle.сpp - #include
"DXUT.h" void
RenderText(); В методе BOOL CFleApp::InitInstance() после строки CWinApp::InitInstance(); изменить - SetRegistryKey(_T("Fle game")); код после строк -
CFleDlg dlg; изменить на -
InitD3DApp(); return FALSE; создать реализацию для следующих функций - |
||
void
InitD3DApp() { GetModuleFileName(NULL, AppRootDir, AppRootDirSize); } void
FreeD3DApp() } void
RenderText() //
Вспомогательный объект хранит расположение текста и цвет,
// вывод статистики
txtHelper.End(); |
||
//-------------------------------------------------------------------------------------- // Отклонение любых D3D9 устройств не подтвержденных приложением возвратом
// значения false
// требуется поддержка текстур формата A8R8G8B8
return true; |
||
//-------------------------------------------------------------------------------------- // Модифицировать настройки d3d device до его создания - true //-------------------------------------------------------------------------------------- bool CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings, void* pUserContext ) { return true; } |
||
//-------------------------------------------------------------------------------------- // создавайте здесь любые D3D9 ресурсы, которые будут существовать до выполнения // // сброса устройства (D3DPOOL_MANAGED) // и не привязанные к размерам буфера заднего плана //-------------------------------------------------------------------------------------- HRESULT CALLBACK OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ) { HRESULT hr;
V_RETURN( D3DXCreateFont( DXUTGetD3D9Device(), 12, 0, 0, 1, FALSE, DEFAULT_CHARSET,
return S_OK; |
||
//-------------------------------------------------------------------------------------- // Создавайте здесь любые D3D9 ресурсы которые не существуют во время сброса // // // устройства (D3DPOOL_DEFAULT) // или привязанные к размеру буфера заднего плана //-------------------------------------------------------------------------------------- HRESULT CALLBACK OnD3D9ResetDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ) { HRESULT hr;
if( g_pFont ) V_RETURN( D3DXCreateSprite( pd3dDevice, &g_pTextSprite ) );
// reset the timer
return S_OK; |
||
//-------------------------------------------------------------------------------------- // Обработка изменений сцены. Вызывается в соответствии с тем какой D3D API // // // // // используется //-------------------------------------------------------------------------------------- void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext ) { } |
||
//-------------------------------------------------------------------------------------- // Вывод сцены с использованием устройства D3D9 //-------------------------------------------------------------------------------------- void CALLBACK OnD3D9FrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext ) { HRESULT hr;
// вывод сцены RenderText();
V( pd3dDevice->EndScene() ); |
||
//-------------------------------------------------------------------------------------- //
тут пока ничего не нужно
return 0; |
||
//-------------------------------------------------------------------------------------- // Освобождение D3D9 ресурсов созданных в методе OnD3D9ResetDevice //-------------------------------------------------------------------------------------- void CALLBACK OnD3D9LostDevice( void* pUserContext ) {
if( g_pFont )
SAFE_RELEASE( g_pTextSprite ); |
||
//-------------------------------------------------------------------------------------- // Освобождение D3D9 ресурсов созданных в методе OnD3D9CreateDevice //-------------------------------------------------------------------------------------- void CALLBACK OnD3D9DestroyDevice( void* pUserContext ) { SAFE_RELEASE( g_pFont ); |
||
//-------------------------------------------------------------------------------------- // Инициализировать всё и перейти в цикл отрисовки //-------------------------------------------------------------------------------------- INT StartD3DApp() { // Включить проверку памяти времени выполнения для отладочной конфигурации. #if defined(DEBUG) | defined(_DEBUG) _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); #endif
// Настроить функции обратного вызова // Задачи на будущее: Выполнять любые инициализации уровня приложения здесь
// Инициализировать DXUT и создать желаемое Win32
окно и Direct3D устройство для // // // приложения
HRESULT hr;
SetWindowLong( DXUTGetHWND(), GWL_STYLE, hr = DXUTCreateDevice( true, 800, 600 ); // создаем d3d-устройство, в оконном режиме, // // рабочая область 800х600 пикселей
// запуск цикла отрисовки // Задачи на будущее: Выполнять любую очистку уровня приложения здесь return DXUTGetExitCode(); } |
||
Замечу, что код, приведенный здесь не структурирован. Так мне его было проще показать здесь. В реальном своем коде вместо например такого кода - //--------------------------------------------------------------------------------------
if( g_pFont )
SAFE_RELEASE( g_pTextSprite ); |
||
Запишите Этот же код в структурированном виде удобном для чтения - | ||
После того, как наберете этот код попробуйте выполнить сборку приложения. Что еще нужно сделать, чтобы устранить ошибки компиляции - 1) Настроить проект для использования заголовочных и библиотечных файлов DirectX - мы это рассматривали еще в самом первом уроке 2) Подключить библиотеку DXUT - по аналогии с тем, как Вы подключали файлы openwebpage.h и .cpp из папки common - см. страницу 2
|
||
3) Добавить недостающие переменные - записать их в самом начале файла Fle.cpp после строк #ifdef
_DEBUG следующий код - ID3DXFont*
g_pFont = NULL; // шрифт для вывода текста |
||
4) В файле FleDlg.cpp в методе void CFle2Dlg::OnLButtonUp(UINT nFlags, CPoint point) строку кода //StartD3DApp(); исправить на StartD3DApp(); |
||
Теперь при нажатии на кнопку <Играть> в окне оболочки, создается окно размером 804х622, заполненное черным и выводящее в левом верхнем углу статистику по FPS. | ||
Я надеюсь, что Вы разобрались и у Вас всё получилось. Если нет - задавайте вопросы или перепроверьте все свои действия. | ||
А теперь двинемся дальше - в следующем уроке мы рассмотрим как вывести начальную заставку для Вашей игры. | ||
[содержание] [назад] [страница 3] [далее] | ||
игры, сервисы
|
||||||||||
видео-рассказ, уроки godot, виртуальный помощник по поиску информации
|
||||||||||
игры Многоликий: dress - hordes эпизоды с 1 по 4
|
||||||||||
игры, музыкальные клипы
|
||||||||||
музыкальный клип, игры
|
||||||||||
разработка игр, анимационный фильм, новогодняя дискотека 2020 - песни на итальянском, игра про лифт
|
||||||||||
игры, инструменты разработки, анимационный фильм, фильм.
|
||||||||||
игры
|
||||||||||
игры в браузере
|
||||||||||
игры в браузере
|
||||||||||
игры в браузере
|
||||||||||
игры в браузере
|
||||||||||
игры в браузере (3), создание музыки в браузере (1)
|
||||||||||
игры в браузере
|
||||||||||
игры в браузере
|
||||||||||
игры в браузере
|
||||||||||
игры в браузере (3), скачиваемые (1)
|
||||||||||
игры в браузере
|
||||||||||
игры в браузере, скачиваемые игры
|
||||||||||
игры в браузере
|
||||||||||
игры в браузере
|
||||||||||
полезный софт, игры в браузере
|
||||||||||
сервисы, игры
|
||||||||||
игры, программы
|
||||||||||
поздравления, уроки рисования, уроки создания сайтов
|
||||||||||
комиксы, музыка, рассказы
|
||||||||||
игра для разработки, калькулятор услуг, cms, комикс
|
||||||||||
игры для разработки, комиксы
|
||||||||||
игры шарики и ямки, комиксы про Костю Коробкина, ria xxl игра, fly snow 3d генератор эффектов снега, частиц и др. -
|
||||||||||
Создай свою игру на fle game engine -
|
||||||||||
Для создания сайта - модуль отзывов/комментариев для вашего сайта в составе megainformatic cms express files -
|
||||||||||
Уроки Flash, бесплатные Flash - игры.
|
||||||||||
Поддержка сайтом нескольких языков (multi lang), создание собственной системы личных кабинетов, соц. сети или фриланс - биржи (megainformatic cms social), создание сервиса коллективных покупок на базе megainformatic cms groupon, онлайн сервис подсчёта статистики ключевых слов в статьях вашего сайта keywords gen + описание кода данного сервиса, с возможностью бесплатно реализовать его аналог на своём собственном сайте.
megainformatic.ru/webjob/ - сервис для фриланс проектов - место встречи заказчиков и исполнителей |
||||||||||
Социальная сеть megainformatic.ru/webjob/
megainformatic.ru/webjob/ - сервис для фриланс проектов - место встречи заказчиков и исполнителей |
||||||||||
Системы управления сайтом, уроки
megainformatic cms admin - простая и компактная система для работы и управления сайтом |
||||||||||
|
||||||||||
|
||||||||||
megainformatic cms free и серия продуктов - Уроки Photoshop
Данная серия посвящена описанию приемов и методов создания изображений, с помощью инструментария программы Adobe Photoshop. Кроме того, многие описанные средства могут вам помочь при освоении и многих других программ для работы с растровой графикой - GIMP, Corel Photo Paint и других.
|
||||||||||
бесплатные игры 2d и 3d, а также эмулятор Ну, Погоди!
Это серия распространяемых бесплатно игр. Вы не только можете поиграть, но и скачать исходники, получив тем самым возможность внести изменения в игру или создать новую !!! (эмулятор Ну, Погоди! распространяется платно). |
||||||||||
серия игр про Веселого Буквоежку, и бесплатно распространяемая игра Нечто: Необъяснимое - в плену желаний
Здесь представлены новинки жанра - Говорящий Комикс, Настольная игра, А также продукт, который позволит Вам научиться создавать игры самостоятельно. Ну и конечно изюминка в своём роде - бесплатная игра - Нечто: Необъяснимое - в плену желаний |
||||||||||
Серия бесплатных онлайн уроков, посвященных 3ds max, photoshop, c++, directx, delphi и php.
Описаны практические примеры решения различных задач, возникающих при создании игр и сайтов. Продукты Набор разработчика и Ваше Визуальное Шоу распространяются платно. |
||||||||||
уроки и продукты различной тематики
Бесплатные Уроки Photoshop free, Бесплатные Уроки по программированию на delphi directx - Как создать игру Ну, Погоди!, Бесплатная Авторская музыка в формате mp3 - Музыкальные Миры, Платно распространяемый продукт megainformatic cms express - система для быстрого создания Вашего сайта на php + my sql. |
||||||||||
Проекты игр, уроки
Игра Веселый Буквоежка, уроки delphi directx 8.1 для начинающих (описываются основы 3d игр), моделируем девушку в 3d studio max, уроки музыки - пишем музыку в Fruity Loops Studio |
||||||||||
|