0

キーボード入力処理に Glut を使用してからしばらく経ちましたが、キーボード コールバック関数が変更されていない Key パラメータを提供していたように感じます。記憶が間違っている可能性があります。

つまり、"r" を押すと小文字の "r" 文字が返されましたが、SHIFT + "r" を押すと大文字の "R" ではなく小文字の "r" が返されました。修飾キー (SHIFT、CONTROL、ALT) を使用すると、コールバック関数に送信されたキーが実際に変更されるため、これは現在ではありません (おそらくそうではありませんでした)。生の変更されていない値を取得する方法を見つけようとしましたが、それ以来運がありませんでした。

コールバック関数から変更されていないキーボード値にアクセスする方法はありますか? または、正しいキー値を取得するために手動で変更を元に戻す方法を見つける必要がありますか?

glutKeyboardFunc(keyDown);

...

void Game::keyDown(unsigned char key, int mouseX, int mouseY)
{
    switch (key)
    {
    case 'r':
       {
           cout<<"Called when 'r' is pressed"<<endl;
           cout<<"Is NOT called when SHIFT is the modifier"<<endl;
           break;
       }
    case 'R':
        {
            cout<<"Called ONLY when 'r' is pressed with SHIFT"<<endl;
            cout<<"Is NOT called when 'r' is pressed on its own"<<endl;
            break;
        }
    case 18:
        {
            cout<<"Called ONLY when 'r' is pressed with CONTROL"<<endl;
            cout<<"Is NOT called when 'r' is pressed on its own"<<endl;
            break;
        }
    }
}

ヘルプやアドバイスをいただければ幸いです。

4

1 に答える 1

0

この機能を探しています:

int glutGetModifiers(void);

結果を整数に代入して、次のように確認できます。

GLUT_ACTIVE_SHIFT
GLUT_ACTIVE_CTRL
GLUT_ACTIVE_ALT

ちょっとした例

int modifier = glutGetModifiers();
    if (modifier == GLUT_ACTIVE_CTRL)
        //code
    else
        //code
}

また、この関数は、キーボードまたはマウスの入力イベントを処理する関数内でのみ呼び出す必要があることに注意してください。

于 2013-09-04T20:27:13.530 に答える