1

そのため、OpenGLで作業しているゲームでキーの押下を処理する関数があります。しかし、私が2つの正方形を作成し、正しいキーを押すと両方が移動するにもかかわらず、1つの正方形だけが移動するということです。2つの正方形を動かす方法はありますか?これは私が暗示したglutKeyboardFunc関数です:

    void handleKeypress(unsigned char key, int x, int y) 
{
        if (key == 'w')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 1 || i == 7 || i == 10 || i == 4)
                {
                    square[i] = square[i] + 0.1;
                }
            }
        }
        if (key == 'd')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 0 || i % 3 == 0)
                {
                    square[i] = square[i] + 0.1;
                }
            }
        }
    if (key == 's')
    {
        for (int i = 0; i < 12; i++)
        {
            if (i == 1 || i == 7 || i == 10 || i == 4)
            {
                square[i] = square[i] - 0.1;
            }
        }
    }
        if (key == 'a')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 0 || i % 3 == 0)
                {
                    square[i] = square[i] - 0.1;
                }
            }
        }
    glutPostRedisplay();
}

さらにコードが必要な場合は、質問してください。

4

1 に答える 1

1

以下のコメントのために編集。

// I'm making some assumptions about your functions here. Make adjustments.
// You can handle both players' key inputs here.
void handleKeypress(unsigned char key, int x, int y) 
{
    if (key == 27)
        exit(0);

    // Player 1
    if (key == 'w')
    {
        A.moveSquareUp();
    }
    if (key == 'd')
    {
        A.moveSquareRight();
    }
    if (key == 's')
    {
        A.moveSquareDown();
    }
    if (key == 'a')
    {
        A.moveSquareLeft();
    }
}

void handleSpecialKeypress(int key, int x, int y) 
{
    // Player 2
    if (key == GLUT_KEY_UP)
    {
        B.moveSquareUp();
    }
    if (key == GLUT_KEY_RIGHT)
    {
        B.moveSquareRight();
    }
    if (key == GLUT_KEY_DOWN)
    {
        B.moveSquareDown();
    }
    if (key == GLUT_KEY_LEFT)
    {
        B.moveSquareLeft();
    }
}

ゲームロジックのどこかでキーボードイベント(メインループ、またはからのコールバックglutKeyboardFunc())を処理し、目的の動作を呼び出す必要があります。これにはいくつかの利点があります。

  1. キーボード入力処理が1か所に統合​​されています。
  2. if代わりに使用するとswitch、複数のキーを使用できます。
  3. このイベント処理は、タイマーに依存する代わりに、メインループ内で整理できます。
于 2010-05-10T10:58:02.307 に答える