我的角色只能水平和垂直移動。我希望程式同時捕捉兩個擊鍵,而不僅僅是一個。我用溫福姆斯。
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.A)
Player.Move(Direction.Left);
if (e.KeyCode == Keys.D)
Player.Move(Direction.Right);
if (e.KeyCode == Keys.W)
Player.Move(Direction.Up);
if (e.KeyCode == Keys.S)
Player.Move(Direction.Down);
Invalidate();
}
uj5u.com熱心網友回復:
您可以使用以下方法獲取關鍵狀態
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern short GetKeyState(int keyCode);
public const int KEY_PRESSED = 0x8000;
public static bool IsKeyDown(Keys key)
{
return Convert.ToBoolean(GetKeyState((int)key) & KEY_PRESSED);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
var keyStates = new System.Collections.BitArray(new bool[]{
IsKeyDown(Keys.A), IsKeyDown(Keys.W),
IsKeyDown(Keys.D), IsKeyDown(Keys.S)});
var combination = new byte[1];
keyStates.CopyTo(combination, 0);
var c = label1; var d = 3;
switch (combination[0])
{
case 1:
c.Text = "←"; c.Left -= d; break;
case 2:
c.Text = "↑"; c.Top -= d; break;
case 3:
c.Text = "↖"; c.Left -= d; c.Top -= d; break;
case 4:
c.Text = "→"; c.Left = d; break;
case 6:
c.Text = "↗"; c.Left = d; c.Top -= d; break;
case 8:
c.Text = "↓"; c.Top = d; break;
case 9:
c.Text = "↙"; c.Left -= d; c.Top = d; break;
case 12:
c.Text = "↘"; c.Left = d; c.Top = d; break;
default:
c.Text = ""; break;
}
Invalidate();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465208.html
