PMG

Форумы по созданию игр
Текущее время: 30 окт 2020 06:00

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Код инициализации движка2
СообщениеДобавлено: 20 фев 2008 19:34 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 28 янв 2008 19:24
Сообщения: 230
Откуда: Санкт Петербург
Когда я понял, что мне не потянуть трехмерную игру, я решил для начала
написать двумерную игру. Всвязи с этим решил переписать весь движок с нуля. Вот новый код инициализации движка:
Код:
#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;
}
//////////////////////////////////////////////////////////////////////////

Хотелось бы услышать критику и предложения по коду инициализации движка. Жду ваших отзывов. =) Пишите не стесняйтесь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 фев 2008 12:16 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2693
Да вроде ничего плохого. Движок все же это работа с объектами на сцене.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 фев 2008 16:30 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 авг 2007 01:36
Сообщения: 39
Откуда: подвал
Уважаемый Inferno7000 заранее прошу прощения за жесткую критику.

Лично в моем понимании Движок это следующее:
* Набор КЛАССОВ для работы с устройством рендеринга(CDevice), текстурами (CTexture), моделями (CModel)....
* Движок состоит из нескольких слоев составляющих иерархию и предоставляющих сервисные функции друг другу.
* Он выполняет общие функции и незаточен под конкретную игру(т.е. базовый уровень движка не предназначен для использования конечной игрой напрямую).

Предаставленный вами пример кода является Оберточником или Шаблоном к конечному проекту(Игре).

_________________
Да прибудет с тобой инкапсуляция и полиморфизм.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 фев 2008 19:04 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 28 янв 2008 19:24
Сообщения: 230
Откуда: Санкт Петербург
Цитата:
Да вроде ничего плохого.

А вас не смущает эта строчка Loop_Game(Run_Game);, я думал вам это покажется странным. Когда в качестве параметра функции Loop_Game() передается функция Run_Game().
Цитата:
Уважаемый Inferno7000 заранее прошу прощения за жесткую критику.

Ничего страшного. Хорошая критика помогает в написании движка, особенно если она по делу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 фев 2008 12:27 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 авг 2007 01:36
Сообщения: 39
Откуда: подвал
Впринципе я бы мог оказать некоторую помощь в написании движка, если он на C++ и DirectX. Но все же хотелось бы узнать стадию развития проекта.

А строчка Loop_Game(RunGame()) и в правду выглядит чудесно
Лучше так:
BOOL StopGame; //Некоторый флаг остановки игрового цикла
while (!StopGame)
{
RunGame();
}

При этом StopGame может быть установлен не только при нажатии ESC, но и в результате ошибки и т.д. И самое главное не забыть проинициализировать эту переменную в Init_Game(), а то могут начаться чудеса)))

_________________
Да прибудет с тобой инкапсуляция и полиморфизм.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 фев 2008 13:45 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 28 янв 2008 19:24
Сообщения: 230
Откуда: Санкт Петербург
Цитата:
Впринципе я бы мог оказать некоторую помощь в написании движка, если он на 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;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 фев 2008 20:28 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 авг 2007 01:36
Сообщения: 39
Откуда: подвал
Возможно для тебя подобный подход сложен, но я буду выдавать код на С++, т.е используя классы. Т.е. почти все или даже все функции типа инитВидео, СшутДоунВидео.
Ну для начала предложу создать файл 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: ;
};

Реализации функция я буду присылать постепенно. Если в объявлении класса тебя что то смущает то спрашивай.

_________________
Да прибудет с тобой инкапсуляция и полиморфизм.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 фев 2008 13:49 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 28 янв 2008 19:24
Сообщения: 230
Откуда: Санкт Петербург
Я вот что подумал, может лучше разрабатывать игры под XNA. Там уже готовый движок есть и поддержка шейдеров, а главное она кроссплатформенная и позволяет разрабатывать под несколько платформ(Windows, XBox 360). Что вы думаете поэтому поводу, стоит ли переходить на XNA Game Studio Express 1.0 ? Уже и книги на русском языке появились: http://netlib.narod.ru/library/book0052/index.htm
Жду отзывов и предложений.


Последний раз редактировалось Inferno7000 28 фев 2008 00:06, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 фев 2008 09:41 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2693
Мне понравилась XNA (на первый взгляд). Но Studio я так и не откачал ... Много весит.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код инициализации движка2
СообщениеДобавлено: 22 мар 2009 17:27 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 28 янв 2008 19:24
Сообщения: 230
Откуда: Санкт Петербург
Цитата:
Мне понравилась XNA (на первый взгляд).

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

_________________
С уважением, Андрей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код инициализации движка2
СообщениеДобавлено: 22 мар 2009 20:14 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2693
Я смотрел по книгам, по ним XNA представляет из себя довольно интересный и понятный движок. Но по так его и не посмотрел.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код инициализации движка2
СообщениеДобавлено: 27 мар 2009 00:31 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 28 янв 2008 19:24
Сообщения: 230
Откуда: Санкт Петербург
Цитата:
Но Studio я так и не откачал ... Много весит.

Она весит всего-навсего 80 мегабайт. :)
Цитата:
Я смотрел по книгам, по ним XNA представляет из себя довольно интересный и понятный движок. Но по так его и не посмотрел

MagicWolf какая конфигурация у вашего компьютера? Потянет ли он XNA(XNA очень мощный движок)? ;/

_________________
С уважением, Андрей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код инициализации движка2
СообщениеДобавлено: 30 мар 2009 10:38 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2693
Я уже по моему три раза скачавал этот XNA, а не давно вышла новая версия ... опять качать ...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код инициализации движка2
СообщениеДобавлено: 01 апр 2009 14:32 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 28 янв 2008 19:24
Сообщения: 230
Откуда: Санкт Петербург
Цитата:
Я уже по моему три раза скачавал этот XNA, а не давно вышла новая версия ... опять качать ...

Ни в коем случае, лучше подождите пока выйдет XNA Game Studio 4.0.

_________________
С уважением, Андрей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код инициализации движка2
СообщениеДобавлено: 02 апр 2009 10:22 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2693
Уже 4! Не давно было 3! Скоро наверно и 10 будет! :o

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB