[英]Why isn't my game pausing? (Windows C++ Keyboard Input Statemachine)
我正在使用Windows API用C ++編寫游戲,該游戲在開始游戲之前就具有啟動畫面,並且可以暫停。
我將游戲狀態存儲在一個枚舉中,game_state {PAUSED,PLAYING,SPLASHSCREEN},並依靠Keyboard輸入來控制游戲。
游戲正常運行,在暫停和播放之間切換,但是當我嘗試添加啟動屏幕以開始游戲時,暫停功能停止運行,我不確定為什么...
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()確實都是代表每個狀態的顯示精靈(此刻)
設定鍵
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;
}
}
刪除m_keys[key] = false;
從Keyboard :: GetKey方法。 由於在第一次檢查中將其設置為false,因此可以防止下次檢查看到它被按下。
調用GetKey()會將鍵設置為釋放狀態-因為它會在檢查其他內容之前先檢查是否按下了該鍵並且狀態為啟動屏幕-再次檢查該鍵時始終會釋放該鍵。
更改GetKey或更改代碼編寫方式。
我最好的猜測是,您的啟動屏幕具有焦點,它將接管消息循環,然后您不會收到關鍵事件。 只是一個猜測,如果不查看初始窗口和主窗口的窗口創建/注冊代碼,就無法真正知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.