我希望游戏的屏幕上有一个计时器,以显示经过了多少秒(代表玩家的得分)。我可以将计时器显示在屏幕上,但是,计数器出现异常,我的控制台也无法正确打印结果。有任何想法吗?
我尝试使用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);
}
答案 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秒更新一次)