我正在使用Open C++GL开发一个2D程序。我正在使用 Glut 键盘功能。它的问题在于它一次只能响应一个键。
例:当我同时按 UP 和 RIGHT 时,它不会按预期对角线移动,而是向上或向右移动。
我的 switch 语句看起来像这样:
case GLUT_KEY_UP:
f.Move(UP);
break;
case GLUT_KEY_DOWN:
f.Move(DOWN);
break;
Move()
函数添加或减去对象的 (x,y) 值。
我的处理(switch 语句)有问题吗?还是 Glut 的 kb 函数只是有限?
还有其他方法可以解决这个问题吗?我真的不想浪费时间试图弄清楚问题出在库本身,并且可以在其他地方找到更好的解决方案。
这个想法是跟踪按键的状态,而不是在按下按键的瞬间立即执行某些操作。
我相信其他人可以更好地解释,但基本上,看起来您目前正在告诉计算机立即向与键对应的方向移动(例如 10 像素)。如果你真的考虑一下,那么就没有一种可能的方式对角线移动,因为这甚至不是计算机知道的概念。
你想考虑物理。速度,力(请记住,加速度是速度的时间导数,速度是位置的时间导数)。然后,您可以提出一个方案,如何让计算机了解任意方向,而不是执行 4 个单独的硬编码操作。