2017-10-19 307 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

謝謝,我一定會檢查出來 –