【发布时间】:2010-07-01 05:53:41
【问题描述】:
我有以下函数用作glutKeyboardFunc 函数参数:
void handleKeypress(unsigned char key, //The key that was pressed
int x, int y) { //The current mouse coordinates
switch (key) {
case 27: //Escape key
exit(0); //Exit the program
}
if (key == 'a')
{
moveCircleLeft(0);
}
if (key == 'w')
{
moveCircleUp(0);
}
if (key == 's')
{
moveCircleDown(0);
}
if (key == 'd')
{
moveCircleRight(0);
}
}
现在我将向您展示moveCircleLeft 作为moveCircle 函数的编写示例:
void moveCircleLeft(int x)
{
characterX = characterX - 0.1;
glutPostRedisplay();
x++;
if (x < 10)
{
glutTimerFunc(10, moveCircleLeft, x);
}
}
其他moveCircle 函数的工作方式类似,四个函数之间的唯一区别是它的正数是负0.1 还是characterY 而不是characterX。
现在,问题来了:
所有方向都朝着正确的方向移动,但是当我尝试按键时,角色的移动会出现延迟/暂停。所以,如果我只按 d 键 (moveCircleRight),它会向右移动一点,停止 a 一小段时间,然后以恒定速度在屏幕上移动,没有停顿。然后,如果我换一个不同的键,它会在改变方向之前暂停一点,然后以恒定的速度朝那个方向移动。
对此的任何建议将不胜感激!
【问题讨论】:
-
为什么要对单个条件使用 switch,然后对所有其他条件使用单独的 if 语句?
-
我确实有多个 if 语句的参数,然后去掉了它们。然后我并没有真正费心把它改回来。