C# 移动物体的定时器

C# 移动物体的定时器,c#,animation,timer,ticker,C#,Animation,Timer,Ticker,我有4只狗在比赛,我需要把它们移过身体,但它们不会逐渐移动,它们从起跑线开始,然后立即传送到终点线,不会在中间移动。随着每个计时器的滴答声,它们的位置.X都会增加 我需要一个计时器还是4个计时器?我现在有一个,间隔设置为400 以下是相关代码: private void btnRace_Click(object sender, EventArgs e) { btnBet.Enabled = false; timer1.Stop(); timer1.Start();

我有4只狗在比赛,我需要把它们移过身体,但它们不会逐渐移动,它们从起跑线开始,然后立即传送到终点线,不会在中间移动。随着每个计时器的滴答声,它们的位置.X都会增加

我需要一个计时器还是4个计时器?我现在有一个,间隔设置为400

以下是相关代码:

private void btnRace_Click(object sender, EventArgs e)
{   
    btnBet.Enabled = false;
    timer1.Stop();
    timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{   while (!isWon)
    {
        for (i = 0; i < Dogs.Length; i++) // there are four dogs
        {                    
            if (Dogs[i].Run()) // Run() returns true if full racetrack is covered by this dog
            {
                Winner = i + 1;
                isWon = true;

                MessageBox.Show("We have a winner! Dog #" + Winner);

                break;
            }
        }
}

这些狗似乎只移动了一步,然后立即出现在终点线上。我做错了什么?

从timer1\u Tick方法中删除While循环。 此方法每400毫秒运行一次,但在您的情况下,在第一次启动时,它会等待一只狗获胜

另外,你应该在其中一只狗获胜后停止计时

private void timer1_Tick(object sender, EventArgs e)
{   
    for (i = 0; i < Dogs.Length; i++) // there are four dogs
    {                    
        if (Dogs[i].Run()) // Run() returns true if full racetrack is covered by this dog
        {
            Winner = i + 1;
            isWon = true;
            timer1.Stop();
            MessageBox.Show("We have a winner! Dog #" + Winner);
            break;
        }
    }
}

你的计时器只响了一次,卡在这个循环中

  while (!isWon)
  {
  }
移除循环,让计时器完成它的工作

在末尾加上

 if (isWon) timer1.Stop();
 if (isWon) timer1.Stop();