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


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

megainformatic - Изменение постоянных свойств в зависимости от контекста
Изменение постоянных свойств в зависимости от контекста Представьте красную точку. Допустим Вы считаете - что красный цвет - это лучший цвет. Это отличный цвет, который позволит точке выделиться. Но представьте если точка окажется на крас
подробнее...

Теги

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

Статьи сайта

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 3

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 4

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Уроки Photoshop

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 2

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 3

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 4

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 2

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 3

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 4

megainformatic - Эмулятор игры Ну, Погоди!

megainformatic - Оплата заказа через Сбербанк

megainformatic - Пример игры с исходным кодом Donuts3D

megainformatic - Как создать игру ВЕСЕЛЫЙ БУКВОЕЖКА - программируем сами

megainformatic - Как создать игру ВЕСЕЛЫЙ БУКВОЕЖКА - создаем игровую оболочку

megainformatic - Открытый Полный Исходный код игры Дорога в Город

megainformatic - Как создать игру - Веселый Единственный Буквоежка - программируем основу будущей игры

megainformatic - Как создать игру - Веселый Единственный Буквоежка - выводим заставку

megainformatic - Как создать игру - Веселый Единственный Буквоежка - игровое меню

megainformatic - Как создать игру - Веселый Единственный Буквоежка - движение и анимация героя

Как Создать игру ВЕБ - Веселый Единственный Буквоежка - Программируем сами

Как Создать игру ВЕБ - Веселый Единственный Буквоежка - Программируем сами

megainformatic - Примеры моих работ

megainformatic - Музыкальные темы

megainformatic - Уроки Photoshop - Чудеса

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Онлайн Обучение, Репетитор

megainformatic - Уроки Photoshop - Рисуем и Анимируем

megainformatic - Уроки Photoshop - Рисуем и Анимируем - Урок 1 - Старт

megainformatic - Уроки Photoshop - Рисуем и Анимируем на AllSoft.ru

megainformatic - DirectX 9c - Изучаем пример MultAnimation

megainformatic - megainformatic cms Система Управления Контентом

megainformatic - Темы для WordPress

megainformatic - Что нужно для создания собственного сайта ?

megainformatic - Макет дизайна Вашего сайта

скачать megainformatic cms

megainformatic - Итоги 2010 года

megainformatic - Что нужно для создания собственного сайта ?

megainformatic - как создать инсталлятор для собственной cms

megainformatic - Новости - страница 2

Нововведения в megainformatic cms

Web Администрирование

Уроки Верстки

Система автоматизированной е-майл рассылки

Система автоматизированной е-майл рассылки

megainformatic - Выгрузка файла на сайт

megainformatic - выпадающее меню на html и css

megainformatic - Использование checkbox

Краеугольная особенность работы Web-form на примере смены состояния checkbox

Технологии WEB

Технологии WEB - AJAX-запросы

Часто Задаваемые Вопросы

Продукты

Проблемы с кодировками при отображении страниц

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

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

Рассмотрение программирования игр под 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] [далее]  
     
megainformatic live chat
Начать беседу
X
 

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



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


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
















    
Время загрузки: 0,9363