Python、点击游戏、“被动收入”编码、线程和 time.sleep 函数的问题

问题描述 投票:0回答:1

我正在尝试编写一个点击游戏,并且已经有了一个屏幕、一个增加金钱的按钮和一个升级来增加点击所赚的钱。整个事情都是用 Tkinter 制作的。 我现在想要编写的下一个函数是用于升级的被动收入函数,它每 y 秒提供 x 钱

def passive_income(moneygive,seconds):
    global money
    if True:
        money += moneygive
        time.sleep(seconds)

这个问题是它在 time.sleep 函数时停止/延迟游戏的主循环,这就是我尝试线程化它的原因

thread = threading.Thread(passive_income(10,10))
thread.start()
#before mainloop 

但是这不会改变任何东西,并且线程也不会重复。当我将 if 语句更改为 while 循环时,主循环不会启动。 我该如何编码才能不破坏主循环? 预先感谢

python multithreading time while-loop
1个回答
0
投票

您正在调用

Thread
构造函数,其结果为
passive_income(10,10)
(这使主线程等待 10 秒),而从问题来看,您似乎希望线程执行该操作。您必须像这样传入 lambda(或另一个可执行构造):

threading.Thread(target= (lambda: passive_income(10,10)))

这会准备一个线程,当您启动它时,该线程将执行

passive_income(10,10)
,并在
thread.start()

之后立即将控制权返回给主线程

您还可以检查:

  1. https://docs.python.org/3/library/threading.html
  2. https://docs.quantifiedcode.com/python-anti-patterns/ Correctness/assigning_a_lambda_to_a_variable.html
© www.soinside.com 2019 - 2024. All rights reserved.