Tkinter点击器游戏升级问题:倍数判定函数需仅执行一次
解决点击器游戏升级收益重复触发的问题
问题场景
开发点击器游戏时设置了如下升级规则:当generator 1数量为5的倍数时,每秒自动收益增加对应倍数的0.5——比如5个加0.5、10个加1.0、15个加1.5。但当前代码存在bug:只要generator 1数量停留在5的倍数(比如5),upgrade_2_adder会被每1毫秒重复调用,导致收益异常增长。
问题根源
upgrade_2_checker使用while循环,只要满足倍数条件就持续调用upgrade_2_adder,再加上updater2每1毫秒触发一次检查,形成无限重复触发。upgrade_2_adder的累加逻辑没有记录已处理过的倍数等级,即使数量从5涨到10,也会重复计算之前的倍数收益,导致总收益错误。
解决方案
核心思路是记录已处理的最高5倍数等级,仅当generator 1数量跨越新的5倍数门槛时才更新收益。同时优化检查频率(每秒一次即可,无需1毫秒),减少性能消耗。
方案1:增量更新(跟踪已处理等级)
新增全局变量记录已处理的倍数等级,仅在等级提升时执行增量收益更新:
# 全局变量初始化(需在函数外定义) generator_1_amount = 0 total_auto = 0 last_processed_multi = 0 # 记录已处理的最高5倍数等级(5个对应1,10个对应2) def updater2(): upgrade_2_checker() root.after(1000, updater2) # 每秒检查一次,符合收益计算频率 def upgrade_2_checker(): global generator_1_amount, last_processed_multi current_multi = generator_1_amount // 5 # 仅当当前等级高于已处理等级时,执行更新 if current_multi > last_processed_multi: # 计算新增的等级数,更新收益 upgrade_2_adder(current_multi - last_processed_multi) last_processed_multi = current_multi def upgrade_2_adder(add_multi): global total_auto total_auto += add_multi * 0.5
方案2:直接重算总收益(更简单不易出错)
放弃增量累加,每次检查时直接重新计算正确的总自动收益(基础收益+额外收益),彻底避免重复触发问题:
# 全局变量初始化 generator_1_amount = 0 total_auto = 0 def updater2(): calculate_total_auto() root.after(1000, updater2) def calculate_total_auto(): global generator_1_amount, total_auto # 基础收益:根据实际每个generator1的收益调整 base_income = generator_1_amount * 0.1 # 额外收益:每5个加0.5/秒 extra_income = (generator_1_amount // 5) * 0.5 # 重新计算总自动收益 total_auto = base_income + extra_income
验证效果
- 当generator1数量达到5时,方案1会触发一次更新,额外加0.5;方案2直接算出总收益=5*0.1+0.5=1.0(若你的基础收益是1.5,只需调整
base_income的计算逻辑)。 - 数量涨到10时,方案1会新增1个等级,加0.5(总额外收益1.0);方案2直接算出总收益=10*0.1+1.0=2.0,符合需求。
内容的提问来源于stack exchange,提问作者Blueyu
相关产品推荐
相关产品推荐

