博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
游戏杆编程心得二:如何判断按钮的有效按下
阅读量:2430 次
发布时间:2019-05-10

本文共 1262 字,大约阅读时间需要 4 分钟。

作者:朱金灿

来源:

 

     在游戏杆编程中通过一般需要获取按钮状态来执行特定事件,比如实现按下按钮1一次,变量num递增100,但在调试系统时往往会出现这种情况:明明按下按钮一次,但是变量num已经递增了好几百。这是怎么回事呢?开始我有点百思不得其解。但经过查看程序和思考,我找到了原因。原来程序中我使用了时钟事件,设置了一个时钟,这个时钟表示系统每50毫秒获取游戏杆的按钮状态,具体代码如下:

 

     

 

同时在Ontimer函数里判断按钮按下时我采用了这样的判断语句:

 

    

 

      后来我认为这种判断条件是有问题。问题在哪里?主要是没有考虑状态的实时更新性,为什么会出现按下按钮一次,但是变量num已经递增了好几百的情况下?这是因为人按下按钮的持续时间(即按钮从被按下到弹起的时间间隔)是不确定,有可能是几十毫秒或几秒,但系统获取按钮状态的时间却是确定的(系统不管你的按钮已被按下了多少秒,总之系统就是每50毫秒获取一次按钮状态),那么会出现这样一种情况:当你按下按钮的时间超过100毫秒时,那么系统认为你已经按下按钮已经2次了。一种直接的解决办法是将时钟事件的响应时间从50毫秒改为几秒,这下按下按钮短于这个时间的都会认为有效。但我认为这不是一个有效的解决办法,因为无法证明时钟事件响应时间设定为多长是合适的。我想了一个更为有效的办法,就是重新定义有效按下:有效按下就是按钮现在处于弹起状态,但它的前一个状态为按下,具体代码为:

 

 

 

  然后在获取游戏杆状态的对话框类里定义一个私有数据成员:

 

 

 

在对话框类的构造函数初始化m_Btn1PreStatus为弹起状态:

 

 

修改变量num递增100的判断部分代码:

 

 

  这次得到的经验是获取硬件状态必须考虑它的实时性。

转载地址:http://vdimb.baihongyu.com/

你可能感兴趣的文章
物联网浪潮之下,前端工程师如何迎刃而上?
查看>>
从端到云——工业物联网项目全栈快速开发
查看>>
LoRa vs NB-IOT:哪个物联网标准更具优势?
查看>>
移动周刊第 205 期:Google 正式发布 ARCore 预览版、iOS 工程打包速度提升十倍的解决方案...
查看>>
八大 IoT 安全关键技术解析
查看>>
有钱 Python,没钱 PHP,编程语言也嫌贫爱富
查看>>
Docker是啥?容器变革的火花?
查看>>
假如从餐饮店的角度来看架构…
查看>>
这个充电宝太黑科技了,又小又不用自己带线,长见识了~
查看>>
HDC.2019后再发力,AppGallery Connect服务新升级
查看>>
网易云音乐热评的规律,44万条数据告诉你
查看>>
超神!GitHub 标星 5.5w,如何用 Python 实现所有算法?
查看>>
扛住100亿次请求——如何做一个“有把握”的春晚红包系统
查看>>
在北京看场雪为什么这么难?
查看>>
新年了,5G手机芯片,到底买谁?
查看>>
疫情之下「在家办公模式」开启,你该选择哪些远程协同工具?
查看>>
如何使用pdpipe与Pandas构建管道?
查看>>
远程办公的33种预测
查看>>
阿里巴巴架构师:十问业务中台和我的答案
查看>>
华为云发布三类六款计算实例 打造更强云端计算能力
查看>>