我想在C#中制作一个计时器.我这样做是通过计算帧然后使变量(秒)等于帧数除以60.我还通过使另一个变量(分钟)等于秒除以60来计算分钟数.
问题 当分钟上升一分钟时,秒数仍在计算中,我不知道如何解决这个问题.我想在秒达到60时添加一分钟到几分钟,然后在没有将分钟设置为零的情况下返回到零.
这是我尝试过的:
int frames = 0;
int seconds = 0;
int minutes = 0;
Run Code Online (Sandbox Code Playgroud)
这是在更新:
protected override void Update(GameTime gameTime)
{
minutes = seconds / 60;
seconds = frames / 60;
frames += 1;
Run Code Online (Sandbox Code Playgroud)
我建议你只计算帧数,并在需要的时候从中获得秒数和分钟数.因此,如果您确实需要更新每个Update调用中的所有变量,那么您将拥有:
frames++;
seconds = (frames / 60) % 60;
minutes = frames / (60 * 60);
Run Code Online (Sandbox Code Playgroud)
或者更清楚,定义一些常量:
const int FramesPerSecond = 60; const int SecondsPerMinute = 60; const int FramesPerMinute = FramesPerSecond*SecondsPerMinute;
...
frames++;
seconds = (frames / FramesPerSecond) % SecondsPerMinute;
minutes = frames / FramesPerMinute;
Run Code Online (Sandbox Code Playgroud)
(如果您需要在一小时后将分钟重置为0,则需要进一步扩展.)
目前尚不清楚你想做什么 - 可能有更好的方法来实现它.如果你肯定想要计算帧数,这很好......但是如果你想要计算经过的时间,你应该记住一个基准时间,然后从当前时间中减去它,而不是依赖于准确计时每秒一次.