如何固定计时器,以秒为单位?

时间:2019-09-07 05:31:27

标签: c# timer

我希望游戏的屏幕上有一个计时器,以显示经过了多少秒(代表玩家的得分)。我可以将计时器显示在屏幕上,但是,计数器出现异常,我的控制台也无法正确打印结果。有任何想法吗?

我尝试使用timer.Elapsed但是SplashKit(我必须使用)似乎无法识别。

很抱歉,如果这是一个重复的问题,我是编程新手,已经四处搜寻,但是找不到我能理解/帮助的任何东西。

    public void Timer()
        {
            //begin timer and print results
            timer.Start();

            //write to console how many milliseconds have passed, and divide by 1000 for seconds.
            Console.WriteLine($":{timer.Ticks} milliseconds have passed");
            Console.WriteLine($"which is {timer.Ticks /1000} seconds");

            //covert timer.Ticks to string and store into string 'score
            score = Convert.ToString(timer.Ticks);

            //assign font 
            Font Quicksand = SplashKit.LoadFont("Quicksand", "Resources\\fonts\\Quicksand-Regular.otf");
            //use SplashKit to print to screen.. 
            SplashKit.DrawText(score, Color.Black, Quicksand, 70, 700, 900);
        }

2 个答案:

答案 0 :(得分:0)

目前尚不清楚timer是什么类型,但是属性Elapsed可能是一个TimeSpan。

包含小数的总秒数显示在double值中:

timer.Elapsed.TotalSeconds

您可以通过强制转换将其截断为整数

var seconds = (int)timer.Elapsed.TotalSeconds;

答案 1 :(得分:0)

+1对Eric j的评论-我知道的所有Timer类型的框架都不是直接提供秒表样式的“游戏已运行5分钟”类型的功能。它们是按预定时间间隔引发事件的类。如果使用计时器,则游戏的实际计时将由您完成,方法是记录开始时间,并在计时器经过时间间隔后将现在的时间与当前时间进行区分:

public class Whatever{
  private Timer _t = new Timer();
  private DateTime _start;

  public Whatever(){ //constructor
    _t.Elapsed += TimerElapsed; //elapsed event handled by TimerElapsed method
    _t.Interval = 1000; //fire every second 
  }

  public void StartGame(){
    _start = DateTime.UtcNow;
    _t.Start();
  }

  private void TimerElapsed(){

    Console.WriteLine("Game has been running for " + (DateTime.UtcNow - _start));

  }

计时器间隔仅控制时钟在屏幕上更新的频率。如果您提供的游戏时间为10.1、10.2秒等,则将计时器间隔设置为小于100(例如,每0.1秒更新一次)