2014-01-23 159 views
1

因此,我正在爲我自己的個人享受創建一個戰鬥系統,並試圖解決它的治療部分。當我使用一個治療項目時,它會增加最大生命值,當該值超過當前最大生命值時,無論治癒效果的值是多少。限制最大值

我查了一下,有人提出了Saturation Arithmetic,但我在google上找不到任何解釋這個過程的東西。然後我在Stack上發現了另一個話題,解釋了同樣的問題,並得到了答案,但是當我嘗試它時,它不起作用。長話短說。

這是我正在使用的代碼塊。

public void useHealItem2(CharStats hero, Enemy enemy, Battle battle){ 
    Math.min(hero.hp += 500, hero.hp); 
    battle.herodmg = enemy.att - hero.def; 
    hero.hp -= battle.herodmg; 
} 

所以我想設置最大值爲一個可變的數量,而不是一個固定的數字。所以當英雄的HP增加時,這將自動縮放。我認爲這是有問題的,因爲它首先設置hp,所以它的最大值已經達到了500。如果這是有道理的。但那正是我想的,我真的不知道。

+0

治療項目應該做什麼?您的遊戲是否具有「當前HP」與「最大HP」的概念? – dnault

+0

使用'clipLevel * tanh(inputValue/clipLevel)'。這是一個相當常見的音頻剪輯算法。 –

+0

對於@dnault,現在我確實使用了Stendika的建議。但是謝謝你的加入! – Kristaphonie

回答

3

我會建議說hero.hp = Math.min(hero.currentHealth+500, hero.maxHealth),其中currentHealthmaxHealth正是他們聽起來像。

+0

繁榮去炸藥。那就是訣竅。謝謝。這也應該保持我喜歡的可擴展性。 – Kristaphonie

1

由於@Stendika已經回答了,用Math.min(hero.hp + 500, hero.maxHealth)將是解決辦法,然後又把最小的兩個,如果hero.hp + 500 > hero.maxHealth將採取hero.maxHealth的要求。
(我們已經取得了一個變量hero.maxHealth存儲是英雄的生命值上限,如果要計算它在你建議的方式是必須的)

然而,它也是非常重要的,你明白什麼,現在正在發生的事情,解釋:

  • 您正在使用Math.min(hero.hp += 500, hero.hp)
  • 你上面的語句返回的值賦給沒有變量,因此它顯得無能爲力。
  • hero.hp += 500仍然得到評估,因此執行,什麼是增加500hero.hp,因此hero.hp現在已經改變。
  • 因爲這個原因,它「繞過」了你的計算,似乎表現得好像你只需要加上500hero.hp
+0

感謝您的解釋。我覺得這是這樣的,但我仍然在學習很多,這有助於我理解我的錯誤。 – Kristaphonie