【问题标题】:C# timers for moving objects用于移动对象的 C# 计时器
【发布时间】:2012-10-05 10:50:06
【问题描述】:

我有 4 只狗在赛跑,我需要让它们穿过表格,但它们不会逐渐移动,它们从起跑线开始并立即传送到终点线,而不会在中间移动。随着每个计时器滴答声,它们的 location.X 都会增加。

我需要一个计时器还是四个?我目前有一个,它的间隔设置为 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;
            }
        }
}

在 Dog 类中:

public bool Run()
{               
    Distance = 10 + Randomizer.Next(1, 4);
    p = this.myPictureBox.Location;
    p.X += Distance ;            
    this.myPictureBox.Location = p;

    //return true if I won the game
    if (p.X >= raceTrackLength)
    {
        return true ;
    }
    else
    {
        return false ;
    }
}

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

【问题讨论】:

    标签: c# animation timer ticker


    【解决方案1】:

    从 timer1_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;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

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

        while (!isWon)
        {
        }
      

      去掉循环,让定时器来工作

      在末尾添加

       if (isWon) timer1.Stop();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        • 1970-01-01
        • 2016-02-08
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        相关资源
        最近更新 更多