HGE tutorial06

bool FrameFunc()
{
	float dt = hge->Timer_GetDelta();
	static float t = 0.0f;
	float tx, ty;
	int id;
	static int lastid = 0;

	// If ESCAPE was pressed, tell the GUI to finish
	if (hge->Input_GetKeyState(HGEK_ESCAPE)) { lastid = 5; gui->Leave(); }

	// We update the GUI and take an action if
	// one of the menu items was selected
	id = gui->Update(dt);
	if (id == -1)
	{
		switch (lastid)
		{
		case 1:
		case 2:
		case 3:
		case 4:
			gui->SetFocus(1);
			gui->Enter();
			break;

		case 5: return true;
		}
	}
	else if (id) { lastid = id; gui->Leave(); }

	// Here we update our background animation
	t += dt;
	tx = 50 * cosf(t / 60);
	ty = 50 * sinf(t / 60);

	quad.v[0].tx = tx;        quad.v[0].ty = ty;
	quad.v[1].tx = tx + 800 / 64; quad.v[1].ty = ty;
	quad.v[2].tx = tx + 800 / 64; quad.v[2].ty = ty + 600 / 64;
	quad.v[3].tx = tx;        quad.v[3].ty = ty + 600 / 64;

	return false;
}

在这个代码中,当gui->update(dt)之后,会进行动画的操作。关于gui->update(dt):

If one of the controls has changed it‘s state, Update returns that control‘s identificator. If leave method was called and all the controls have finished their animation, Update returns -1. Otherwise it returns 0.

按照这个解释,我们会遇到三种情况:

1)、指向了某个选项,但是没有选择,那么 return  0;

2)、指向并选择了某个选项,那么 return id; 之后会调用leave();然后选项会消失在屏幕上

3)、在2)之后的情况,调用leave()之后会立刻的 return -1。那么在return -1则会默认指向某个选项,并且会刷新使得选项出现。

将原来的if-else if改成了if-else if-else输出了当前指示的选项。

时间: 2024-12-21 02:01:17

HGE tutorial06的相关文章

[hge] distort.h distort.cpp

荡漾   --写在开头 在两个文件组合起来要实现的功能就是使得一个画片图水波般荡漾 首先来看头文件中的东西 Chapter I: distort.h Part Ⅰ:attributes private: hgeDistortionMesh(); // 构造函数,话说放在 private 是为了屏蔽这个接口,使得初始化过程中必须有参数 static HGE *hge; // 引擎指针 hgeVertex *disp_array; // 顶点数组 int nRows, nCols; // 行数.列数

对HGE游戏引擎的一次封装

HGE游戏引擎是一个开源2D游戏引擎,基于directX. 它的渲染及逻辑是基于帧回调的框架模式, 其提供一些主要的图像操作和输入控制功能. 我在之前写一个2D游戏的时候对它整个框架进行了一次封装,非常多地方写得比較恶心,请原谅我在变量上命名的不规范. 在此分享出来,主要能够參考一下大体框架吧. HGE游戏引擎基于帧的回调让我非常不爽,由于咱的游戏逻辑通常是连续的,跟详细帧无关,所以我把整个HGE跑在自己的一个线程之中.我的游戏逻辑部分通过发消息,通知界面更新 以及获取用户输入. 在HGE的主框

hge source explor 0x8 timer

Timer 时间部分,在hge中提供对于fps的控制,时间的控制等. 其中会用到的参数有. hge_impl.h // Timer float fTime; float fDeltaTime; DWORD nFixedDelta; int nFPS; DWORD t0, t0fps, dt; int cfps; 在system.cpp中使用到,用来控制帧率 if(dt >= nFixedDelta) { // fDeltaTime = time step in seconds returned

hge source explor 0xC graphics Ⅲ

这里关于图形模块的内部接口部分 内部调用接口 内部接口主要完成:关于固定流水线的设置:dx的初始化:dx的结束 可以说内部接口已经完成了左右工作,只要进行组合调用即可 _GfxInit() DX的初始化函数 Direct3DCreate8 创建接口 GetAdapterIdentifier 获得设备信息,在这里可以查询设备能够做到什么 PRESENT_PARAMETER 参数的填写 CreateDevice 创建设备 _AdjustWindow 这个函数原来在window模块里已经考虑过,在这里

hge source explor 0x4 input module

Input Module hge中的输入并没有用到Direct Input,在window消息构造输入信息. 对于鼠标和键盘,输入信息用一个结构来处理,hge中的信息事件的结构 /* ** HGE Input Event structure */ struct hgeInputEvent { int type; // event type int key; // key code int flags; // event flags int chr; // character code int w

HGE source explor 0x0

本文准备开始HGE游戏引擎的代码阅读,其实我已经阅读完HGE的代码了,这里将准备再重新阅读代码.阅读代码将准备将代码拆开阅读,按每种功能分开来阅读,分别准备如下: 游戏的窗口 对于任意一个程序来说,一个窗口都是必须的,所以游戏的最基本的也是一个窗口.那么我们找到HGE关于游戏窗口的部分,详细了解这部分.(窗口君:我是一切的基础哦.) 游戏的输入信息 对于一个游戏来说,互动也是必须的,既然要互动那玩家的输入必不可少.在这里我们可以看到HGE关于输入的部分,创建输入的事件然后,当然是等处理.(输入君

C++多小球非对心弹性碰撞(HGE引擎)

程序是一个月前完成的,之前一直没正儿八经的来整理下这个程序,感觉比较简单,不过即使简单的东西也要跟大家分享下. 源码下载:http://download.csdn.net/detail/y85171642/7209727 开篇 开始上代码之前我先说下我为啥写的这个程序,大三的时候学习C#接触过GDI+而发现原来做图形界面的程序也可以这么简单.之后便开始用GDI+做起动画.游戏等,其中便有一个模拟多小球碰撞的,在CSDN上有分享过( http://pan.baidu.com/s/1qWjTkmS 

hge source explor 0xA graphics Ⅰ

Graphics 在这一部分完成初始化DX,并且完成固定流水线,然后在进行渲染. 在这一部分会用到的数据结构和参数有: 参数: D3DPRESENT_PARAMETERS* d3dpp; D3DPRESENT_PARAMETERS d3dppW; D3DPRESENT_PARAMETERS d3dppFS; IDirect3D8* pD3D; IDirect3DDevice8* pD3DDevice; IDirect3DVertexBuffer8* pVB; IDirect3DIndexBuff

hge source explor 0x5 input module

Input Module 前面提到输入事件,那么对输入事件分类,分类如下 /* ** HGE Input Event type constants */ #define INPUT_KEYDOWN 1 #define INPUT_KEYUP 2 #define INPUT_MBUTTONDOWN 3 #define INPUT_MBUTTONUP 4 #define INPUT_MOUSEMOVE 5 #define INPUT_MOUSEWHEEL 6 接下来看每个函数 _InputInit