- 注册时间
- 2021-4-16
- 最后登录
- 2024-3-13
- 在线时间
- 4 小时
编程入门
- 龙马币
- 70
|
先来看看GetAsyncKeyState()函数的原型:
- SHORT GetAsyncKeyState(int virtual_key);
复制代码 它的返回值是SHORT类型,也就是short int,占2个字节,共16位,如果返回值的最高位是1则表示该键被按下,否则该键被松开。
若该键被松开,只需满足最高位为0,假如返回 0000 0000 0000 0000,
如果像这样:
- if (GetAsyncKeyState(VK_A))
复制代码 直接将返回值进行逻辑判断,很显然逻辑为false,因为0000 0000 0000 0000后16位都是0,假如返回值是 0000 0000 0000 0001 呢?
直接拿来判断其逻辑值肯定为true,但实际上它表示false。
所以需要解决返回值后15位带来的影响。
怎么解决呢?很简单,用0x8000与其做 &(位与)操作就行了!
0x8000是16进制数,即 1000 0000 0000 0000。
- 0000 0000 0000 0001 & 1000 0000 0000 0000 = 0000 0000 0000 0000
- 0110 1100 1111 0001 & 1000 0000 0000 0000 = 0000 0000 0000 0000
- 1010 0011 0111 1100 & 1000 0000 0000 0000 = 1000 0000 0000 0000
复制代码 结果只与第1位有关。
所以要: if (GetAsyncKeyState(VK_A) & 0x8000) 这样判断。
|
|