gpt4 book ai didi

c++ - 为什么我的游戏没有暂停? (Windows C++ 键盘输入状态机)

转载 作者:行者123 更新时间:2023-11-28 01:08:45 25 4
gpt4 key购买 nike

我正在使用 Windows API 用 C++ 编写一个游戏,它在游戏开始之前有一个启动画面,可以暂停。

我将游戏状态存储在一个枚举 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() 返回真。game_state 是一个包含游戏当前状态的全局枚举。SetKey() 设置指定键为向下(true)或向上(false)

哦,所有 splashScreen() pauseScreen() 和 gamePlay() 所做的都是显示代表每个状态的 Sprite (目前)

设置 key

void Keyboard::SetKey(WPARAM key, bool key_down)
{
if(key_down)
{
m_keys[key] = true;
}
else
{
m_keys[key] = false;
}
}

获取 key

bool Keyboard::GetKey(WPARAM key)
{
if(m_keys[key])
{
m_keys[key] = false;
return true;
}
else
{
return false;
}
}

最佳答案

从 Keyboard::GetKey 方法中删除 m_keys[key] = false;。因为它在第一次检查中被设置为 false,所以它可以防止下一次检查看到它被按下。

关于c++ - 为什么我的游戏没有暂停? (Windows C++ 键盘输入状态机),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4683198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com