2011-02-04 35 views
0

GetKeyStateを使用すると、キーを押すと何らかのタスクを実行できます。しかし、私がif (GetKeyState(VK_UP) & 0x80)を持っていれば、キーが押されている間は真を返します。GetKeyStateでキーが押された瞬間を取得する方法

キーが押された瞬間に真になるようにするにはどうすればよいですか(if文の内容は何度も実行されません)。

答えて

1

if((GetKeyState(VK_UP)&0x80) && ! flag) 
{ 
    flag = true; 
} 

else if((GetKeyState(VK_DOWN)&0x80) && flag) 
{ 
    flag = false; 
} 

if(flag) //key is just pressed 
{ 
    //TODO: Your handling here 
} 

コードは次のようになります

1

前回の状態がループを介して最後のものだったことを覚えておいてください

また、0x80で結果をマスキングすることによって上位ビットが設定されているかどうかを確認しているようですが、SHORT is two bytesです。あなたは0x8000を使うべきだと思います。あるいは、結果が<であるかどうかを確認することができます。これは、上位ビットが符号付き整数が負であるかどうかを示すためです。あなたはbool flag = falseを使用して、このようにそれを使用することができます

bool prevUpKeyState = false; // false indicates key was up 

while (...) { 
    // ... 

    bool currentUpKeyState = GetKeyState(VK_UP) < 0; 
    if ((currentUpKeyState) && (!prevUpKeyState)) { 
     // Key just depressed, do stuff 
    } 

    // ... 

    // Update previous key state for next pass through loop: 
    prevUpKeyState = currentUpKeyState; 
} 
関連する問題