我的问题是:为什么使用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;
}
}
}
谢谢,