gpt4 book ai didi

c++ - 在按键之间添加延迟

转载 作者:行者123 更新时间:2023-11-30 05:25:24 24 4
gpt4 key购买 nike

我正在使用 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();
}
}

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

有人知道我如何完成这个吗?

最佳答案

这是我的做法:


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

我会制作 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
}
}

关于c++ - 在按键之间添加延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38255895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com