У меня есть программа 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.