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 (на первый взгляд).

А чем именно она вам понравилась? А то многие почему-то её недолюбливают. :o

Автор:  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 будет! :o

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/