fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
21 сентября 2017
4:20
Вход Регистрация Забыли пароль ?

megainformatic - оплата через систему QIWI - выбор продукта
        Вы Выбрали способ оплаты через систему QIWI
подробнее...

Теги

создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт

Статьи сайта

megainformatic cms admin

megainformatic - Моделируем девушку в 3d - Подготовка 2d-эскиза тела человека

megainformatic cms stat kit

megainformatic cms seo

megainformatic - Теория и практика 3d игр - О Кватернионах

megainformatic - Теория и практика 3d игр - Основы теории векторов

megainformatic - Теория и практика 3d игр - Важные замечания

megainformatic - Моделируем девушку в 3d используя 3ds max - Подготовка к моделированию ноги - готовим ширму

megainformatic - Моделируем девушку в 3d используя 3ds max - Выполняем моделирование ноги

megainformatic - Моделируем девушку в 3d используя 3ds max - Улучшаем созданную модель женской ножки

megainformatic cms stat kit

megainformatic - Подводная лодка и подводный мир

megainformatic - megainformatic cms - Форма для смены шаблонов сайта - модуль template selector

megainformatic cms social

megainformatic cms social Руководство пользователя

megainformatic - megainformatic cms - Форма для смены шаблонов сайта - модуль template selector

модуль слайдера

ТЗ на сайт коллективных покупок

модуль slider

megainformatic cms seo

Поддержка сайтом нескольких языков - модуль multi lang

Поддержка сайтом нескольких языков - модуль multi lang

megainformatic - Моделируем девушку в 3d используя 3ds max - другие статьи сборника статей - обзор

установка нового шаблона в joomla 2.5.4

Описание продукта megainformatic cms social

Описание продукта megainformatic cms social

megainformatic - ТЗ на сайт по аналогии rys-stroi.ru

megainformatic cms groupon

megainformatic - дизайн сайта строительной компании УЛЬТРА-СТРОЙ

megainformatic - Тестирование подключения платежной системы

megainformatic - Выпадающее окно регистрации на сайте

megainformatic - Тестирование подключения к платежной системе с использованием скрипта эмулятора

megainformatic - Модуль для регистрации пользователя на сайте

megainformatic - Код для модуля регистрации пользователя на сайте

megainformatic - Быстрый подсчёт ключевых слов в статье

megainformatic - Модуль подсчёта ключевых слов в статье

megainformatic - Онлайн-сервис для подсчёта статистики ключевых слов

megainformatic - Пишем слайдер на javascript с нуля

megainformatic - Логика работы слайдера на javascript

megainformatic - Пишем свою соц. сеть - модуль предложений для webjob

megainformatic - Пишем свою соц. сеть - модуль предложений для webjob - часть реализации для личного кабинета

megainformatic - Пишем свою соц. сеть - Реализация файлового хранилища предложений в csv-файле

megainformatic - Тестирование подключения к платежной системе ЕДИНЫЙ КОШЕЛЕК (w1.ru) с использованием скрипта эмулятора

megainformatic - Пишем свою cms - шаг 1

megainformatic - Пишем свою cms - шаг 2

megainformatic - Пишем свою cms - шаг 3

megainformatic - бесплатная флеш игра freeway fury 2 - разработчик Serius Games

megainformatic - бесплатные флеш игры сторонних разработчиков

megainformatic - Как я осваивал Flash

megainformatic - Список уроков на тему создания flash приложений и игр

megainformatic - Как я осваивал Flash - шаг 2 - Основы создания простейших flash - игр

проект портала Идеи Комфорта

megainformatic - игра Веселый Буквоежка

megainformatic - игра Веселый Буквоежка

megainformatic - Использование cron, crontab и планировщика задач

megainformatic - Совместное использование jquery и mootools или других js-фреймворков

     
  Веселый Буквоежка - игра  
     
 

Как создать игру ? - Программируем сами.

Рассмотрение программирования игр под 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>
#include <d3dx9.h>

//название приложения
#define GameAppName L"Веселый Буквоежка"

INT StartD3DApp();

 

 
     
 

В файле Fle.сpp -

#include "DXUT.h"
#include "SDKmisc.h"

void RenderText();
void InitD3DApp();
void FreeD3DApp();

В методе BOOL CFleApp::InitInstance()

после строки

CWinApp::InitInstance();

изменить -

SetRegistryKey(_T("Fle game"));

код после строк -

CFleDlg dlg;
m_pMainWnd = &dlg;

изменить на -

InitD3DApp();

INT_PTR nResponse = dlg.DoModal();

FreeD3DApp();

return FALSE;

создать реализацию для следующих функций -

 
     
  void InitD3DApp()
{

GetModuleFileName(NULL, AppRootDir, AppRootDirSize);
PathRemoveFileSpec(AppRootDir);

}

void FreeD3DApp()
{

}

void RenderText()
{

// Вспомогательный объект хранит расположение текста и цвет,
// он вызывает метод pFont->DrawText( m_pSprite, strMsg, -1, &rc, DT_NOCLIP, m_clr );
// Если передан NULL в качестве m_pSprite, он будет работать, однако
// метод pFont->DrawText() не будет обработан совместно с методом вывода. Обработка // дополнительных вызовов снижает производительность.

CDXUTTextHelper txtHelper( g_pFont, g_pTextSprite, 10 );

// вывод статистики
txtHelper.Begin();


txtHelper.SetInsertionPos( 4, 0 );
txtHelper.SetForegroundColor( 0xFF0000FF );
txtHelper.DrawTextLine( DXUTGetFrameStats( true ) );

txtHelper.End();
}

 
     
 

//--------------------------------------------------------------------------------------

// Отклонение любых D3D9 устройств не подтвержденных приложением возвратом

// значения false
//--------------------------------------------------------------------------------------

bool CALLBACK IsD3D9DeviceAcceptable( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat,
bool bWindowed, void* pUserContext )
{
// обычно исключаем устройства не поддерживающие alpha blending
IDirect3D9* pD3D = DXUTGetD3D9Object();
if( FAILED( pD3D->CheckDeviceFormat( pCaps->AdapterOrdinal, pCaps->DeviceType,
AdapterFormat, D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING,
D3DRTYPE_TEXTURE, BackBufferFormat ) ) )
return false;

// требуется поддержка текстур формата A8R8G8B8
if( FAILED( pD3D->CheckDeviceFormat( pCaps->AdapterOrdinal, pCaps->DeviceType,
AdapterFormat, 0,
D3DRTYPE_TEXTURE, D3DFMT_A8R8G8B8 ) ) )
return false;

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,
OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
L"MS Sans Serif ", &g_pFont ) );

return S_OK;
}

 
     
  //--------------------------------------------------------------------------------------
// Создавайте здесь любые D3D9 ресурсы которые не существуют во время сброса // // // устройства (D3DPOOL_DEFAULT)
// или привязанные к размеру буфера заднего плана
//--------------------------------------------------------------------------------------

HRESULT CALLBACK OnD3D9ResetDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext )
{
HRESULT hr;

if( g_pFont )
V_RETURN( g_pFont->OnResetDevice() );

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;


// очистка места вывода и z-буфера
V( pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, g_dwClearColor,
1.0f, 0 ) );

// вывод сцены
if( SUCCEEDED( pd3dDevice->BeginScene() ) )
{

RenderText();

V( pd3dDevice->EndScene() );
}
}

 
     
 

//--------------------------------------------------------------------------------------
// обработка сообщений направленных нашему приложению
//--------------------------------------------------------------------------------------

LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
bool* pbNoFurtherProcessing, void* pUserContext )
{

// тут пока ничего не нужно

return 0;
}

 
     
  //--------------------------------------------------------------------------------------
// Освобождение D3D9 ресурсов созданных в методе OnD3D9ResetDevice
//--------------------------------------------------------------------------------------

