Есть ли способ переместить два квадрата в OpenGL одновременно? - PullRequest
1 голос
/ 10 мая 2010

поэтому у меня есть функция, которая обрабатывает нажатия клавиш в игре, над которой я работаю в OpenGL. Но дело в том, что хотя я сделал два квадрата, и они оба перемещаются, когда нажата правильная клавиша, перемещается только один квадрат. Есть ли способ, которым я могу заставить два квадрата двигаться. Это функция 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();
}

Если вам нужно больше кода, просто спросите.

1 Ответ

1 голос
/ 10 мая 2010

Отредактировано для комментариев ниже.

// 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. Ваша обработка ввода с клавиатуры объединена в одном месте.
  2. Использование if вместо switch позволяет использовать несколько ключей.
  3. Вы можете организовать обработку этого события в вашем основном цикле, а не в зависимости от таймера.
...