在 C++ 中只检测一个按键
Posted
技术标签:
【中文标题】在 C++ 中只检测一个按键【英文标题】:Detect only one keypress in C++ 【发布时间】:2015-10-02 14:15:58 【问题描述】:我正在尝试使用 glut 框架来处理我用 C++ 编写的游戏的按键。当按下特定键时,我想开始绘制一条新曲线,因此我创建了一条新曲线并将其添加到我的曲线容器中。但是,当我使用 onKeyboard 和调试时,我发现当按下一个键时会一遍又一遍地调用此函数,而不仅仅是在初始按下时。因此,每次按下一个键时,它会创建大约 12 条曲线。我的 onKeyboard 代码如下。任何帮助将不胜感激!
void onKeyboard(unsigned char key,int x, int y)
keysPressed[key] = true;
switch (key)
case 'l':
curvesContainer.addCurve(new lCurve());
break;
case 'p':
curvesContainer.addCurve(new pCurve());
glutPostRedisplay();
【问题讨论】:
【参考方案1】:您只需检查 keyPressed[key] 是否已经为真,如果为假,则仅添加您的曲线。
void onKeyboard(unsigned char key,int x, int y)
if (keysPressed[key] == false)
keysPressed[key] = true;
switch (key)
case 'l':
curvesContainer.addCurve(new lCurve());
break;
case 'p':
curvesContainer.addCurve(new pCurve());
break;
glutPostRedisplay();
您还需要在 onKeyUp 事件中使用 glutKeyboardUpFunc 清除 keysPressed[key]
void onKeyUp(unsigned char key,int x, int y)
keysPressed[key] == false;
【讨论】:
【参考方案2】:glutIgnoreKeyRepeat(1) 可能是您想要的。 (1 = 开启)
【讨论】:
【参考方案3】:在 studio.in 中使用输入刷新定义 它避免了其余的输入
【讨论】:
以上是关于在 C++ 中只检测一个按键的主要内容,如果未能解决你的问题,请参考以下文章