【发布时间】:2021-11-25 10:50:38
【问题描述】:
我正在尝试使用 WSAD 键移动 PictureBox“英雄”。它可以工作,但是只要按下 2 个按钮,它就会向按下的最旧按钮的方向移动(应该如此),但是当其中一个按钮被释放时,在再次移动之前会有一点延迟。有谁知道如何解决这个问题?
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.S:
hero.SetDirection("down");
break;
case Keys.W:
hero.SetDirection("up");
break;
case Keys.D:
hero.SetDirection("right");
break;
case Keys.A:
hero.SetDirection("left");
break;
}
hero.heroTimer.Start();
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.S || e.KeyCode == Keys.W || e.KeyCode == Keys.A || e.KeyCode == Keys.D)
{
hero.SetDirection("");
hero.heroTimer.Stop();
}
}
这是来自英雄班
private void heroTimer_Tick(object sender, EventArgs e)
{
switch (direction)
{
case "down":
this.Top += 5;
break;
case "up":
this.Top -= 5;
break;
case "left":
this.Left -= 5;
break;
case "right":
this.Left += 5;
break;
}
}
P.S 如果代码混乱,我很抱歉,我对此很陌生。
【问题讨论】:
-
当你按下键直到计时器计时没有任何反应,通过直接调用 heroTimer_Tick() 来解决这个问题。通过检查释放的键是否与当前方向匹配来修复 KeyUp 处理程序。