Веб программирование

Движок 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;
}

Команда компиляции, кстати говоря, должна быть та же.


Есть вопросы? Спроси на нашем форуме!!
Нет комментариев

Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.