2013-08-20 76 views
0

我試圖在谷歌和stackoverflow上搜索這個,但我不知道該怎麼稱呼它,所以我找不到它。如何爲遊戲創建一個「循環」,每運行幾毫秒?

我該如何爲C#程序製作一個「循環」,每100毫秒運行一次?類似於Minecraft所稱的「滴答」或GameMaker所稱的「步驟」。

我不知道如何做到這一點。我正在使用visual studio,並且有一個主窗口。有些事情我想要不斷執行,所以我想弄清楚如何做一個「步驟」或「更新」功能。

+1

使用'while'和['Timer'](http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx)? – Default

+3

你應該使用某種遊戲設計框架來爲你提供這個。你不是嗎? – Servy

+1

您可以使用XNA,它具有爲此目的而創建的更新和繪製方法。但我認爲XNA已經死了,你也可以看看MonoGame。 –

回答

-1

您可以使用定時器控件,該控件可以設置爲以給定的時間間隔打勾。 interval屬性以毫秒爲單位,因此您需要Timer1.Interval = 100;

+2

「定時器」的精度對遊戲循環來說是不夠的。它的精度是+/- 16毫秒或類似的東西。遊戲不能有這種差異。 – Servy

0

如果你希望它運行100毫秒,你會做這個

System.Timers.Timer timer = new System.Timers.Timer(100); 
public void Initialize(object sender, EventArgs e) 
{ 
    timer.Elapsed+=Elapsed; 
} 
public void Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    //do stuff 
} 

別的東西,你可以做的,但是我不認爲這是一個高效

 using System.Threading; 

     Thread th = new Thread(new ThreadStart(delegate 
     { 
      while (true) 
      { 
       Thread.Sleep(100); 
       //do stuff 
      } 
     })); 

或者,你可以下載monogame使在C#中更復雜的遊戲

http://www.monogame.net/

它擁有自己的gameTime控件。

+2

「定時器」的精度對於遊戲循環來說是不夠的。它的精度是+/- 16毫秒或類似的東西。遊戲不能有這種差異。 – Servy

+0

那麼你有什麼建議嗎,Servy? – Dominoed

+0

那麼何時以及如何調用'Initialize'?我試圖這樣做,但我不知道要調用什麼參數。 – Dominoed

相關問題