【问题标题】:Clamping a max value钳制最大值
【发布时间】:2014-01-24 04:07:35
【问题描述】:

所以我正在创建一个战斗系统供我个人享受,并尝试解决其中的治疗部分。当我使用治疗物品时,它会增加最大生命值,当值超过当前最大生命值时,无论治疗效果的值是多少。

我查了一下,有人建议使用饱和算法,但我在 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 增加,这将自动缩放。我认为这是有问题的,因为它首先设置了马力,所以它的最大值已经是 500。如果这是有道理的。但这只是我的想法,我真的不确定。

【问题讨论】:

  • 治疗物品应该做什么?你的游戏有“当前生命值”和“最大生命值”的概念吗?
  • 使用clipLevel * tanh(inputValue / clipLevel)。这是一种相当常见的音频剪辑算法。
  • 对于@dnault,现在我使用了 Stendika 的建议。不过谢谢你的加入!

标签: java math clamp


【解决方案1】:

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

【讨论】:

  • 轰炸机。那成功了。谢谢。这也应该保持我喜欢的可扩展性。
【解决方案2】:

正如@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 一样。

【讨论】:

  • 感谢您的解释。我想是这样的,但我仍然在学习很多东西,这有助于我理解我的错误。
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多