难处理 多按键“同时响应” 总结
情景引入 |
一. 处理对象八个方向的移动(左上,右下,等)
二. 功能按键加组合键(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程序中常见按键处理问题!最终只有 情景四 无好的结果,不知道有人是否知道如何处理
如果觉得本文适合您且对您有帮助,请一定记得点推荐哟!
![]() |
作者:
JasNature 出处: http://NatureSex.cnblogs.com 本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。 如果本文有什么不妥或者错误的地方,请您一定要在评论中指出,以免误人子弟!非常感谢您的不吝赐教! | ||
分类:
C#.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述