储备弹药公式

Reserve Ammo Formula

这是我的问题。我正在开发带有 Counter-Strike/TF2esque 弹药系统的 FPS。我的问题是,当一个人从 1/1 弹药状态(如在一个腔室,一个储备)重新加载时,我当前的公式会给出一些奇怪的、有问题的结果。我的系统会凭空产生额外的一轮。这是我当前的公式:

myReserve = myReserve - (magSize - boolet);
        boolet = magSize;
        if (myReserve < 0){
            myReserve = 0;
}

有人对此有编程解决方案吗(或者更好,纯数学)? 如果相关,代码是 UnityScript。 谢谢!

您的代码明确地使用该 if 语句创建弹药,因为您正在将负的 myReserve 值变为零。让我重构你的代码,这正是你现在的代码所做的:

var transferedAmmo = magSize - boolet;
myReserve -= transferedAmmo;
boolet += transferedAmmo;
if (myReserve < 0)
    myReserve = 0;

如果你需要询问 myReserve < 0,你应该已经知道你做错了什么。 transferedAmmo 不应大于 myReserve:

var transferedAmmo = Mathf.Min(magSize - boolet, myReserve);
myReserve -= transferedAmmo;
boolet += transferedAmmo;