2012-11-15 60 views
0

我對C#編程還很陌生,這是我第一次在XNA中使用它。我試圖與朋友創建一個遊戲,但我們正在努力製作一個基本的計數器/時鐘。我們需要的是一個計時器,從1開始,每2秒+1,最大容量爲50.任何編程幫助都會很棒!謝謝。如何在C#中創建一個定時器/計數器XNA

回答

3

要創建一個定時器XNA你可以使用這樣的事情:

int counter = 1; 
int limit = 50; 
float countDuration = 2f; //every 2s. 
float currentTime = 0f; 

currentTime += (float)gameTime.ElapsedGameTime.TotalSeconds; //Time passed since last Update() 

if (currentTime >= countDuration) 
{ 
    counter++; 
    currentTime -= countDuration; // "use up" the time 
    //any actions to perform 
} 
if (counter >= limit) 
{ 
    counter = 0;//Reset the counter; 
    //any actions to perform 
} 

我絕不是在C#或XNA的專家爲好,所以我很感謝任何提示/建議。

+0

我決定跟你給我的答案一樣;然而,我無法弄清楚應該用.TotalSeconds執行什麼操作,這是我現在收到的唯一錯誤。有什麼辦法可以幫助我嗎? 編輯:我收到的錯誤是「'NullReferenceException未處理'對象引用未設置爲對象的實例」。 –

+0

由於gameTime只能出現該錯誤,因此a)您沒有將GameTime傳遞給該方法,b)您沒有在Update方法中使用該方法,或者c)兩者都是! gameTime必須是您從XNA中的標準循環中收到的參數。 –

-1

如果您不想使用XNA ElapsedTime,則可以使用c#計時器。你可以找到關於這個的教程,這裏的msdn reference for timer

無論如何,這裏是一些代碼,多少做你想要的。

首先,你需要在你的類類似的東西來聲明:

Timer lTimer = new Timer(); 
    uint lTicks = 0; 
    static uint MAX_TICKS = 50; 

然後,你需要初始化等。無論您想

private void InitTimer() 
    { 
     lTimer  = new Timer(); 
     lTimer.Interval = 2000; 
     lTimer.Tick += new EventHandler(Timer_Tick); 
     lTimer.Start(); 
    } 

然後在蜱事件處理程序,你應該做的計時器任何你想每50個滴答。

void Timer_Tick(object sender, EventArgs e) 
    { 
     lTicks++; 
     if (lTicks <= MAX_TICKS) 
     { 
      //do whatever you want to do 
     } 
    } 

希望,這有助於。

+0

非常感謝,我會嘗試一下,看看最合適的感覺。 –

+3

-1。 XNA不是基於事件的API。使用基於事件的計時器是單向的。使用經過的時間是適當的。 –