PMG http://forum.pmg.org.ru/ |
|
Код инициализации движка2 http://forum.pmg.org.ru/viewtopic.php?f=19&t=6521 |
Страница 1 из 2 |
Автор: | Inferno7000 [ 20 фев 2008 19:34 ] |
Заголовок сообщения: | Код инициализации движка2 |
Когда я понял, что мне не потянуть трехмерную игру, я решил для начала написать двумерную игру. Всвязи с этим решил переписать весь движок с нуля. Вот новый код инициализации движка: Код: #include "winmain.h"
#include "video.h" #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) int Init_Game(); int Run_Game(); int Shutdown_Game(); ////////////////////////////////////////////////////////////////////////// int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { Create_Window(); Init_Game(); Loop_Game(Run_Game); Shutdown_Game(); return 0; } ////////////////////////////////////////////////////////////////////////// int Init_Game() { Init_Video(1024,768,32); return 0; } ////////////////////////////////////////////////////////////////////////// int Run_Game() { Begin_Render(); End_Render(); if(KEY_DOWN(VK_ESCAPE)) { PostMessage(hwnd,WM_DESTROY,0,0); } return 0; } ////////////////////////////////////////////////////////////////////////// int Shutdown_Game() { Shutdown_Video(); return 0; } ////////////////////////////////////////////////////////////////////////// Хотелось бы услышать критику и предложения по коду инициализации движка. Жду ваших отзывов. ![]() |
Автор: | MagicWolf [ 21 фев 2008 12:16 ] |
Заголовок сообщения: | |
Да вроде ничего плохого. Движок все же это работа с объектами на сцене. |
Автор: | GameX32 [ 21 фев 2008 16:30 ] |
Заголовок сообщения: | |
Уважаемый Inferno7000 заранее прошу прощения за жесткую критику. Лично в моем понимании Движок это следующее: * Набор КЛАССОВ для работы с устройством рендеринга(CDevice), текстурами (CTexture), моделями (CModel).... * Движок состоит из нескольких слоев составляющих иерархию и предоставляющих сервисные функции друг другу. * Он выполняет общие функции и незаточен под конкретную игру(т.е. базовый уровень движка не предназначен для использования конечной игрой напрямую). Предаставленный вами пример кода является Оберточником или Шаблоном к конечному проекту(Игре). |
Автор: | Inferno7000 [ 21 фев 2008 19:04 ] |
Заголовок сообщения: | |
Цитата: Да вроде ничего плохого. А вас не смущает эта строчка Loop_Game(Run_Game);, я думал вам это покажется странным. Когда в качестве параметра функции Loop_Game() передается функция Run_Game(). Цитата: Уважаемый Inferno7000 заранее прошу прощения за жесткую критику.
Ничего страшного. Хорошая критика помогает в написании движка, особенно если она по делу. |
Автор: | GameX32 [ 22 фев 2008 12:27 ] |
Заголовок сообщения: | |
Впринципе я бы мог оказать некоторую помощь в написании движка, если он на C++ и DirectX. Но все же хотелось бы узнать стадию развития проекта. А строчка Loop_Game(RunGame()) и в правду выглядит чудесно Лучше так: BOOL StopGame; //Некоторый флаг остановки игрового цикла while (!StopGame) { RunGame(); } При этом StopGame может быть установлен не только при нажатии ESC, но и в результате ошибки и т.д. И самое главное не забыть проинициализировать эту переменную в Init_Game(), а то могут начаться чудеса))) |
Автор: | Inferno7000 [ 22 фев 2008 13:45 ] |
Заголовок сообщения: | |
Цитата: Впринципе я бы мог оказать некоторую помощь в написании движка, если он на C++ и DirectX. Но все же хотелось бы узнать стадию развития проекта. Стадия проекта нулевая. Кроме синего экрана пока ничего нет. Цитата: А строчка Loop_Game(RunGame()) и в правду выглядит чудесно Я таким образом функцию Run_Game() вставляю внутрь цикла. Цитата: Лучше так:
BOOL StopGame; //Некоторый флаг остановки игрового цикла while (!StopGame) { RunGame(); } Вообщето цикл у меня реализован вот-так: Код: int Loop_Game(int gmain())
{ ZeroMemory(&msg,sizeof(msg)); while(msg.message!=WM_QUIT) { if(PeekMessage(&msg,NULL,0U,0U,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } gmain(); } UnregisterClass("WINX",win.hInstance); return 0; } |
Автор: | GameX32 [ 22 фев 2008 20:28 ] |
Заголовок сообщения: | |
Возможно для тебя подобный подход сложен, но я буду выдавать код на С++, т.е используя классы. Т.е. почти все или даже все функции типа инитВидео, СшутДоунВидео. Ну для начала предложу создать файл Divice.h и добавить к проекту. В него вставь следующее: //Основной класс CDevice class CDevice { public: CDevice (); ~ CDevice (); //Получение различных COM интерфейсов и свойств. D3DCAPS9 GetCaps(); IDirect3D9 *GetDirect3DCOM(); IDirect3DDevice9 *GetDeviceCOM(); //Инициализация + завершение работы BOOL Init(HINSTANCE HI); BOOL Shutdown(); //Установка видеорежима BOOL SetMode(HWND hWnd, BOOL Windowed = TRUE, DWORD Width = 0, DWORD Height = 0, BYTE BPP = 0); BOOL BeginScene(); BOOL EndScene(); BOOL Display(); BOOL Clear(DWORD Color=0,float ZBuffer=1.0f); DWORD GetWidth(); //Получение ширины экрана. DWORD GetHeight(); //Получение высоты экрана. BYTE GetBPP(); //Получение BPP. BOOL IsHAL(); //Используется ли HAL. BOOL SetPerspective(float FOV=D3DX_PI/4.0f,float Aspect=1.3333f,float Near=1.0f,float Far=10000.0f); BOOL SetLight(DWORD Num, D3DLIGHT9 *Light); BOOL SetMaterial(D3DMATERIAL9 *Material); BOOL SetTexture(DWORD Num, IDirect3DBaseTexture9 *TextureCOM); BOOL GetLight(DWORD Num,D3DLIGHT9 *Light); BOOL GetLightEnable(DWORD Num); BOOL GetMaterial(D3DMATERIAL9 *Material); IDirect3DBaseTexture9 *GetTextureCOM(DWORD Num); //Сделать снимок экрана и сохранить на диск в выбранном формате. BOOL ScreenShot(char *FileName, D3DXIMAGE_FILEFORMAT Format = D3DXIFF_BMP); protected: BOOL m_IsInit; //Была ли проведена инициализация. D3DCAPS9 m_Caps; //Свойства Direct 3D v9. DWORD m_TransfType; //Тип обработки вершин. HRESULT m_hr; //Коды возврата для функций. HINSTANCE m_hInstance; //Дескриптор приложения. HWND m_hWnd; //Дескриптор окна. IDirect3D9 *m_pD3D; //Direct3D. IDirect3DDevice9 *m_pDevice; //Видеоадаптер. D3DPRESENT_PARAMETERS m_d3dpp; //Параметры отображения. D3DDISPLAYMODE m_d3ddm; //Режим экрана. BOOL m_Windowed; //Полноэкранный или оконный тип приложения. DWORD m_Width; //Ширина экрана. DWORD m_Height; //Высота экрана. char m_BPP; //Bpp экрана. BYTE m_AmbientRed; //Красная составляющая Ambient. BYTE m_AmbientGreen; //Зеленая составляющая Ambient. BYTE m_AmbientBlue; //Синяя составляющая Ambient. private: ; }; Реализации функция я буду присылать постепенно. Если в объявлении класса тебя что то смущает то спрашивай. |
Автор: | Inferno7000 [ 26 фев 2008 13:49 ] |
Заголовок сообщения: | |
Я вот что подумал, может лучше разрабатывать игры под XNA. Там уже готовый движок есть и поддержка шейдеров, а главное она кроссплатформенная и позволяет разрабатывать под несколько платформ(Windows, XBox 360). Что вы думаете поэтому поводу, стоит ли переходить на XNA Game Studio Express 1.0 ? Уже и книги на русском языке появились: http://netlib.narod.ru/library/book0052/index.htm Жду отзывов и предложений. |
Автор: | MagicWolf [ 27 фев 2008 09:41 ] |
Заголовок сообщения: | |
Мне понравилась XNA (на первый взгляд). Но Studio я так и не откачал ... Много весит. |
Автор: | Inferno7000 [ 22 мар 2009 17:27 ] |
Заголовок сообщения: | Re: Код инициализации движка2 |
Цитата: Мне понравилась XNA (на первый взгляд). А чем именно она вам понравилась? А то многие почему-то её недолюбливают. ![]() |
Автор: | MagicWolf [ 22 мар 2009 20:14 ] |
Заголовок сообщения: | Re: Код инициализации движка2 |
Я смотрел по книгам, по ним XNA представляет из себя довольно интересный и понятный движок. Но по так его и не посмотрел. |
Автор: | Inferno7000 [ 27 мар 2009 00:31 ] |
Заголовок сообщения: | Re: Код инициализации движка2 |
Цитата: Но Studio я так и не откачал ... Много весит. Она весит всего-навсего 80 мегабайт. ![]() Цитата: Я смотрел по книгам, по ним XNA представляет из себя довольно интересный и понятный движок. Но по так его и не посмотрел MagicWolf какая конфигурация у вашего компьютера? Потянет ли он XNA(XNA очень мощный движок)? ![]() |
Автор: | MagicWolf [ 30 мар 2009 10:38 ] |
Заголовок сообщения: | Re: Код инициализации движка2 |
Я уже по моему три раза скачавал этот XNA, а не давно вышла новая версия ... опять качать ... |
Автор: | Inferno7000 [ 01 апр 2009 14:32 ] |
Заголовок сообщения: | Re: Код инициализации движка2 |
Цитата: Я уже по моему три раза скачавал этот XNA, а не давно вышла новая версия ... опять качать ... Ни в коем случае, лучше подождите пока выйдет XNA Game Studio 4.0. |
Автор: | MagicWolf [ 02 апр 2009 10:22 ] |
Заголовок сообщения: | Re: Код инициализации движка2 |
Уже 4! Не давно было 3! Скоро наверно и 10 будет! ![]() |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |