夹紧最大值

时间:2014-01-23 19:49:53

标签: java math clamp

所以我正在为自己的个人乐趣创造一个战斗系统,并试图解决它的愈合部分。当我使用治疗项目时,当值超过当前最大生命值时,它会将最大生命值提高到治疗效果的值。

我查了一下,有些人建议使用饱和算术,但我无法在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;
}

所以我试图将max设置为可变数量而不是固定数量。因此,当英雄的马力增加时,这将自动缩放。我认为这有问题,因为它首先设置了hp,所以它的最大值已经达到500.如果这是有道理的。但这正是我所想的,我真的不确定。

2 个答案:

答案 0 :(得分:3)

我建议说hero.hp = Math.min(hero.currentHealth+500, hero.maxHealth),其中currentHealthmaxHealth正是他们听起来的样子。

答案 1 :(得分: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仍然会被评估并因此被执行,将500添加到hero.hp,因此hero.hp现已更改。
  • 因此,它已“绕过”您的计算,并且表现得就像您只是将500添加到hero.hp一样。