我有一个 WinForms 程序,其中有一个动画对象,当我按向上、向下、向左和向右时,它会四处移动。对象的运动在一个计时器内进行动画处理,每 30 毫秒调用一次。计时器在 KeyDown 事件时启动,在 KeyUp 事件时停止。
因此,如果我按住左键,然后在我松开左键并按下另一个键后立即停顿(大约半秒),然后它会朝那个方向移动。没有出现这个问题,如果我按住左,松开它,稍等片刻,然后按右。在这种情况下,它会立即向右移动。如果我按住左键,然后开始按住右键,而我仍然按住左键,它也不会出现。在这种情况下,它也会立即开始向右移动。仅当我释放该键并随后立即按下另一个键时,才会出现问题。
KeyDown 事件:
private void form_KeyDown(object sender, KeyEventArgs e)
{
k = 0;
watch.Start();
if (e.KeyCode == Keys.Left)
{
direction = MOVE_LEFT;
}
else if (e.KeyCode == Keys.Right)
{
direction = MOVE_RIGHT;
}
else if (e.KeyCode == Keys.Up)
{
direction = MOVE_UP;
}
else if (e.KeyCode == Keys.Down)
{
direction = MOVE_DOWN;
}
timerMove.Start();
}
KeyUp 事件:
private void form_KeyUp(object sender, KeyEventArgs e)
{
timerMove.Stop();
}
定时器事件(动画运动)
void charMovement(object sender, System.Timers.ElapsedEventArgs e)
{
if (direction == MOVE_LEFT)
{
timerMove.Interval = 30;
CharSize(11, 15); //mainChar.Size = new System.Drawing.Size(11, 15);
//code for movement
}
else if (direction == MOVE_RIGHT) //... etc. etc.