为恒定比率调整¶
如果你按生命值的恒定比率治疗,只需在第一次治疗后调整控制器。假设你的传感器能检测到你治疗了多少,这只需几行代码。你可以把清单 11-2 中的弱治疗状态修改为这样:
curDef->condition = [](GameSensors* sensors) ->
bool {
static float healAt = 70;
static bool hasLearned = false;
if (!hasLearned && sensors->detectedWeakHeal())
{
healAt = 100 - sensors->getWeakHealIncrease
();
}
return sensors->getHealthPercent() > healAt;
};
这段代码没有把 70 硬编码为弱治疗阈值,而是把阈值移到名为 healAt 的静态变量中。它还添加了另一个名为 hasLearned 的静态变量,让代码知道学习何时完成。
每次调用这个 condition() 函数时,代码检查两个条件:hasLearned 是否为 false,以及传感器是否检测到弱治疗事件。这个检查通过时,代码把 hasLearned 设为 true,并更新 healAt 在完美百分比或以下治疗;也就是说,如果你的弱治疗提升 20% 的生命值,healAt 会设为 80% 而不是 70%,这样每次治疗都会让玩家恢复到 100% 生命值。