2011-01-13 10 views
0

私は、ゲームプレイが始まる前にスプラッシュスクリーンを持つWindows APIを使ってC++でゲームを書いています。一時停止することができます。ゲームが一時停止しないのはなぜですか? (Windows 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()は、キーが押されている場合はtrueを返します。 game_stateは、ゲームの現在の状態を含むenumグローバルです。 SETKEYは、()(false)をアップ(真)またはダウンとして指定されたキーを設定します

ああ、およびすべてのスプラッシュ・スクリーン()pauseScreen()とゲームプレイ()を行う(現時点では)それぞれの状態を表す表示スプライトある

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; 
    } 
} 
+0

GetKey関数とSetKey関数を参照できますか? –

+0

SetKeyとGetKeyを追加 – Eilidh

+0

m_keysはブール値の配列です - 真がダウン、偽がアップ – Eilidh

答えて

0

私の最高の推測では、あなたのスプラッシュ画面がフォーカスを持っていることであり、それはあなたがして、メッセージループを引き継ぎますキーイベントを取得しないでください。ちょうど推測では、あなたのスプラッシュとメインウィンドウのウィンドウ作成/登録コードを見ることなく、本当に知ることができません。

+0

新しいウィンドウは作成されません。画面にスプライトを描画してフレームを表示するだけです。 – Eilidh

1

GetKey()を呼び出すと、キーが押されたかどうかがチェックされ、何か他のものをチェックする前に状態がスプラッシュスクリーンになっているかどうかがチェックされるため、キーが解放されます。

GetKeyを変更するか、コードの記述方法を変更します。

2

キーボード:: GetKeyメソッドからm_keys[key] = false;を削除します。最初のチェックでfalseに設定されているため、次のチェックが押されたことを確認できません。

関連する問題