所以关于我的其他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();
}
}
我很抱歉,如果这没有多大意义,如果它没有意义,我会尝试以更好的方式对其进行改写。
答案 0 :(得分:5)
如果我理解正确,问题是你在键盘事件上修改对象位置,并在事件处理后请求显示。
要获得平滑动画,您应该在键盘事件处理时存储对象的最终位置,然后在渲染过程中插入中间对象位置。 插值函数的推导给出了动画的速度。
如果在分离的线程中执行事件处理,则效果会更好,因此事件处理不会阻止(至少对于少数同步操作)渲染操作。