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

在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、状态转换条件:

。。。未完待继!

你可能感兴趣的:(GetKeyState实现简单的键盘类(1))