【问题标题】:How to simultaneous read keys on keyboard? [closed]如何同时读取键盘上的键? [关闭]
【发布时间】:2012-03-25 21:47:08
【问题描述】:

当我有一个新游戏要玩时,我的问题适合我的孩子年龄,并且给我留下了深刻的印象。

游戏能够看到超过 4,6 个键并做出反应,有时同时按下 8 个键。这怎么可能?这个有限制吗?或者如果我一直按“a,s,d,f,u,v,shift,0,uparrow,rightcltr,return and backspace”,程序可以“读取它”吗?一些关于它的介绍(在 C、bashscript、javascript 或 phyton 中)将不胜感激。感谢您在这里所做的任何努力。

【问题讨论】:

    标签: input keyboard simultaneous


    【解决方案1】:

    您当然可以通过跟踪按键按下时发生的事件和释放按键时发生的单独事件来对多个同时按键做出反应。例如,在 X11 中,这些事件是 KeyPress and KeyRelease,而在 Web 浏览器中,它们是 KeyDown 和 KeyUp Javascript 事件。但我想你会发现大多数键盘对可以同时电检测多少个按键都有物理限制,所以你的例子“a,s,d,f,u,v,shift,0,uparrow,rightcltr, return 和 backspace" 可能是太多的键。

    【讨论】:

    • 感谢您的回答!我真的很想知道极限。对不起,但这种身体限制对我来说就像一个神话。如果是真的,极限在哪里?我正在计划一个游戏,我需要知道,因为游戏可以是 2 名键盘玩家。
    • 对不起,我不知道这个限制。正如你所说,这可能是一个神话。过去的旧键盘绝对是这样,我只是假设它仍然是真的。
    【解决方案2】:

    如果我们谈论的是 Windows,GetKeyboardState() 会将 256 个虚拟键的状态复制到指定的缓冲区。

    BYTE keys[256];
    
    if(GetKeyboardState(keys))
    {
    
       //check if A key is pressed
       if((keys[VK_A]&0xF0) && !(prevKeys[VK_A]&0xF0)) 
       {
         DoAPressed();
       }
       //check if S key is pressed too
       if((keys[VK_S]&0xF0) && !(prevKeys[VK_S]&0xF0)) 
       {
         DoSPressed();
       }
       // the same goes for all keys you want to check
    }
    

    【讨论】:

    • 所以完全没有限制! Weeeeeee.. !-D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2011-02-03
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多