2017-10-19 240 views
3

正是利用了Thread.Sleep我是一个初学编程的学习谁C#和我想作一个基于文本的蛇游戏控制台窗口。现在,游戏运行得很好,但是我遇到了使用Thread.Sleep()方法将代码暂停特定毫秒数的问题。C# - 在控制台应用程序

的问题是,每当我试图暂停比赛的具体时间,这似乎停顿了几毫秒长。而且因为这是一个蛇游戏,这是一个相当大的问题。

我试图这样做:

while (true) 
      { 
       double startingTime = DateTime.Now.TimeOfDay.Milliseconds; 
       //code 
       double lag = DateTime.Now.TimeOfDay.Milliseconds - startingTime; 
       Thread.Sleep((int)Math.Round(25 - lag)); 
       double finalTime = DateTime.Now.TimeOfDay.Milliseconds - startingTime; 
       Console.Title = string.Format("Time: {0}", finalTime); 
      } 

我知道一个事实,即代码需要大约6毫秒的运行,所以我试图MESURE并从中应该每隔之间等待的时间减去它移动。有时它工作正常,但往往不是控制台标题说,花了31毫秒...

我真的很感激任何建议,如果你知道一个更好的方式来从精确的量运行暂停码的时候,我会很高兴知道:)

解决:最后我用秒表一样塔米尔建议,感谢大家谁帮助:d

+0

尝试使用System.Threading.Timer代替了Thread.Sleep,由于它的费用可以让你的情况不同。详情请看这里 - https://stackoverflow.com/questions/391621/compare-using-thread-sleep-and-timer-for-delayed-execution –

+3

@StepanNovikov即使计时器不会精确到几毫秒内特别是在这样短的时间内。 – Servy

+5

如果你想做游戏开发,你最好使用适当的游戏开发框架/引擎。如果你不这样做,你就会被迫自己建立基本框架(游戏循环等)。 – Servy

回答

4

好,非常精确的计时,你应该使用multimedia定时器。 下一个最好的选择应该是秒表

+0

谢谢,我一定会检查出来 –