C++ 如何将加载屏幕状态转换为游戏级状态?
我试图使我的基本加载屏幕过渡到游戏级屏幕。所以我想做的是,一旦加载屏幕处于活动状态(或出现在屏幕上),我想在此时开始加载我的游戏状态。它目前正在做的是在开始时加载所有内容,这确实需要一段时间 因此,目前我的项目以主菜单开始。然后,当我按enter键时,它将启动加载屏幕。我使用如下按键手动更改状态:C++ 如何将加载屏幕状态转换为游戏级状态?,c++,opengl,C++,Opengl,我试图使我的基本加载屏幕过渡到游戏级屏幕。所以我想做的是,一旦加载屏幕处于活动状态(或出现在屏幕上),我想在此时开始加载我的游戏状态。它目前正在做的是在开始时加载所有内容,这确实需要一段时间 因此,目前我的项目以主菜单开始。然后,当我按enter键时,它将启动加载屏幕。我使用如下按键手动更改状态: void Game::update() { static bool enterPreviouslyPressed = false; static bool escapePrevious
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
// ...
}
问题到底是什么?您想知道是否有更简单的方法来处理状态机吗?