在我的项目中,我需要修改这个预先制作的代码来改变游戏的布局。因此,我想在我的表单上添加关键事件,以便导航到“WASD”,而不是使用按钮来移动蛇。但问题是,一旦我将该函数添加到表单并测试它以显示在控制台上,它什么都没有,而不是事件错误。我不是这方面的专家,所以我希望有人能够引导我走上正确的道路,谢谢。
这是我项目的代码和截图。
public Form1()
{
InitializeComponent();
backgroundMusic.PlayLooping();
this.AutoSize = true;
boardPanel.AutoSize = true;
//Set up the main board
mainBoard = new Board(this);
//Set up the game timer at the given speed
clock = new Timer();
clock.Interval = speed; //Set the clock to tick every 500ms
clock.Tick += new EventHandler(refresh); //Call the refresh method at every tick to redraw the board and snake.
duration = 0;
score = 0;
level = 1;
modeLBL.Text = mode;
gotoNextLevel(level);
}
private void keyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.W)
{
Console.WriteLine("W is pressed");
}
}
}
答案 0 :(得分:3)
您的问题是,Control
上的Form
通常会有焦点并捕获所有关键事件。
要在子控件具有焦点时按下某个键,Form
引发KeyDown
事件,请将Form
的{{3}}属性设置为true:
public Form1()
{
InitializeComponent();
backgroundMusic.PlayLooping();
this.AutoSize = true;
this.KeyPreview = true; // <-- add this line