提问人:Tel e 提问时间:11/9/2023 最后编辑:Tel e 更新时间:11/9/2023 访问量:53
如何让一段代码在整个函数中继续运行,同时允许其他代码运行?
How to have a piece of code continue to run throughout a function, while also allowing the other code to run?
问:
我的目标是,当在整个功能中随时按下按钮 A 或 B 时,它会切换到一个新进程(屏幕)。 我目前正在尝试使用线程,但它不起作用,老实说,我不确定如何让我的计划发挥作用。
def buttonB():
if button_b.read():
clear()
play()
def buttonA():
clear()
howToPlay()
#Creates Main Title Screens
def main():
t1= _thread.start_new_thread(buttonB, ())
# Creates Game Ttile Screen
clear()
display.set_pen(GREEN)
display.text("Blink of an Eye", 30, 25, 240, 5)
display.update()
time.sleep(2)
clear()
screen = 1
# Switches between two "screens"
while True:
#How To play Title Screen
if screen == 1:
display.set_pen(YELLOW)
display.text('''How To Play: Press 'A' ''', 15, 35, 240, 4)
display.update()
time.sleep(1)
clear()
screen = 2
# Play Title Screen
elif screen == 2:
display.set_pen(MAGENTA)
display.text('''Play: Press 'B' ''', 15, 35, 240, 4)
display.update()
time.sleep(1)
clear()
screen = 1
请帮助我如何编写一段代码,允许代码不断检查函数以查看按钮 a 或 b 是否被按下,当它得到嘿,按下此按钮时,代码不再检查并移动到另一个函数。 我还想澄清一下,此代码具有其他函数,这些函数出于不同的原因使用相同的按钮,因此我只希望它在一个函数中工作,这样它就不会干扰其他代码。(我对代码的其余部分有同样的问题,但我认为我不会添加它,因为它是同一个问题)。
答:
2赞
iamdeedz
11/9/2023
#1
为此,您需要三个函数。一个用于检查是否按下了按钮 a。
def is_button_a_pressed():
return True
另一个用于检查按钮 b 是否被按下。
def is_button_b_pressed():
return False
我只是为这些返回了 True 或 False,因为我不知道您如何检查。效果相同,只是我手动更改了它。
最后,一个带有 while 循环的函数,它不断运行这两个函数,直到其中一个成功(返回 True)。
def check_buttons():
global has_button_been_pressed
while not has_button_been_pressed:
if is_button_a_pressed():
has_button_been_pressed = True
how_to_play()
if is_button_b_pressed():
has_button_been_pressed = True
play()
要在代码中实现这些函数,只需将函数传递到代码中即可完成!check_buttons
_thread.start_new_thread
“完整”代码可能看起来像这样(显然它实际上不是完整的代码,但它是您需要的部分)。
has_button_been_pressed = False
def is_button_a_pressed():
return True
def is_button_b_pressed():
return False
def check_buttons():
global has_button_been_pressed
while not has_button_been_pressed:
if is_button_a_pressed():
has_button_been_pressed = True
how_to_play()
if is_button_b_pressed():
has_button_been_pressed = True
play()
def main():
_thread.start_new_thread(check_buttons, ())
# Creates Game Title Screen
clear()
display.set_pen(GREEN)
display.text("Blink of an Eye", 30, 25, 240, 5)
display.update()
time.sleep(2)
clear()
screen = 1
# Switches between two "screens"
while not has_button_been_pressed:
if screen == 1:
display.set_pen(YELLOW)
display.text('''How To Play: Press 'A' ''', 15, 35, 240, 4)
display.update()
time.sleep(1)
clear()
screen = 2
# Play Title Screen
elif screen == 2:
display.set_pen(MAGENTA)
display.text('''Play: Press 'B' ''', 15, 35, 240, 4)
display.update()
time.sleep(1)
clear()
screen = 1
希望这有帮助!
评论
0赞
Tel e
11/9/2023
它有效!但它仍然会回到主要功能并播放屏幕。就像按下按钮时一样,它会闪烁正确的功能,但随后会返回主功能。(我添加了 def is_button_a_pressed(): if button_a.read(): return True def is_button_b_pressed(): if button_b.read(): return False)
0赞
iamdeedz
11/9/2023
我更新了代码。现在应该可以工作了!
评论