这是我的第一篇文章!
我正在编写一个C ++程序来控制《东方游戏》系列的主角;我正在为那些有手部残疾,无法单击箭头键,但仍可以使用鼠标的人设计。
玩家应通过鼠标移动来触发箭头键(鼠标左移并按下左键,依此类推。)。我已经做过那部分了,但是角色的移动就像多次按箭头键一样,因此角色的移动有点笨拙,粗糙,而不像键保持时那样平滑干净。
我的问题是我必须知道鼠标何时处于空闲状态/不移动(以了解玩家想要按住箭头键多长时间-玩家向某个方向滑动鼠标越多,箭头键就越多保持),但不知道如何操作。在Stackoverflow上搜索时,我已经找到了GetLastInput函数,但是它会触发每个输入,并且与鼠标无关。
它应该显示为:
while( *mousenotidling* )
{
//holdbutton
}
您有什么建议?我怎么知道鼠标何时闲置(短时间,例如20ms)? (或者,如果您提出其他解决方案,则欢迎大家提出意见)
我正在使用C ++,Codeblock和GCC编译器编写它,我的操作系统是Windows 7 x86:)
答案 0 :(得分:0)
您可以呼叫TrackMouseEvent
并将空闲时间设置为2ms空闲时间所需的2000ms。您也可以使用GetLastInputInfo
来获取上一次执行键或鼠标移动的毫秒数。
DWORD GetIdleTime()
{
LASTINPUTINFO pInput;
pInput.cbSize = sizeof(LASTINPUTINFO);
if (!GetLastInputInfo(&pInput))
{
// any errors will be reported
}
// return idle time in milliseconds
return pInput.dwTime;
}
您也可以尝试这一建议
int prev_x = 0, prev_y = 0; while (1)
{int x = ..., y = ...; if (x == prev_x && y == prev_y) {mouse was moved}
else {mouse wasn't moved} prev_x = x; prev_y = y;}