GetKeyState实现简单的键盘类(1)

本文探讨了在Win32环境下使用GetKeyState函数处理输入的问题,并提出了一种利用有限状态机来优化输入响应的方法,确保键盘或鼠标操作只被响应一次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在WIN32游戏编程中,如果说进行输入处理,可能是用Get(Async)KeyState函数是最方便的了。如果没有精力编写专业的输入API情况下,是个比较简易的输入类解决方案。

 

但(GetKeyState(VK_XXX) & 0x8000)有一个缺点就是只要一按下,就可以产生大量的输入反馈。如果是在3D中移动物体还好说,按下时物体移动,抬起时物体停止移动。但如果说是点击某个界面的按钮,则会反应N次。

 

因此希望可以有像MFC中的OnLButtonDown, OnLButtonUp这样的函数,当键盘或鼠标按下或按起时,只需要响应一次。这样的话,GetKeyState的可用范围会更广。

 

其实要实现这样的功能也很简单,只需要使用人工智能或游戏中常用的有限状态机就可以解决。

 

1、状态:

我们可以假定按键有这样4种状态:UPING、FIREDOWN、DOWNING、FIREUP。

UPING:当没有按键的时候,这个键就处于UPING状态。

FIREDOWN:当第一次按下某键的时候,这个键就处于FIREDOWN状态。

DOWNING:当你一直按着某键时,这个键就处于DOWNING状态。

FIREUP:当你从按着某键到按起的一瞬间,这个键处于FIREUP状态。

 

2、状态转换关系:

状态转换关系是:UPING---》FIREDOWN---》DOWNING---》FIREUP---》UPING。

 

3、状态转换条件:

。。。未完待继!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值