zoukankan      html  css  js  c++  java
  • 难处理 多按键“同时响应” 总结

     
    情景引入

    一.  处理对象八个方向的移动(左上,右下,等)
    二.  功能按键加组合键(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
          本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。
          如果本文有什么不妥或者错误的地方,请您一定要在评论中指出,以免误人子弟!非常感谢您的不吝赐教!
  • 相关阅读:
    CSUST--3.14排位周赛第四场 (全解)
    CSUST--3.7排位周赛第三场 (全解)
    android 代码功能测试junit test
    Sqlite数据库创建、删除、降级笔记
    三种进程和线程数据共享模块方法Queue》Pipe》manager
    多线程实例
    信号量
    红绿灯模型
    linshiwendang12--匈牙利
    spring--注入类型--构造方法(不常用)
  • 原文地址:https://www.cnblogs.com/NatureSex/p/2384887.html
Copyright © 2011-2022 走看看