• 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输出了当前指示的选项。

  • 相关阅读:
    海量数据处理
    mysql数据导出
    手机归属地
    如何正确合理的建立MYSQL数据库索引
    Java 复杂excel报表导出
    NullpointerException真的一定要被预防?
    代码传递信息方式的探究
    ThreadLoacl的反思
    Codis分布式锁
    spring mvc:事务引起的try/catch失效
  • 原文地址:https://www.cnblogs.com/yoru/p/4028246.html
Copyright © 2020-2023  润新知