- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我调查了GetAsyncKeyState在关于如何通过 WASD 键使虚构角色在屏幕上移动的代码示例中看到它之后。
我在它的 MSDN 页面上读到了这个:
Return value
Type: SHORT
If the function succeeds, the return value specifies whether the keywas pressed since the last call to GetAsyncKeyState, and whether thekey is currently up or down.
If the most significant bit is set, thekey is down, and if the least significant bit is set, the key waspressed after the previous call to GetAsyncKeyState.
我无法理解返回值的结构:
它说类型是 short
,所以我想通过它你可以将数字零表示为二进制,如 0000000000000000
,或十六进制如 0x0000
(据我所知,一个十六进制数字代表四个二进制数字)。
描述说最高有效位应该在按键被按下时设置。这让我觉得,如果设置了上述位,数字将如下所示:
1000000000000000
为了在我的程序中更好地使用它,我通过将它转换为十六进制来缩短它,结果为:
0x8000
因为十六进制的8
应该对应二进制的1000
。
当我看到上述机制在我的程序中不起作用时(执行 GetAsyncKeyState(chr) == 0x8000
总是会产生 false,无论按键是否被按下)我又拿了一个查看原始示例,我首先看到了使用的功能。在那里,返回值与数字 -32767
进行比较,当使用 Windows 计算器将其快速转换为十六进制时,结果为值 0xFFFFFFFFFFFF8001
。现在,不要介意最后一个十六进制数字 (1),因为这是用于检查最低有效位是否也处于事件状态的位,但在我的情况下我不希望这样。
这里我无法理解的地方如下:
1000000000000000
,而不是 0000000000001000
。我在这里缺少什么?最佳答案
GetAsyncKeyState(chr) == 0x8000
这是错误的检查。使用:
!!(GetAsyncKeyState(chr) & 0x8000)
查看是否设置了最高有效位。
值 0xFFFFFFFFFFFF8001
与 GetAsyncKeyState 的实际返回值不对应。 Windows 计算器不知道从 GetAsyncKeyState 返回的值的大小,因此它假定您使用的是 64 位数字。您可以在其设置中覆盖它。
关于c++ - GetAsyncKeyState 的返回值似乎与描述不符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7895888/
下面的代码应该显示我的表格中的随机帖子;它执行此操作,但它显示的帖子的 ID 与 URL 中的 ID 不同。 如何让它显示 URL 中的内容?谢谢。 $db = new PDO('mysql:host
我有一个自定义类,其中覆盖了 equals() 和 hashCode() 方法。我将该类的实例存储在 TreeSet 中。我无法弄清楚为什么 tree.contains(someObject) 返回
我正在尝试通过使用代码请求对healthkit中类别的授权: let healthKitStore: HKHealthStore = HKHealthStore() let healthKitType
我的代码的相关部分: 模型架构: Sequential( layers=[ BatchNormalization(input_shape=input_shape),
我是一名优秀的程序员,十分优秀!