如何使加载屏幕状态转换到游戏级别状态?

时间:2016-03-02 03:26:19

标签: c++ opengl

我正在尝试将我的基本加载屏幕转换到游戏级别屏幕。所以我想要做的是,一旦加载屏幕处于活动状态(或已经出现在屏幕上),我希望此时开始加载我的游戏状态。目前正在做的是在开始时加载所有内容,这确实需要一段时间。

所以目前我的项目以主菜单开始。然后当我按回车键时,它会启动加载屏幕。我使用如下的按键进行手动状态更改:

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相似,但我不确定它是否回答了我的问题,因为这个人在我不熟悉如何实现的线程中做了这个。如果我似乎没有正确的逻辑,请道歉 - 所以请另行通知。

1 个答案:

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