我正在使用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();
}
}
不幸的是,这不起作用,延迟不存在。什么都没有改变。
有人有任何想法我能做到这一点吗?
答案 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
}
}