C++-C++键盘长按键处理问题

意见反馈 意见反馈 主题:991 回复:2082

C++-C++键盘长按键处理问题

泛泛之交 发布于 2017-08-15 字数 843 浏览 1126 回复 6

在C++中每次按键消息的处理都在WndProc中,但是如果是长按键的话,这样处理的时候会卡顿一下。。。怎么解决呢。。。

假如是控制一个人物的走动,直接在WndProc中处理的话,长按W的时候,人物会先前进一步,然后停一下,再继续一直前进,直到松开W。。。

怎么解决呢。。。

LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
switch (msg)
{
case WM_KEYDOWN:
{
switch (wparam)
{
case VK_ESCAPE:
::DestroyWindow(hwnd);
case 87 ://W键,假如是控制一个人物的走动,直接这样处理,长按W的时候,人物会先前进一步,然后停一下,再继续一直前进,直到松开W
{
//前进//
break;
}

return ::DefWindowProc (hwnd, msg, wparam, lparam);
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(6

归属感 2017-10-22 6 楼

接受按键放开消息。。。。

晚风撩人 2017-10-04 5 楼

额 由于没办法调试,觉得应该是消息发到这里之后又接着发到其他地方了,你可以试着在这里直接把消息截取了,发到这里之后不再发往别的地方,类似QT里面的accept(),这个里面什么函数名字不记得了 额 只是猜测 提供个思路吧 希望对你有帮助

甜柠檬 2017-09-26 4 楼

捕捉按下消息 然后执行行走指令

监听弹起 然后停止行走指令

希望可以帮到你

代码实现 就要自己想了 那样记忆深刻 学习越快 亲 加油

虐人心 2017-09-04 3 楼

如果只是想区分是否是重复消息的话,lparam中有一位可以判断发送这次消息前键盘处于抬起还是按下状态。

浮生未歇 2017-08-31 2 楼

长按w键时,先接收到w键消息一次,人物走动几步。在此后一段时间内,再收到若干次w键消息时,就屏蔽这几次消息。超过此时间后再次接收w消息,人物继续走动。然后又等待一段超时...。依次可以达到长按w键,人物走动、停下、走动...

偏爱自由 2017-08-15 1 楼

在keydown事件响应中,设置人物的移动方向;
在游戏主循环中,根据方向来update人物的移动。
不可能一顿一顿的
估计和你的游戏主循环写的有关系