跳转至

为恒定比率调整

如果你按生命值的恒定比率治疗,只需在第一次治疗后调整控制器。假设你的传感器能检测到你治疗了多少,这只需几行代码。你可以把清单 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% 生命值。