1

我正在尝试在 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;
4

3 回答 3

5

我建议您计算帧数,并在需要时从中得出秒和分钟。因此,如果您确实需要更新每次Update调用中的所有变量,您将拥有:

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

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

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

...

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

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

目前尚不清楚您要尝试做什么-很可能有更好的方法来实现它。如果您确实要计算帧数,那很好……但是如果您要计算经过的时间,则应记住基本时间,然后从当前时间中减去该时间,而不是依赖于精确触发的计时器每秒一次。

于 2012-11-24T08:06:04.853 回答
2

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

例如,一只手有 5 个手指,但如果我们从 0 开始数,我们有 6 个手指。(我们是变种人吗?)

:)

于 2012-11-24T08:07:16.303 回答
1

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

于 2012-11-24T08:08:21.063 回答