游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2007|回复: 3

龙书中GetAsyncKey函数问题

[复制链接]

6

主题

72

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2010-7-23 12:07:00 | 显示全部楼层 |阅读模式
里面有这么一句话 GetAsyncKeyState( 'W' ) & 0x8000
后面的0x8000有什么意义?为什么要按位与呢?

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2010-7-23 17:02:00 | 显示全部楼层

Re:龙书中GetAsyncKey函数问题

看文档啊,getasynckey可以检测2种状态:
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState.

29

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2010-7-25 11:58:00 | 显示全部楼层

Re:龙书中GetAsyncKey函数问题

兄弟其实很简单的GetAsyncKeyState函数返回类型使long型,高位表示该键是否被按下,按下为1弹起为0,  当弹起时返回值用二进制表示:0000 0000 0000 0000 0000 0000 0000 0000(long型在32为机器上只有32位4字节)
按下时返回值用二进制表示:1111 1111 1111 1111 1000 0000 0000 0001即:0xffff8001
      0x8000的二进制表示:0000 0000 0000 0000 1000 0000 0000 0000
相与表示只取高位屏蔽掉低位其他的可能状态

0000 0000 0000 0000 0000 0000 0000 0000
&(相同位为1结果为1,不同为0)
0000 0000 0000 0000 1000 0000 0000 0000
结果为0即假所以该键未按下

1111 1111 1111 1111 1000 0000 0000 0001
&
0000 0000 0000 0000 1000 0000 0000 0000
结果为真所以该键被按下了
用0x8000做相与操作是因为这样恰好能取得该函数所输出的高位部分,这样就能表示某键被按下了。

5

主题

42

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2010-7-26 00:49:00 | 显示全部楼层

Re:龙书中GetAsyncKey函数问题

简单来说就是排除意外情况 更安全...
directinput中也是要这样写~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 10:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表