正是利用了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
尝试使用System.Threading.Timer代替了Thread.Sleep,由于它的费用可以让你的情况不同。详情请看这里 - https://stackoverflow.com/questions/391621/compare-using-thread-sleep-and-timer-for-delayed-execution –
@StepanNovikov即使计时器不会精确到几毫秒内特别是在这样短的时间内。 – Servy
如果你想做游戏开发,你最好使用适当的游戏开发框架/引擎。如果你不这样做,你就会被迫自己建立基本框架(游戏循环等)。 – Servy