Зажимать максимальное значение

Поэтому я создаю боевую систему для своего личного удовольствия и пытаюсь справиться с ее целительной частью. Когда я использую лечебный предмет, он увеличивает максимальное здоровье, когда значение превышает текущее максимальное здоровье, до того значения, которое было у эффекта исцеления.

Я посмотрел его, и некоторые люди предложили арифметику насыщения, но я не смог найти в 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,
Другие вопросы по тегам