0

C ++で書いているゲームのキープレスを処理するために、glutフレームワークを使用しようとしています。特定のキーが押されたときに、新しい曲線の描画を開始したいので、新しい曲線を作成して曲線のコンテナーに追加します。ただし、onKeyboard を使用してデバッグすると、最初に押したときだけでなく、キーが押されたときにこの関数が何度も呼び出されることがわかります。したがって、キーが押されるたびに約 12 のカーブが作成されます。onKeyboard の私のコードは以下のとおりです。どんな助けでも大歓迎です!

void onKeyboard(unsigned char key,int x, int y) {
    keysPressed[key] = true;
    switch (key) {
            case 'l':
                curvesContainer.addCurve(new lCurve());
                break;
            case 'p':
                curvesContainer.addCurve(new pCurve());

    }
    glutPostRedisplay();
}
4

3 に答える 3

0

keyPressed[key] がすでに true かどうかを確認し、false の場合にのみ曲線を追加します。

void onKeyboard(unsigned char key,int x, int y) 
{
    if (keysPressed[key] == false)
    {        
        keysPressed[key] = true;

        switch (key) 
        {
            case 'l':
                curvesContainer.addCurve(new lCurve());
                break;
            case 'p':
                curvesContainer.addCurve(new pCurve());
                break;
        }
    }

    glutPostRedisplay();
}

さらに、glutKeyboardUpFunc を使用して、onKeyUp イベントで keysPressed[key] をクリアする必要があります。

void onKeyUp(unsigned char key,int x, int y) 
{
    keysPressed[key] == false;       
}
于 2015-10-02T14:26:40.143 に答える
0

glutIgnoreKeyRepeat(1) はおそらくあなたが望むものです。(1 = オン)

于 2015-10-06T17:35:04.807 に答える