Я пишу игру на C ++ с использованием Windows API, у которого есть заставка в начале, до начала игры, и которую можно приостановить.
Я сохраняю состояние игры в enum, game_state {PAUSED, PLAYING, SPLASHSCREEN}, и полагаюсь на ввод с клавиатуры для управления игрой.
Игра работала нормально, переключаясь между паузой и игрой, но когда я попытался добавить заставку, чтобы начать игру, перестала работать функция паузы, и я не уверен, почему ...
if(Keyboard.GetKey(VK_RETURN) && game_state == SPLASHSCREEN)
{
game_state = PLAYING;
Keyboard.SetKey(VK_RETURN, false);
}
if(Keyboard.GetKey(VK_RETURN))
{
if(game_state == PAUSED)
{
game_state = PLAYING;
}
else
{
game_state = PAUSED;
}
Keyboard.SetKey(VK_RETURN, false);
}
//If Paused, go to Pause Screen
if(game_state == PAUSED)
{
pauseScreen();
}
//If Splash Screen, go to Splash Screen
if(game_state == SPLASHSCREEN)
{
splashScreen();
}
//If not paused, do game processing
if(game_state == PLAYING)
{
gamePlay();
}
GetKey () возвращает true, если клавиша удерживается нажатой.
game_state является глобальным перечислением, содержащим текущее состояние игры.
SetKey () устанавливает указанный ключ как вниз (true) или вверх (false)
Да, и все функции splashScreen () pauseScreen () и gamePlay () являются спрайтами, представляющими каждое состояние (на данный момент)
SetKey
void Keyboard::SetKey(WPARAM key, bool key_down)
{
if(key_down)
{
m_keys[key] = true;
}
else
{
m_keys[key] = false;
}
}
GetKey
bool Keyboard::GetKey(WPARAM key)
{
if(m_keys[key])
{
m_keys[key] = false;
return true;
}
else
{
return false;
}
}