2013-05-28 78 views
3

我實際上有一個健康狀況欄,我希望每秒消耗一次。酒吧消耗的速度在另一個變量中聲明,這將取決於遊戲者在遊戲中採取的行動而改變。XNA隨着時間減少而減少變量

關於如何使用GameTime的如何實現這個任何提示?

+0

請給我們一些代碼。 – olevegard

+0

這就是我遇到的問題,我不完全確定如何開始編碼時間部分。下面是一些僞代碼,解釋它的工作原理。 而(健康> 0) \t { \t當1秒 \t健康gametime增加 - =減少速度 \t} 任何教程,我可以用它來了解GameTime屬性,方法等,也將是一個大幫助(除了MSDN,我不覺得它非常有用) – AJCol

回答

2

下面是一些代碼,您可能會發現有幫助。首先,我們將爲了設置,我們要使用的時間間隔聲明幾個變量:

float timer = 3; 
float const TIMER = 3;  //We also declare a const for resetting purposes 

在你的更新方法,您可以提取自上次更新(增量時間)經過時間如下:

在您的更新方法
float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds; 

不過,你現在可以用你的定時器變量減去經過時間:

timer -= elapsed; 

現在你只需要檢查,如果你的計時器已經過期,然後運行代碼:

if (timer < 0) 
{ 
    if (health > 0) 
    { 
     health -= rate; 
     timer += TIMER; //reset timer 
    } 
} 

這就是我該怎麼做的。

+1

非常好,謝謝你的幫助! – AJCol

+0

@ user2429279我在響應中沒有提到它,但是,代碼表示TotalSeconds,因此,我們設置的計時器以秒爲單位。使用上面的代碼逐字,將爲您提供3秒的計時器。 – jgallant

+0

是的,我得到了那一點,謝謝:) – AJCol

0

由於我不能評論喬恩的答案,我只是在他的文章中添加評論作爲回覆。你可能想要使用「timer + = TIMER」,否則你會在時間的小數部分中失去。也就是說,3.2秒會變成3秒。

+0

好點。這將是一個更準確的計時器。我更新了我的代碼。 – jgallant

+0

好的,謝謝!爲什麼使用Jon的原始方法會浪費時間? – AJCol

+0

@AJCol 舉個簡單的例子,假設每個更新需要0.4s。遊戲開始,定時器爲3.0,定時器倒數:2.6,2.2,...,0.6,0.2,-0.2,這意味着健康欄調整所花費的總時間爲3.2秒。如果您再次將計時器設置爲3.0,則會重複該過程;健康欄會每3.2秒調整一次。如果改爲使用+ =,則計時器將設置爲2.8s(-0.2 + 3.0 = 2.8),並且順序爲2.4,2.0,...,0.4,0.0。這次它實際上花了2.8s。這將重複(3.2s,2.8s,3.2s等),平均爲3.0s而不是3.2s。 – user1323245