我正在尝试将我的基本加载屏幕转换到游戏级别屏幕。所以我想要做的是,一旦加载屏幕处于活动状态(或已经出现在屏幕上),我希望此时开始加载我的游戏状态。目前正在做的是在开始时加载所有内容,这确实需要一段时间。
所以目前我的项目以主菜单开始。然后当我按回车键时,它会启动加载屏幕。我使用如下的按键进行手动状态更改:
void Game::update()
{
static bool enterPreviouslyPressed = false;
static bool escapePreviousPressed = false;
const Uint8 *keys = SDL_GetKeyboardState(NULL);
if (keys[::SDL_SCANCODE_ESCAPE] && !escapePreviousPressed && typeid(*fsm->getState()) == typeid(GameState))
{
fsm->setState(menuState);
}
else if (keys[::SDL_SCANCODE_RETURN] && !enterPreviouslyPressed && typeid(*fsm->getState()) == typeid(MainMenuState))
{
fsm->setState(loadingState);
}
else if ((keys[::SDL_SCANCODE_RETURN] && !enterPreviouslyPressed) && typeid(*fsm->getState()) == typeid(LoadScreenState))
{
fsm->setState(gameState);
}
else if (keys[::SDL_SCANCODE_ESCAPE] && !escapePreviousPressed && typeid(*fsm->getState()) == typeid(MainMenuState))
{
exit(0);
}
enterPreviouslyPressed = keys[::SDL_SCANCODE_RETURN] != 0;
escapePreviousPressed = keys[::SDL_SCANCODE_ESCAPE] != 0;
fsm->update();
}
我这样做是为了最初这样做,所以我可以手动更改状态以检查一切是否正常。我想知道是否有一种简单(ish)方式,例如布尔标志或其他更简单的方法。我无法在网上找到任何教程,所以想知道是否有人知道如何做到这一点的最佳解决方案。我确实在这里看到了一个问题,kindda相似,但我不确定它是否回答了我的问题,因为这个人在我不熟悉如何实现的线程中做了这个。如果我似乎没有正确的逻辑,请道歉 - 所以请另行通知。
答案 0 :(得分:0)
看起来相当标准,除非我通过将两个键盘状态变量声明为类变量来简化它,例如:
const Uint8 *curKeys = SDL_GetKeyboardState(NULL), *prevKeys;
// ...
void Game::update() {
prevKeys = curKeys;
curKeys = = SDL_GetKeyboardState(NULL);
//and so then compare curKeys to prevkeys
//and ditch the booleans
// ...
}