如何在soulAmount达到10时触发执行目标if语句?
解决
soulAmount达到指定值时无法触发判断的问题 你的核心问题是:判断soulAmount == 10的代码仅在页面初始化时执行了一次,而soulAmount是通过点击按钮、自动增长动态变化的,后续数值更新时根本没再触发这个判断。
解决思路很直接:把判断逻辑抽成可复用的函数,然后在所有会修改soulAmount的地方调用这个函数,确保每次数值变化后都检查条件。
修改步骤
- 新建一个检查成就的函数,整合所有数值判断逻辑,方便后续扩展:
function checkSoulAchievements() { // 检查是否达到10灵魂 if (soulAmount >= 10) { console.log(soulAmount); // 可加标记变量防止重复触发,比如:if (!achievement10Unlocked) { ... } } // 检查100灵魂的成就 if (soulAmount >= 100) { achievement1(); } }
- 在所有修改
soulAmount的函数/回调里调用这个检查函数:- 点击获取灵魂的
getSoul()函数:function getSoul() { soulAmount += soulAddition; document.querySelector(".souls_amount").innerHTML = soulAmount; checkSoulAchievements(); // 新增此行 return soulAmount; } - 升级功能的
upgrade1()函数(放在升级成功的分支里):function upgrade1() { if (soulAmount >= upgradecost1) { sps += 1; soulAmount -= upgradecost1; document.querySelector(".souls_amount").innerHTML = soulAmount; document.querySelector(".sps").innerHTML = sps; checkSoulAchievements(); // 新增此行 return soulAmount; } else { alert("You do not have enough souls!") } } - 自动增长的
setInterval回调:window.setInterval(function() { soulAmount += sps; document.querySelector(".souls_amount").innerHTML = soulAmount; checkSoulAchievements(); // 新增此行 }, 1000);
- 点击获取灵魂的
- 删除页面底部那个仅执行一次的
if(soulAmount == 10)代码,逻辑已整合到检查函数中。
额外优化建议
- 将判断条件从
==改为>=,避免数值跳过目标值的情况(比如自动增长一次加3,从9直接到12,会错过==10的判断) - 如果要确保成就只触发一次,可添加标记变量:
let achievement10Unlocked = false; // 在检查函数中 if (soulAmount >= 10 && !achievement10Unlocked) { console.log(soulAmount); achievement10Unlocked = true; }
修改后的完整代码
let soulAmount = 0; let soulAddition = 1; let grabSps = document.querySelector(".sps").innerHTML; let sps = parseInt(grabSps); let upgradecost1 = 10; // 新增成就标记,防止重复触发 let achievement10Unlocked = false; let achievement100Unlocked = false; function getSoul() { soulAmount += soulAddition; document.querySelector(".souls_amount").innerHTML = soulAmount; checkSoulAchievements(); return soulAmount; } function upgrade1() { if (soulAmount >= upgradecost1) { sps += 1; soulAmount -= upgradecost1; document.querySelector(".souls_amount").innerHTML = soulAmount; document.querySelector(".sps").innerHTML = sps; checkSoulAchievements(); return soulAmount; } else { alert("You do not have enough souls!") } } window.setInterval(function() { soulAmount += sps; document.querySelector(".souls_amount").innerHTML = soulAmount; checkSoulAchievements(); }, 1000); function checkSoulAchievements() { // 检查10灵魂的触发逻辑 if (soulAmount >= 10 && !achievement10Unlocked) { console.log(soulAmount); achievement10Unlocked = true; } // 检查100灵魂的成就 if (soulAmount >= 100 && !achievement100Unlocked) { achievement1(); achievement100Unlocked = true; } } function achievement1() { alert("Achievement Unlocked. You've collected 100 Souls!") document.getElementById("collect100").style.display = "block" }
内容的提问来源于stack exchange,提问作者Burakkuboido
相关产品推荐
相关产品推荐

