按键之间添加延迟

时间:2016-07-07 21:53:21

标签: c++

我正在使用GetAsyncKeyState()获取我正在制作的游戏的每一帧输入。

我想在每次按下时移动一个x,但不是每一帧,都必须有延迟。我目前正在通过每按一次键冷静下来这样做。

以下是我的CoolDown课程的部分内容:

bool test(bool asumedStatus)
{
    if(asumedStatus == status)
    {
        return true;
    } else
    {
        return false;
    }
}

void go()
{
    if(currentCount == runFor)
    {
        status = OFF_COOLDOWN;
    } else
    {
        currentCount++;
    }
}

void start()
{
    currentCount = 0;
    status = ON_COOLDOWN;
}
每个帧都会调用

controls来获取用户输入

void controls()
{
    if(test(OFF_COOLDOWN))
    {
        if(KEY_L && !KEY_R && !KEY_U && !KEY_D)
        {
            left();
            print();
            cd.start();
        }
        else if(KEY_R && !KEY_L && !KEY_D && !KEY_U)
        {
            right();
            print();
            cd.start();
        } else if(KEY_U && !KEY_L && !KEY_D && !KEY_R)
        {
            up();
            print();
            cd.start();
        } else if(KEY_D && !KEY_L && !KEY_R && !KEY_U)
        {
            down();
            print();
            cd.start();
        }
    } else
    {
        cd.go();
    }
}

不幸的是,这不起作用,延迟不存在。什么都没有改变。

有人有任何想法我能做到这一点吗?

1 个答案:

答案 0 :(得分:1)

我将如何做到这一点:

我用时间表示游戏的帧数或滴答声。

我会做2个变量:

  • startTime - 延迟开始的时间点
  • currentTime - 当前时间

现在,每次打勾,我都会更新currentTime(按1)。

通过获取这些变量之间的差异,您可以获得自延迟开始以来经过的时间。

如果差异更大而不是delay,那么我必须重置变量,重新开始。因此,将startTime设置为currentTime,并将currentTime设置为0

如果差异小于 而不是delay,则不执行任何操作,因为延迟不是“完成”。

类似的东西:

startTime = 0;
currentTime = 0;
delay = 2000; //In frames/ticks

//Called every frame/tick
void update() {
    ++currentTime; //Update time

    if (currentTime - startTime > delay) {
        //Reset
        startTime = currentTime;
        currentTime = 0;

        //Update whatever requires a delay
    }
}