C++ 使用键控Glut C+模拟跳转+;不是100%

C++ 使用键控Glut C+模拟跳转+;不是100%,c++,glut,C++,Glut,我用glutkeyboardfunc和keyDown控制屏幕上的精灵 当我实现以下代码时,精灵成功地跳了起来: if(keyDown[119]){//w key = up sprite_y +=40.0f; spriteT=spriteJ; } 在空中时,精灵使用以下代码返回: if(sprite_y>0){ gravity-=10*delta; sprite_y+=gravity; } else{ gravity=0; } 我遇到的问题是,如果你把手指放在w键

我用
glutkeyboardfunc
keyDown
控制屏幕上的精灵

当我实现以下代码时,精灵成功地跳了起来:

 if(keyDown[119]){//w key = up
    sprite_y +=40.0f;
    spriteT=spriteJ;
 }
在空中时,精灵使用以下代码返回:

 if(sprite_y>0){ gravity-=10*delta; sprite_y+=gravity; }
 else{ gravity=0; }
我遇到的问题是,如果你把手指放在
w
键上,精灵就会永远跳下去,一直往上爬

我知道这是因为我正在使用
键控
方法,所以我尝试了以下方法:

 if(keyDown[119]){//w key = up
    sprite_y +=40.0f;
    spriteT=spriteJ;
    keyDown[119]=0;//reset keyDown to keyUp
 }
但是我没有运气

有没有办法将
键限制在某个特定的时间段内,或者只按一次键?谢谢


编辑我不太明白这个问题怎么值得否决。你读过吗

您可以使用一个变量来表示键的先前状态,然后查看它是否已更改

例如:

//Initialise a bool called keyWasDown to false

if (keyDown[119]){
    if (!keyWasDown){
        //Do jumping code
        keyWasDown = true;
    }
else {
    keyWasDown = false;
}

这些狙击手在同一个函数或类中吗?因为你需要一个额外的变量来存储“已经跳转”的信息,所以你不会再跳转了。它们现在都在同一个函数中。我没有考虑过……在这种情况下,最简单的解决方案(如果您不需要其他地方的信息)可以是向该函数添加一个静态变量,并用false初始化。你甚至可以给它起个更好的名字,比如“hang_time”或“Airbored”或类似的名字:)好的,谢谢你的时间。我真的很感激。我要试一试:D