JavaScript如何仅点击时触发setInterval?宝可梦放置游戏定时器失效问题
宝可梦放置类RPG自动点击定时器异常修复方案
问题根因
你代码里的定时器没有按预期生效,核心是三个逻辑问题:
- 定时器创建逻辑放在了所有判断分支外面,无论购买是否成功都会新建定时器,未购买成功时
autoclick值为0,调用findPokeballs(0)自然不会产生收益,会让你误以为定时器没启动 - 多次点击购买按钮会生成大量并行定时器,后续会导致自动点击速率异常加快
- setInterval的回调函数声明了多余的
buyStarter入参,存在作用域变量污染的风险
修复后代码
var starterCost = 250; var starter = 0; var autoclick = 0; var count = 0; // 若你全局已定义count变量可删除该行 var autoClickTimer = null; // 存储定时器ID,方便后续清理 function buyStarter() { if (count >= starterCost && starter == 0) { autoclick = 1; starter = 1; count = count - starterCost; document.getElementById("starterCost").innerHTML = starterCost; document.getElementById("starter").innerHTML = starter; document.getElementById("autoclick").innerHTML = autoclick; // 仅首次购买成功时启动定时器 autoClickTimer = setInterval(function() { findPokeballs(autoclick); }, 1000); } else if (starter == 1) { alert("you have already purchased a starter pokemon"); } else { alert("You cannot purchase a starter pokemon"); } }
调整说明
- 仅在用户满足购买条件、首次购买初始宝可梦成功时才创建定时器,避免无效定时器生成
- 新增定时器ID存储变量,后续如果需要做暂停、重置功能可以直接调用
clearInterval(autoClickTimer)清理定时器 - 移除了回调函数多余的入参,避免变量冲突
- 补充了count变量声明(如果你的代码里已经全局定义过count可以删掉这行)
内容的提问来源于stack exchange,提问作者Dan Boyden
相关产品推荐
相关产品推荐

