代码之家  ›  专栏  ›  技术社区  ›  thyrgle

有没有办法在opengl中同时移动两个正方形?

  •  1
  • thyrgle  · 技术社区  · 16 年前

    所以我有一个函数,可以处理我在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 回复  |  直到 16 年前
        1
  •  1
  •   Xavier Ho    16 年前

    为下面的评论编辑。

    // 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. 您可以在主循环内组织此事件处理,而不依赖于计时器。