做一个贪吃蛇小游戏,可双人,
长按方向键则加速,
但是在双人的时候不能获取两个同时长按的键,
例如:
玩家1长按了W,玩家2在玩家1放起W前按一下其他键玩家1则不加速了,
玩家2如果是长按的话玩家2能加速总之就是不能获取两个同时长按的键,有什么办法可以解决?

解决方案 »

  1.   

    在同一个按键事件中只能检测按下的一个键值,但多个按键事件的组合,就可以检测同时按下的多个按键,这些事件有:
    KeyDown
    KeyUp
    KeyPress
    PreviewKeyDown
    这些事件再加上一些状态变量,足够判断两个人的按键操作,但要注意,最好是一个人用ASCII码键,一个人用扩展功能键,我试了下没问题,只是逻辑关系比较复杂,没写出完整的代码
      

  2.   

    检测按键按下:
             private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
            {
                switch (e.KeyValue)
                {
                    case 'A':
                        if (key1down == false)
                            MessageBox.Show("A down");
                        key1down = true;    // 键"A"按下未放开此标志一直为true
                        break;
                    case 'B':
                        if (key2down == false)
                            MessageBox.Show("B down");
                        key2down = true;    // 键"B"按下未放开此标志一直为true
                        break;
                    case 'C':
                        if (key3down == false)
                            MessageBox.Show("C down");
                        key3down = true;    // 键"C"按下未放开此标志一直为true
                        break;
                }
             }按键放开检测:        private void Form1_KeyUp(object sender, KeyEventArgs e)
            {
                switch (e.KeyValue)
                {
                    case 'A':
                            MessageBox.Show("A up");
                        key1down = false;   // 键"A"放开,此标志为false
                        break;
                    case 'B':
                            MessageBox.Show("B up");
                        key2down = false;   // 键"B"放开,此标志为false
                        break;
                    case 'C':
                            MessageBox.Show("C up");
                        key3down = false;   // 键"C"放开,此标志为false
                        break;
                }
            }
      

  3.   

    唉,真有意思,怎么搞到什么keydown、keypress上去了。#4楼的描述比较对路,这是键盘以及你的主机CMOS等的底层控制系统设计时的“by design”好了的机制,就是防止键盘过度灵敏反而造成麻烦,随意特意提高了其阀值。
      

  4.   

    随意特意提高了其阀值  -->  所以特意设置了其阀值比如说,你在灵敏度范围内连按下两个键“a,b”,那么底层就只向高层传输一个键而不是两个键。