Есть ли способ перемещать два квадрата в OpenGL одновременно?

StackOverflow https://stackoverflow.com/questions/2800370

  •  25-09-2019
  •  | 
  •  

Вопрос

Поэтому у меня есть функция, которая обрабатывает ключевые прессы в игре, на которой я работаю в 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();
}

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

Это было полезно?

Решение

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

// 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. Вы можете организовать эту обработку событий внутри вашего основного цикла, а не в зависимости от таймера.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top