HGE引擎-绘制,声音,碰撞处理

更新时间:2023-05-31 05:07:16 阅读: 评论:0

HGE引擎-绘制,声⾳,碰撞处理
另外,年代久远,该引擎官⽹早已上不去了
1.库的安装和下载
2.HGE实例
#include<hge.h>
#pragma comment(lib,"hge.lib")
Q:为什么要导⼊这个lib?不是在配置⾥⾯添加了吗?
A:由于不可知的原因,在VC6.0中配置时,加⼊了lib之后,所有其他的函数都可以使⽤,只有hgeCreate函数总是提⽰“⽆法解析的外部符号”。⽽这个函数是创建HE游戏引擎的函数,可谓是巨头函数,这个函数不能⽤,那整个程序就Game Over了。所以在⽤代码导⼊这个lib之后,就可以使⽤了。
//定义全局变量
HGE * hge = NULL ;
hgeQuad quad ;  //⽤于保存绘图的顶点,纹理,和混⾊的函数
Q:hgeQuad结构是什么?
A:查看HEG的官⽹,上⾯解释说这个结构是跟绘图有关的结构。如果要绘图,就需要有这个结构存在。以下是这个结构的详细定义:struct hgeQuad
{
hgeVertex v[4] ;
HTEXTURE tex ;
int blend ;
};
上⾯结构中的⼏个成员分别是hgeVertex顶点结构,⽤于保存顶点的信息;第⼆个是HTEXTURE结构的数据,此结构是纹理的句柄;blend 表⽰混⾊模式。
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 ;
//定义播放⾳效的函数
glassdoorvoid boom()
{
laurelsint pan = int((x-400)/4);
float pitch = (dx*dx+dy*dy)*0.0005f + 0.2f ;
hge->Effect_PlayEx(snd,100,pan,pitch); //snd是⾳频资源的句柄,100表⽰声⾳⼤⼩,pan表⽰左右声道,pitch表⽰播放频率}
Q:Effect_PlayEx函数是什么⽤处?
A:Effect_PlayEx函数,⽤于播放指定的⾳效⽂件,同时可以根据后⾯的⼏个参数来进⾏声⾳,声道,播放频率的改变。
//定义帧回调函数
性冷淡 英语bool 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(x<16)
{
x=16+16-x;
dx=-dx;
boom();
}
if(y>584)
{
y=584-(y-584);
dy=-dy;
boom();
}
if(y<16)
{
y=16+16-y;
dy=-dy;
boom();
}
//配置hgeQuad结构中的顶点
quad.v[0].x=x-16;
black and yellow
学生成长故事quad.v[0].y=y-16;
quad.v[1].x=x+16;
quad.v[1].y=y-16;
quad.v[2].x=x+16;
quad.v[2].y=y+16;
quad.v[3].x=x-16;
quad.v[3].y=y+16;
return fal ;
}
Q:什么是帧回调函数?有什么⽤处?
A:这个帧回调函数是⽤来表⽰游戏逻辑的地⽅,会在后⾯的代码中设置这个函数被调⽤的频率,⼀般以每秒多少次表⽰。在这个函数中,
我们就可以进⾏游戏逻辑的编写,注意此函数在返回true的情况下,游戏的逻辑将结束,⽽在返回fal的情况下只是代表此次的函数调⽤结束了,并不是游戏的逻辑结束了(以后不会再被调⽤,称为逻辑结束)。
Q:这⾥的计算问题是什么进⾏计算的?
A:通过分析代码发现了这⾥的计算是以圆球图案的中⼼来进⾏计算的,以全局变量x,y表⽰圆球图案中⼼的坐标。然后使⽤dx,和dy表⽰在⼀次帧回调函数调⽤中,圆球图案中⼼移动的距离。当明⽩了这点之后,剩下的计算部分就⽐较简单了。以dx,dy表⽰圆球中⼼坐标的改变,正的代表向右或下进⾏移动,负的代表向左和右进⾏移动。dt表⽰离上次调⽤的时间间隔,根据设置的FPS值,计算出这个值应该是
1/100=0.01秒,调试发现dt值确实等于这个。⽽在我们按下了⼀个或者多个按键的时候,就可以通过s
peed*dt来修正dx,dy的值。注意这⾥的⼀个⽐较巧妙的设计,作者在定义全句变量的时候定义了⼀个名为friction(摩擦⼒)的全局变量,由于这个变量⼩于1,所以使⽤
famousdx*=friction,dy*=friction,来进⾏计算的话,在dx,dy保持不变的情况下就会慢慢的变⼩,直⾄变为0,这就导致了游戏中圆球团在后来慢慢的变成的静⽌不动的效果。⾄于碰撞的处理就根据游戏界⾯的⼤⼩简单的使⽤返回距离来表⽰碰撞。
//定义重绘函数,每次绘图时,调⽤此函数
bool ReDraw()
{
hge->Gfx_BeginScene();  //开始绘图
hge->Gfx_Clear(0);                    //清空背景
湖南二本大学排名hge->Gfx_RenderQuad(&quad); //重绘图⽚
hge->Gfx_EndScene();    //结束绘图
return fal ;
}
Q:重绘函数的作⽤是什么?
A:重绘函数是在窗⼝需要重绘的时候进⾏调⽤的。和帧回调函数差不多,也是⼀种回调函数。在这个函数⾥⾯通过调⽤Gfx_BeginScene来开始绘制,使⽤Gfx_RenderQuad()函数来绘制⼀个hgeQuad结构中的物体。Gfx_Clear(0)函数可以清空游戏的背景,然后进⾏重绘。
Gfx_EndScene函数会结束绘制,并且更新窗⼝。
Q:Gfx_Clear是带参数的函数,它有哪些参数?分别表⽰什么?
A:Gfx_Clear函数中带⼀个DWORD的参数,其中表⽰的是⽤指定的ARGB颜⾊来清除窗⼝,如果参数为0就表⽰⽤⿊⾊来清除窗⼝。
//定义WinMain函数
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
hge = hgeCreate(HGE_VERSION); //创建HGE
//设置状态属性
hge->System_SetState(HGE_FRAMEFUNC,FrameFunc);              //设置帧回调函数
hge->System_SetState(HGE_WINDOWED,true);                    //设置是否全屏
hge->System_SetState(HGE_USESOUND,true);                    //是否使⽤⾳乐
Tip:注意这⾥,如果我们要加载⾳效的话,这⾥就需要设置为true
hge->System_SetState(HGE_TITLE,"My First HGE Window -by XJ"); //设置标题栏
hge->System_SetState(HGE_LOGFILE,"");          //设置⽇志⽂件
hge->System_SetState(HGE_RENDERFUNC,ReDraw);          //设置重绘函数
hge->System_SetState(HGE_FPS,100);                                  //设置每秒FrameFunc调⽤的次数
hge->System_SetState(HGE_SCREENWIDTH,800);              //设置屏幕宽度
hge->System_SetState(HGE_SCREENHEIGHT,600);                    //设置屏幕⾼度
hge->System_SetState(HGE_SCREENBPP,32);                      //设置像素位数为32bit/pix
if(hge->System_Initiate()) //初始化hge
{
snd = hge->Effect_Load("menu.wav");                                //加载⾳效
< =hge->Texture_Load("particles.png");              //加载纹理图⽚进⾏贴图
Q:为什么要在这⾥加载?在其他地⽅可以不?
英语副词A:经过试验表明,如果在没有调⽤System_Initiate函数之前调⽤资源加载的函数,调⽤会失败,这⾥需要在以后注意,只有在初始化之后,我们才能够调⽤加载资源的函数。
quad.blend = BLEND_ALPHAADD | BLEND_COLORMUL | BLEND_ZWRITE ; //设置混⾊模式
Q:混⾊到底要如何使⽤?混⾊的参数要如何设置才能达到⾃⼰想要的效果?
A:
if(!snd || !)
{
// If one of the data files is not found, display
翻译资格考试
// an error message and shutdown.
MessageBox(NULL, "Can't load MENU.WAV or PARTICLES.PNG", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);                    hge->System_Shutdown();
hge->Relea();
return 0;
}
for(int i = 0 ; i < 4 ; i ++)
{
quad.v[i].z = 0.5f ;  //设置Z序
quad.v[i].col = 0xFFFFA000 ;  //设置顶点颜⾊
}

本文发布于:2023-05-31 05:07:16,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/128926.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   设置   结构
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图