void CALLBACK OnD3D9LostDevice( void* pUserContext )
{

if( g_pFont )
g_pFont->OnLostDevice();

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

// Настроить функции обратного вызова
DXUTSetCallbackD3D9DeviceAcceptable( IsD3D9DeviceAcceptable );
DXUTSetCallbackD3D9DeviceCreated( OnD3D9CreateDevice );
DXUTSetCallbackD3D9DeviceReset( OnD3D9ResetDevice );
DXUTSetCallbackD3D9FrameRender( OnD3D9FrameRender );
DXUTSetCallbackD3D9DeviceLost( OnD3D9LostDevice );
DXUTSetCallbackD3D9DeviceDestroyed( OnD3D9DestroyDevice );
DXUTSetCallbackDeviceChanging( ModifyDeviceSettings );
DXUTSetCallbackMsgProc( MsgProc );
DXUTSetCallbackFrameMove( OnFrameMove );

// Задачи на будущее: Выполнять любые инициализации уровня приложения здесь

// Инициализировать DXUT и создать желаемое Win32 окно и Direct3D устройство для // // // приложения
DXUTInit( true, true ); // Обрабатывать параметры коммандной строки и показывать окна сообщений
DXUTSetHotkeyHandling( true, false, false ); // обрабатывать горячие клавиши по-умолчанию
DXUTSetCursorSettings( true, true ); // Отображать курсор и ограничивать его границы в полноэкранном режиме

HRESULT hr;
hr = DXUTCreateWindow( GameAppName ); // Создаем окно DirectX-приложения

SetWindowLong( DXUTGetHWND(), GWL_STYLE,
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX); // Указываем // // // // некоторые дополнительные параметры окна - запрет кнопки разворачивания окна во // // весь экран

hr = DXUTCreateDevice( true, 800, 600 ); // создаем d3d-устройство, в оконном режиме, // // рабочая область 800х600 пикселей

// запуск цикла отрисовки
DXUTMainLoop();

// Задачи на будущее: Выполнять любую очистку уровня приложения здесь

return DXUTGetExitCode();

}

 
     
 

Замечу, что код, приведенный здесь не структурирован. Так мне его было проще показать здесь. В реальном своем коде вместо например такого кода -

//--------------------------------------------------------------------------------------
// Освобождение D3D9 ресурсов созданных в методе OnD3D9ResetDevice
//--------------------------------------------------------------------------------------

void CALLBACK OnD3D9LostDevice( void* pUserContext )
{

if( g_pFont )
g_pFont->OnLostDevice();

SAFE_RELEASE( g_pTextSprite );
}

 
     
  Запишите Этот же код в структурированном виде удобном для чтения -  
     
  Этот же код в структурированном виде удобном для чтения должен выглядеть так -  
     
 

После того, как наберете этот код попробуйте выполнить сборку приложения.

Что еще нужно сделать, чтобы устранить ошибки компиляции -

1) Настроить проект для использования заголовочных и библиотечных файлов DirectX - мы это рассматривали еще в самом первом уроке

2) Подключить библиотеку DXUT - по аналогии с тем, как Вы подключали файлы openwebpage.h и .cpp из папки common - см. страницу 2

 

 
     
 

3) Добавить недостающие переменные - записать их в самом начале файла Fle.cpp после строк

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

следующий код -

ID3DXFont* g_pFont = NULL; // шрифт для вывода текста
ID3DXSprite* g_pTextSprite = NULL; // спрайт для обработки вызовов вывода текста
DWORD g_dwClearColor = 0xFF000000; // цвет для заполнения рабочей области окна

 
     
 

4) В файле FleDlg.cpp в методе void CFle2Dlg::OnLButtonUp(UINT nFlags, CPoint point)

строку кода

//StartD3DApp();

исправить на

StartD3DApp();

 
     
  Теперь при нажатии на кнопку <Играть> в окне оболочки, создается окно размером 804х622, заполненное черным и выводящее в левом верхнем углу статистику по FPS.  
     
  при нажатии на кнопку <Играть> в окне оболочки, создается окно размером 804х622, заполненное черным и выводящее в левом верхнем углу статистику по FPS  
     
  Я надеюсь, что Вы разобрались и у Вас всё получилось. Если нет - задавайте вопросы или перепроверьте все свои действия.  
     
  А теперь двинемся дальше - в следующем уроке мы рассмотрим как вывести начальную заставку для Вашей игры.  
     
     
  [содержание] [назад] [страница 3] [далее]  
     
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 0,8446