#include <hge.h>
#include "menuitem.h"
//#include <hgefont.h>
#include <hgegui.h> #include <math.h> //定义全局变量
long int zhen = ;
//定义当前关卡
int SCENCE = ;
//HGE句柄
HGE * hge = NULL;
//背景音乐,图片
HEFFECT BG_Music;
HTEXTURE BG_Texture;
hgeSprite *BG_pic;
hgeQuad Background;
//游戏时间
float time;
//hgeBackground test; hgeGUI *gui;
hgeFont *fnt;
hgeSprite *spr; //逻辑框架循环
bool FrameFunc()
{
time = hge->Timer_GetTime();
if (((int)(time*)) % == && Background.v[].col != 0xFFFFFFFF)
{
for(int i=;i<;i++)
{
Background.v[i].col +=ARGB(,,,);
}
}
return false;
} //图元渲染循环
bool RenderFunc()
{
hge->Gfx_BeginScene();
hge->Gfx_Clear();
hge->Gfx_RenderQuad(&Background);
hge->Gfx_EndScene();
return false;
} //主程序入口
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
hge = hgeCreate(HGE_VERSION); //初始化设置
hge->System_SetState(HGE_SHOWSPLASH,true);
hge->System_SetState(HGE_LOGFILE, "TEST.log");
hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
hge->System_SetState(HGE_TITLE, "<life designer>");
hge->System_SetState(HGE_WINDOWED, true);
hge->System_SetState(HGE_SCREENWIDTH, );
hge->System_SetState(HGE_SCREENHEIGHT, );
hge->System_SetState(HGE_SCREENBPP, ); //载入程序资源
if(hge->System_Initiate())
{
BG_Music = hge->Effect_Load("BG_Music.mp3");
if (!BG_Music)
{
MessageBox(NULL,"有资源未载入","警告",MB_OK);
hge->System_Shutdown();
hge->Release();
return ;
}
hge->Effect_PlayEx(BG_Music,,,1.0f,true);
//Background的载入与初始化
Background.tex = hge->Texture_Load("BG_pic.png");
if (!Background.tex)
{
MessageBox(NULL,"资源载入失败!!","警告",MB_OK);
}
Background.blend=BLEND_ALPHAADD | BLEND_COLORMUL | BLEND_NOZWRITE ;
for(int i=;i<;i++)
{
// Set up z-coordinate of vertices
Background.v[i].z=0.5f;
// Set up color. The format of DWORD col is 0xAARRGGBB
Background.v[i].col=ARGB(,,,);
}
Background.v[].x=; Background.v[].y=;
Background.v[].x=; Background.v[].y=;
Background.v[].x=; Background.v[].y=;
Background.v[].x=; Background.v[].y=;
Background.v[].tx=0.0/800.0;
Background.v[].ty=0.0/800.0;
Background.v[].tx=800.0/800.0;
Background.v[].ty=0.0/800.0;
Background.v[].tx=800.0/800.0;
Background.v[].ty=600.0/800.0;
Background.v[].tx=0.0/800.0;
Background.v[].ty=600.0/800.0; //程序开始
hge->System_Start(); //释放资源
hge->Effect_Free(BG_Music);
//hge->Effect_Free(BG_Texture);
hge->Texture_Free(Background.tex);
} //关闭程序资源
hge->System_Shutdown();
hge->Release();
return ;
}
HGE实战代码
我们先看下前面的全局变量分别定义了背景音乐BG_Music和背景图片Background
主程序入口开始,先是创建HGE然后进行版本检测,接下来是初始化引擎的相关参数,然后初始化hge,里面是一系列的资源的初始化,包括音乐的载入与播放,然后最重要的是今天的主页的载入,这里我们先用
Background.tex = hge->Texture_Load("BG_pic.png");
载入背景图片,然后设置渲染模式,并设置好Z-order,下面是重要的部分了
Background.v[i].col=ARGB(,,,);
通过ARGB()函数返回一个关于颜色的十六进制,该函数模型如下int ARGB(int Alpha,int R,int G,int B);我们这里将透明度先设置为0;
然后接下来每一帧都会调用的两个函数:FrameFunc()和RenderFunc(),前者是每帧的逻辑设定,后者是每帧的渲染设定;
bool FrameFunc()
{
time = hge->Timer_GetTime();
if (((int)(time*)) % == && Background.v[].col != 0xFFFFFFFF)
{
for(int i=;i<;i++)
{
Background.v[i].col +=ARGB(,,,);
}
}
return false;
}
这里函数总是返回 false,若是返回true的话就会跳出hge->System_Start();开始执行后面的资源销毁和程序退出代码.我们可以在这里进行逻辑判断,在某个时候更改背景图片等,更换场景,若是载入不成功就return true.
这里我们看到,先是判断背景图片透明度是否是255而且从调用系统初始化到现在的时间取余(这样是为了控制逐渐的出场效果速度),假如不是就将背景图片的四个顶点的颜色中的透明度++,这样每帧都会+1那随着帧的增加,逐渐将整个图片显现出来.
bool RenderFunc()
{
hge->Gfx_BeginScene();
hge->Gfx_Clear();
hge->Gfx_RenderQuad(&Background);
hge->Gfx_EndScene();
return false;
}
每帧的渲染函数,开始渲染,清空缓存,渲染背景,退出渲染,返回false(这里跟上面的FrameFunc()一样);
接下来就要开始学习GUI菜单的部分!