难处理 多按键“同时响应” 总结

 
情景引入

 

 

一.  处理对象八个方向的移动(左上,右下,等)
二.  功能按键加组合键(Ctrl + A,等)该处理类似是与情景一
三.  双人对弈的游戏(如格斗类)
四.  同时响应多按键.(如音乐类游戏,同时按下F和J按键才算击中)(注意是同时相应,而不是拿个什么标识来处理那个按下了!那个未按下

 

 
相关解决方案

 

 

1》 对于处理情景一,网上有比较多的解决方案,主要实现方式为,数组矩阵,也有少量的使用布尔标识来处理

代码就不贴了:博客园的 作者 nowpaper 就已经写了 Silverlight C# 游戏开发:方向键的组合,八方向实现

http://www.cnblogs.com/nowpaper/archive/2010/03/09/1680172.html

2》 对于第二种功能组合,大部分是标识处理,或者 执行相应的 异域 运算,前提是 该枚举 支持 Flag

举个例子:Winform的,但是大部分处理都类似

C# winform的窗体类有KeyPreview属性,可以接收窗体内控件的键盘事件注册。
窗体和控件都有KeyDown,KeyUp,KeyPress三个事件,每个事件都会有KeyEventArgs参数传入,只要判断传入参数的KeyChar就可以了,Framework提供了Keys枚举来表示键盘上的各个键。

核心判断的代码如下:
1.单键判断
if (e.KeyCode == Keys.Delete)
{
//处理逻辑
}
2.组合建判断:
if (e.Modifiers.CompareTo(Keys.Control) == 0 && e.KeyCode == Keys.Delete)
{
//处理逻辑
}

3》 这个需要建立2个逻辑区域,后面的实现基本和情景一相同

4》 惭愧!啊!暂时没有找到任何的解决方案!基本不能在同一时刻处理多按键响应

我想了很久,自己觉得一般的解决方案大概就2种:(可能是自己操作系统知识了解太少的缘故)

1.用第三个按键,取代双按键响应问题,但是这样会带来较差的按键体验。

2.使用按键线程池,在某一个时刻,把有效的按键放入这个池中,(当然这个要多线程)
然后延迟大概100毫秒,取出当前所以已经按下的按键,这样就可以组合了。但是这100毫秒
的延迟是个问题,有时候100毫秒就来不及按下2个按键。

 

 

 

 

该随笔意在总结C/S程序中常见按键处理问题!最终只有 情景四 无好的结果,不知道有人是否知道如何处理

转载于:https://www.cnblogs.com/NatureSex/archive/2012/03/08/2384887.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值