英文:
Tkinter: calling a function only once while updating every 1 millisecond on a multiple of a certain number
问题
我正在制作一个点击游戏,其中有一项升级,如果发电机 1(最差的发电机)的数量是 5 的倍数,它会每秒增加玩家获得的总数 0.5。例如,如果我有 5、10、15... 台发电机 1 并购买了升级,我将每秒额外获得 0.5/1.0/1.5...。
假设有 5 台发电机 1(每台发电机每秒增加 0.1),购买升级后,它将增加到每秒 2.0。再购买 5 台发电机 1(总共 10 台发电机 1),它应该是每秒 3.0 而不是 3.5。
这是升级的当前代码,有一个注释指出了问题,但我也会在这里提出。现在,如果 generator_1_amount 是 5 的倍数,它将每 1 毫秒继续调用 upgrade_2_adder 函数。我知道有些东西丢失了,以使它在 generator_1_amount 是 5 的倍数时只调用一次,我想不出任何方法来确保在倍数为 5 时不会多次调用该函数,比如停留在 5 上。
英文:
I am making a clicker game and there is this upgrade where if generator 1 (worst generator) is on a multiple of 5, it increases the total amount the player gets per second by 0.5. For example, if I have 5,10,15... of generator 1 and I bought the upgrade, I will get an extra 0.5/1.0/1.5... per second.
Like assume it is 1.5/sec with 5 generator 1 (0.1/sec per generator), after buying the upgrade, it turns to 2.0/sec. After buying 5 more generator 1 (10 generator 1), it should be 3.0/sec instead of 3.5/sec.
def updater2():
upgrade_2_checker()
root.after(1, updater2) # updates/checks every 1 millisecond
def upgrade_2_checker(): # for every multiple of 5, call the upgrade_2_adder function ONCE even if it is stuck on the multiple of 5
global generator_1_amount
while generator_1_amount % 5 == 0: # right now it will keep calling the function every millisecond if generator_1_amount is on a multiple of 5
upgrade_2_adder()
else:
pass
def upgrade_2_adder(): # for every multiple of 5, this function gets called ONCE even if it is stuck on the multiple of 5
global total_auto
global generator_1_amount
total_auto = total_auto + (int(generator_1_amount / 5) * 0.5)
This is the code right now for the upgrade, there is a comment which indicates the problem but I'm gonna say it here as well. Right now it will keep on calling the upgrade_2_adder function every 1 millisecond if the generator_1_amount is on a multiple of 5. I know something is missing to make it only call once if generator_1_amount is on a multiple of 5 and I couldn't think of anyway to not call the function more than 1 time if the amount is stuck on a multiple of 5, like stuck on 5.
答案1
得分: 2
为了确保在generator_1_amount
是5的倍数时upgrade_2_adder
函数仅被调用一次,您可以引入一个变量来跟踪升级是否已经应用。
def updater2():
upgrade_2_checker()
root.after(1, updater2) # 每1毫秒更新/检查一次
def upgrade_2_checker():
global generator_1_amount
if generator_1_amount % 5 == 0: # 检查generator_1_amount是否是5的倍数
upgrade_2_adder()
def upgrade_2_adder():
global total_auto
global generator_1_amount
global upgrade_2_applied
if not upgrade_2_applied: # 检查升级是否已经应用
total_auto += (generator_1_amount // 5) * 0.5
upgrade_2_applied = True # 设置升级标志以指示已应用
英文:
To ensure that the upgrade_2_adder
function is called only once when generator_1_amount
is on a multiple of 5, you can introduce a variable to keep track of whether the upgrade has already been applied.
def updater2():
upgrade_2_checker()
root.after(1, updater2) # updates/checks every 1 millisecond
def upgrade_2_checker():
global generator_1_amount
if generator_1_amount % 5 == 0: # Check if generator_1_amount is a multiple of 5
upgrade_2_adder()
def upgrade_2_adder():
global total_auto
global generator_1_amount
global upgrade_2_applied
if not upgrade_2_applied: # Check if the upgrade has already been applied
total_auto += (generator_1_amount // 5) * 0.5
upgrade_2_applied = True # Set the upgrade flag to indicate it has been applied
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论