Зажимать максимальное значение
Поэтому я создаю боевую систему для своего личного удовольствия и пытаюсь справиться с ее целительной частью. Когда я использую лечебный предмет, он увеличивает максимальное здоровье, когда значение превышает текущее максимальное здоровье, до того значения, которое было у эффекта исцеления.
Я посмотрел его, и некоторые люди предложили арифметику насыщения, но я не смог найти в Google ничего, что объясняло бы этот процесс. Затем я нашел другую тему в стеке, в которой объяснялась та же проблема и был дан ответ, однако, когда я попробовал ее, она не работает. Короче.
Вот блок кода, с которым я сейчас работаю.
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. Если это имеет смысл. Но это только то, что я думаю, я действительно не знаю наверняка.
2 ответа
Я бы предложил сказать hero.hp = Math.min(hero.currentHealth+500, hero.maxHealth)
, где currentHealth
а также maxHealth
это именно то, как они звучат.
Как ответила @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
все еще оценивается и, следовательно, выполняется, что делает, это добавить500
вhero.hp
отсюдаhero.hp
теперь был изменен.- Из-за этого он "обошел" ваши расчеты и, похоже, ведет себя так, как если бы вы просто добавили
500
вhero.hp
,