3

所以这种关于我的其他 OpenGL 问题的主题(不是我的 OpenGL ES 问题,而是 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] + 1;
                }
            }
            glutPostRedisplay();
        }
        if (key == 'd')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 0 || i % 3 == 0)
                {
                    square[i] = square[i] + 1;
                }
            }
            glutPostRedisplay();
        }
    if (key == 's')
    {
        for (int i = 0; i < 12; i++)
        {
            if (i == 1 || i == 7 || i == 10 || i == 4)
            {
                square[i] = square[i] - 1;
            }
        }
        glutPostRedisplay();
    }
        if (key == 'a')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 0 || i % 3 == 0)
                {
                    square[i] = square[i] - 1;
                }
            }
            glutPostRedisplay();
        }
}

很抱歉,如果这不太有意义,如果没有意义,我会尝试以更好的方式改写它。

4

1 回答 1

5

如果我理解正确,问题是您修改了键盘事件上的对象位置,并在该事件处理后请求显示。

为了获得流畅的动画,您应该在键盘事件处理时存储对象的最终位置,然后在渲染期间插入中间对象位置。插值函数的推导给出了动画的速度。

如果事件处理在单独的线程中执行,这会更好,因此事件处理不会阻塞(至少对于少数同步操作)渲染操作。

于 2010-05-11T05:54:05.223 回答