【发布时间】:2010-11-28 19:20:29
【问题描述】:
我有一个 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.
【问题讨论】:
-
在 WinForms 应用程序中,您应该使用
System.Windows.Forms.Timer,而不是System.Timers.Timer。它是如何弄乱你的动画的? -
我无法使用它,因为它会干扰我的动画。我已经尝试过了,但后来 stackoverflow 的人告诉我改用 Timers.Timer。至少我的动画现在工作正常,我唯一的问题似乎就是我上面说的那个。
-
它是如何弄乱你的动画的?
-
有趣的是,我已经放入了 System.Windows.Forms.Timer,它的工作原理与 System.Timers.Timer 完全相同。这意味着动画有效,但出现了与我上面描述的完全相同的问题。