Timer C#用于游戏开发

时间:2012-12-03 19:59:36

标签: c# timer stopwatch

我有一个C#游戏,我需要允许锦标赛模式,每轮将是2分钟。如何在表格上显示从0:00到2:00的时间?

我在构造函数中有这个:

        Timer timer = new Timer();
        timer.Interval = 1000;
        timer.Tick += new EventHandler(Timer_Tick);
        timer.Start();

这是事件处理程序

    void Timer_Tick(object sender, EventArgs e)
    {
        this.textBox1.Text = DateTime.Now.ToLongTimeString();
    }

但是我不知道如何从当前时间0:00开始的时间开始..我尝试创建一个DateTime实例但是当我做myDateTime.ToString();在事件处理程序中,它只是0:00。

我试过搜索,但找不到任何相关内容。 非常感谢!

4 个答案:

答案 0 :(得分:2)

启动计时器时将当前时间保存到字段:

_startTime = DateTime.Now;
timer.Start();

稍后计算差异:

void Timer_Tick(object sender, EventArgs e)
{
    this.textBox1.Text = (DateTime.Now - _startTime).ToString(@"mm\:ss");
}

答案 1 :(得分:0)

Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Thread.Sleep(10000);
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;

// Format and display the TimeSpan value. 
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);

void Timer_Tick(object sender, EventArgs e)
    {
        label1.Text = stopWatch.ElapsedTicks.ToString();
    }

答案 2 :(得分:0)

您可以在启动计时器时存储DateTime.Now,然后在每个计时器刻度处理程序中计算DateTime.Now与存储的开始日期之间经过的时间。如果你有暂停,你还需要跟踪游戏暂停的时间。

考虑到上述方法的不便之处,我建议你在某处声明一个StopWatch,实例化并在你调用timer.Start的地方启动它,然后在你的计时器滴答中只读取StopWatch的Elapsed属性。如果需要,您甚至可以停止并开始(暂停)它。

答案 3 :(得分:0)

您需要一个成员变量,它在定时器初始化和Timer_Tick事件处理程序的作用域内。

class Something
{
    DateTime _myDateTime;
    Timer _timer;

    public Something()
    {
        _timer = new Timer();
        _timer.Interval = 1000;
        _timer.Tick += Timer_Tick;

        _myDateTime = DateTime.Now;
        _timer.Start();

    }

    void Timer_Tick(object sender, EventArgs e)
    {
        var diff = DateTime.Now.Subtract(_myDateTime);
        this.textBox1.Text = diff.ToString();
    }
}