Движок HGE. Второй туториал
Приветствую! Сегодня я переведу вам второй туториал из прилагающихся к HGE. Я пока не хочу писать отсебятины, ибо в HGE разобрался слабо. Потом напишу что-нибудь новенькое.
// Скопируйте в папку DEBUG проекта (в случае Visual Studio) // из папки "precompiled" в HGE файлы 'menu.wav' и 'particles.png'. #include <hge.h> HGE *hge=0; // Quad - это примитива HGE, // использующаяся для рендеринга графики. // У Quad есть 4 вершины, пронумеровынных от // 0 до 3 по часовой стрелке. hgeQuad quad; // Хэндл звукового эффекта HEFFECT snd; // Геймплейные переменные и константы float x=100.0f, y=100.0f; float dx=0.0f, dy=0.0f; const float speed=90; const float friction=0.98f; // Функция проигрывает звук столкновения с // параметрами, основанными на позиции и скорости void boom() { int pan=int((x-400)/4); float pitch=(dx*dx+dy*dy)*0.0005f+0.2f; hge->Effect_PlayEx(snd,100,pan,pitch); } bool FrameFunc() { // Получение времени, прошедшего с последнего вызова // FrameFunc. Это поможет синхронизировать выполнение // на разных машинах и видеорежимах. float dt=hge->Timer_GetDelta(); // Клавишные процессы if (hge->Input_GetKeyState(HGEK_ESCAPE)) return true; if (hge->Input_GetKeyState(HGEK_LEFT)) dx-=speed*dt; if (hge->Input_GetKeyState(HGEK_RIGHT)) dx+=speed*dt; if (hge->Input_GetKeyState(HGEK_UP)) dy-=speed*dt; if (hge->Input_GetKeyState(HGEK_DOWN)) dy+=speed*dt; // Несколько вычислений движения и отлова столкновений dx*=friction; dy*=friction; x+=dx; y+=dy; if(x>784) {x=784-(x-784);dx=-dx;boom();} if(x584) {y=584-(y-584);dy=-dy;boom();} if(yGfx_BeginScene(); // Почистим экран и закрасим его черным. hge->Gfx_Clear(0); // Рендерим Quad'ы. Сейчас только один // такой послужит нашим потребностям. hge->Gfx_RenderQuad(&quad); // Закончим рендеринг и сцену. hge->Gfx_EndScene(); // RenderFunc ВСЕГДА должен возвращать false; return false; } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { // Получим интерфейс HGE. hge = hgeCreate(HGE_VERSION); // Установим логфайл, функцию рендеринга, фреймфункцию и заголовок. hge->System_SetState(HGE_LOGFILE, "hge_tut02.log"); hge->System_SetState(HGE_FRAMEFUNC, FrameFunc); hge->System_SetState(HGE_RENDERFUNC, RenderFunc); hge->System_SetState(HGE_TITLE, "HGE Tutorial 02 - Using input, sound and rendering"); // Установим видеорежим. hge->System_SetState(HGE_WINDOWED, true); hge->System_SetState(HGE_SCREENWIDTH, 800); hge->System_SetState(HGE_SCREENHEIGHT, 600); hge->System_SetState(HGE_SCREENBPP, 32); if(hge->System_Initiate()) { // Загрузим звук и текстуры. snd=hge->Effect_Load("menu.wav"); quad.tex=hge->Texture_Load("particles.png"); if(!snd || !quad.tex) { // Если какая-то из них не найдена, // вызовем этот MsgBox. MessageBox(NULL, "Can't load MENU.WAV or PARTICLES.PNG", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL); hge->System_Shutdown(); hge->Release(); return 0; } // Настройка Quad который мы будем использовать для отрисовки спрайта quad.blend=BLEND_ALPHAADD | BLEND_COLORMUL | BLEND_ZWRITE; for(int i=0;iSystem_Start(); // Почистим ресурсы. hge->Texture_Free(quad.tex); hge->Effect_Free(snd); } else MessageBox(NULL, hge->System_GetErrorMessage(), "Error", MB_OK | MB_ICONERROR | MB_SYSTEMMODAL); // Почистимся и закроемся. hge->System_Shutdown(); hge->Release(); return 0; }
Команда компиляции, кстати говоря, должна быть та же.
Урок 9 - Классы.