c#关键事件不起作用

时间:2015-11-19 01:35:58

标签: c# wpf

我的问题是:为什么使用D键调用KeyUp事件,如下所示。

似乎没有理由调用此keyup事件。是否与无法处理多个关键事件有关?

控制台输出(显示调用错误的keydown)

Keydown: D     ---> D Key pressed and held on keyboard
Keyup: D       ---> D KEY NOT RELEASED ON KEYBOARD
Keydown: S     ---> S Key pressed on keyboard
Keydown: D     ---> D Key being held as before (repeat calls should be omitted in this)
Keyup: S       ---> S Released on keyboard
Keyup: D       ---> D Released on keyboard

以下是代码:

XAML:

<Window x:Class="WpfApplication1.MainWindow"
    ...
    Closing="Window_Closing"    

    Title="MainWindow" Height="588" Width="816"
    KeyDown="Event_KeyDown"
    KeyUp="Event_KeyUp"
    MouseLeftButtonDown= "Event_MouseDown" ResizeMode="CanMinimize">
<Canvas x:Name="canvas"/>

的KeyDown:

public void Event_KeyDown(object sender, KeyEventArgs e)
    {
        if (inGame)
        {
            if (!e.IsRepeat) { System.Console.WriteLine("Keydown: " + e.Key.ToString()); }
            if (e.Key == Key.D || e.Key == Key.Right)
            {
                player.right = true;
            }
             if (e.Key == Key.A || e.Key == Key.Left)
            {
                player.left = true;
            }
             if (e.Key == Key.W || e.Key == Key.Up)
            {
                player.jump();
            }
             if (e.Key == Key.Space)
            {
                flying = true;
            }
             if (e.Key == Key.S)
            {
                player.falling = true;
            }
        }
    }

KEYUP:

public void Event_KeyUp(object sender, KeyEventArgs e)
    {
        if (inGame)
        {
            System.Console.WriteLine("Keyup: " + e.Key.ToString());
            if (e.Key == Key.S)
            {
                player.falling = false;
            }
             if (e.Key == Key.D)
            {
                player.right = false;
            }
             if (e.Key == Key.A || e.Key == Key.Left)
            {
                player.left = false;
            }
             if (e.Key == Key.Space)
            {
                flying = false;
            }
              if (e.Key == Key.Escape)
            {
                inGame = false;
                mainMenu = true;
            }
        }
    }

谢谢,

0 个答案:

没有答案