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