C++ 如何将加载屏幕状态转换为游戏级状态?

C++ 如何将加载屏幕状态转换为游戏级状态?,c++,opengl,C++,Opengl,我试图使我的基本加载屏幕过渡到游戏级屏幕。所以我想做的是,一旦加载屏幕处于活动状态(或出现在屏幕上),我想在此时开始加载我的游戏状态。它目前正在做的是在开始时加载所有内容,这确实需要一段时间 因此,目前我的项目以主菜单开始。然后,当我按enter键时,它将启动加载屏幕。我使用如下按键手动更改状态: void Game::update() { static bool enterPreviouslyPressed = false; static bool escapePrevious

我试图使我的基本加载屏幕过渡到游戏级屏幕。所以我想做的是,一旦加载屏幕处于活动状态(或出现在屏幕上),我想在此时开始加载我的游戏状态。它目前正在做的是在开始时加载所有内容,这确实需要一段时间

因此,目前我的项目以主菜单开始。然后,当我按enter键时,它将启动加载屏幕。我使用如下按键手动更改状态:

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)的方法,比如布尔标志,或者另一种更简单的方法。我在网上找不到任何教程,所以想知道是否有人知道如何做到这一点的最佳解决方案。我确实在这里看到了一个类似的问题,但我不确定它是否回答了我的问题,因为这个人在我不熟悉如何实现的线程中这样做。如果我的逻辑似乎不正确,我深表歉意-因此请另辟蹊径。

看起来相当标准,但我会通过保留两个键盘状态变量声明为类变量来简化它,如:

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
    // ...
}

问题到底是什么?您想知道是否有更简单的方法来处理状态机吗?