用C#制作计时器 - 秒到几分钟到几小时等

时间:2012-11-24 08:02:19

标签: c# math timer

我正在尝试用C#制作一个计时器。我这样做是通过计算帧然后使变量(秒)等于帧数除以60.我还通过使另一个变量(分钟)等于秒除以60来计算分钟数。

问题 当分钟上升一分钟时,秒数仍在计算中,我不知道如何解决这个问题。我想在秒达到60时添加一分钟到几分钟,然后在没有将分钟设置为零的情况下返回到零。

这是我尝试过的:

    int frames = 0;
    int seconds = 0;
    int minutes = 0;

这是更新:

    protected override void Update(GameTime gameTime)
    {

        minutes = seconds / 60;

        seconds = frames / 60;

        frames += 1;

3 个答案:

答案 0 :(得分:5)

我建议您计算帧数,并在需要时从中获取秒数和分钟数。因此,如果您确实需要更新每个Update调用中的所有变量,那么您需要:

frames++;
seconds = (frames / 60) % 60;
minutes = frames / (60 * 60);

或者更清楚,定义一些常量:

const int FramesPerSecond = 60;    const int SecondsPerMinute = 60;    const int FramesPerMinute = FramesPerSecond * SecondsPerMinute;

...

frames++;
seconds = (frames / FramesPerSecond) % SecondsPerMinute;
minutes = frames / FramesPerMinute;

(如果您需要在一小时后将分钟重置为0,则需要进一步扩展。)

目前尚不清楚你想要做什么 - 可能有更好的方法来实现它。如果你肯定试图计算帧数,这很好......但是如果你想要计算经过的时间,你应该记住一个基准时间,然后从当前时间中减去它,而不是依赖于计时器触发< em>完全每秒一次。

答案 1 :(得分:2)

注意:如果从0到60(分钟和秒)计数,则计算为61秒。所以在你的条件下从0到59。

例如,手上有5个手指,但如果我们从0开始计算,则我们有6个手指。 (我们是变种吗?)

:)

答案 2 :(得分:1)

因此,如果您不需要System.Threading.Timer或System.Threading.DispatcherTimer,则可以使用标准TimeSpan并为其添加毫秒数。 或者使用自动递增属性创建自己的TimeSpan类。