C# Monogame金矿金币上限设置失效问题求助
修复你的MonoGame金矿系统上限问题
先帮你梳理下代码里的核心问题——你的上限逻辑完全写反了,导致sMaxGold永远没法达到10的上限,反而会来回波动:
问题拆解
- 错误的上限处理逻辑:在定时增加金币储备时,你先执行
sMaxGold +=2,紧接着又判断如果sMaxGold >=10就减2,这等于白加了!比如sMaxGold是8,加2到10后立刻减2回到8;如果是9,加2到11后减2回到9,永远到不了上限,更别说超过了。 - 多余的外层判断:
if(MaxGoldLimit <=10)这个条件完全没必要,你已经在对象工厂里把MAXGoldLimit设为10了,这个条件只会无意义地限制逻辑执行。 - 硬编码数值:代码里多次直接写死
10,应该统一用MaxGoldLimit变量,方便后续调整上限数值。 - 命名不一致:代码里同时出现
MaxGoldLimit和MAXGoldLimit,大小写混乱容易引发隐性bug。
修正后的完整代码
首先确保sMaxGold的初始值设为MaxGoldLimit(也就是10,对应你需求里的初始10枚金币储备),然后修改CollectGold方法:
// 先统一命名,确保全局变量是MaxGoldLimit(和对象工厂里的赋值一致) public static int MaxGoldLimit = 10; public static int sMaxGold = 10; // 初始设置为上限值 public static void CollectGold(ObjectFactory.ObjectType type) { // 处理玩家收集金币:从储备转移到玩家钱包 if (sMaxGold > 0) { // 每次收集2枚,若需要收集全部可改为:Hud.mGold += sMaxGold; sMaxGold = 0; int collectAmount = Math.Min(2, sMaxGold); Hud.mGold += collectAmount; sMaxGold -= collectAmount; } // 处理定时新增金币储备的逻辑 if (Hud.mCurrentTime >= Hud.mCountDuration) { Counter++; Hud.mCurrentTime -= Hud.mCountDuration; // 新增后直接限制不超过上限,这是核心修复点 sMaxGold += 2; if (sMaxGold > MaxGoldLimit) { sMaxGold = MaxGoldLimit; } // 也可以用更简洁的写法:sMaxGold = Math.Min(sMaxGold + 2, MaxGoldLimit); } }
同时修正对象工厂里的命名问题:
case ObjectFactory.ObjectType.GoldVein: mActiveButtons.Add(ObjectFactory.ObjectType.GoldVein.ToString()); mButtons[ObjectFactory.ObjectType.GoldVein.ToString()].SetLocation(one); mButtons[ObjectFactory.ObjectType.GoldVein.ToString()].mAction = GoldVein.CollectGold; mButtons[ObjectFactory.ObjectType.GoldVein.ToString()].UpdateText("Collect"); MaxGoldLimit = 10; // 统一成小写开头的MaxGoldLimit break;
验证逻辑
修改后系统会完全符合你的需求:
- 初始
sMaxGold=10,达到上限,后续定时触发时新增后会被直接限制回10,不会超限; - 玩家收集2枚后
sMaxGold=8,下一次定时触发时加2回到10,停止增长; - 玩家收集4枚后
sMaxGold=6,两次定时触发后回到10,之后不再增长。
内容的提问来源于stack exchange,提问作者Arenosa
相关产品推荐
相关产品推荐

