0

GetKeys関数でキーの状態(押されているかどうか)を取得する方法を知っている人はいますか? つまり、この関数を処理する方法は次のとおりです。

bool result = isPressed(kVK_LeftArrow);

ありがとうございました。

4

1 に答える 1

4

KeyMap型は整数の配列ですが、実際のレイアウトは一連のビットで、キー コードごとに 1 つです。特定のキーのビット数は、仮想キー コードより 1 少ない数です。

非常に大きな値の場合、ビット シフトは正しくないため (たとえば、コンパイラに 74 ビットのシフトを要求することはできません)、KeyMap型は 4 つの部分に分割されます。ビットの正しい整数を見つけるには、仮想キー コードのビット番号を取得し、整数を 32 で割る必要があります。次に、残りを取得して、どのビットを設定する必要があるかを判断します。

だから、これを試してください:

uint16_t vKey = kVK_LeftArrow;
uint8_t index = (vKey - 1) / 32;
uint8_t shift = ((vKey - 1) % 32);
KeyMap keyStates;
GetKeys(keyStates);
if (keyStates[index] & (1 << shift))
{
    // left arrow key is down
}
于 2012-07-17T02:21:30.143 に答える