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