控制 c++ 中有关 getasynckeystate 函数的输入速度



我正在使用 c++ 中的 getasynckeystate 函数编写一个简单的俄罗斯方块程序。我想在 while 循环中控制我的输入速度,这样块就不会快速移动。这是我的简单伪代码。

while(1)
{
if(GetAsyncKeyState(0x41) & 0x8000) //when key input is 'a'
{
move tetrimino to the left;
}
Sleep(100);
}

但是,如果我使用Sleep函数来控制输入速度,由于Sleep功能的特性,它在执行Sleep功能时会忽略输入。我想要的是控制我的输入速度(不要移动太快(,同时不要忽略每个输入情况。除此之外,块应该在按键时连续移动。我知道我不应该使用睡眠函数来实现这一目标,但是我无法弄清楚仅使用getasynckeystate函数如何实现这一目标。我该如何实现?

解决方案是使用计时器,我为您制作了此源代码,它将每秒检测一次按键并输出到控制台。 您可以利用此方法来完成要执行的操作。 它不使用睡眠,因此不会出现代码使用的问题。

要测试代码,请执行它并按住 C

#include <Windows.h>
#include <iostream>
#include <chrono>
int main()
{
using Clock = std::chrono::steady_clock;
std::chrono::time_point<std::chrono::steady_clock> start;
std::chrono::time_point<std::chrono::steady_clock> now;
std::chrono::milliseconds duration;
bool bInit = false;
while (1)
{
if (!bInit)
{
start = now = Clock::now();
bInit =true;
}

now = Clock::now();
duration = std::chrono::duration_cast<std::chrono::milliseconds>(now - start);
if (duration.count() > 1000)
{
start = Clock::now();
if (GetAsyncKeyState('C'))
{
std::cout << "pressed each 1 secondn";
}
}
}
return 0;
}

最新更新