我實際上有一個健康狀況欄,我希望每秒消耗一次。酒吧消耗的速度在另一個變量中聲明,這將取決於遊戲者在遊戲中採取的行動而改變。XNA隨着時間減少而減少變量
關於如何使用GameTime的如何實現這個任何提示?
我實際上有一個健康狀況欄,我希望每秒消耗一次。酒吧消耗的速度在另一個變量中聲明,這將取決於遊戲者在遊戲中採取的行動而改變。XNA隨着時間減少而減少變量
關於如何使用GameTime的如何實現這個任何提示?
下面是一些代碼,您可能會發現有幫助。首先,我們將爲了設置,我們要使用的時間間隔聲明幾個變量:
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
}
}
這就是我該怎麼做的。
由於我不能評論喬恩的答案,我只是在他的文章中添加評論作爲回覆。你可能想要使用「timer + = TIMER」,否則你會在時間的小數部分中失去。也就是說,3.2秒會變成3秒。
好點。這將是一個更準確的計時器。我更新了我的代碼。 – jgallant
好的,謝謝!爲什麼使用Jon的原始方法會浪費時間? – AJCol
@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
請給我們一些代碼。 – olevegard
這就是我遇到的問題,我不完全確定如何開始編碼時間部分。下面是一些僞代碼,解釋它的工作原理。 而(健康> 0) \t { \t當1秒 \t健康gametime增加 - =減少速度 \t} 任何教程,我可以用它來了解GameTime屬性,方法等,也將是一個大幫助(除了MSDN,我不覺得它非常有用) – AJCol