对播放器输入的Python函数调用
pygame在python中有一个问题。我想在用户进行特定输入后“跳转到”一个函数(在本例中,当按下向上箭头键时),然后在该函数中(start1),我再次调用main(),当再次按下“向上箭头键”时,我想进入start() 当我运行程序时,我得到以下信息: 递归错误:超过最大递归深度 有什么建议吗 代码如下:对播放器输入的Python函数调用,python,function,call,Python,Function,Call,pygame在python中有一个问题。我想在用户进行特定输入后“跳转到”一个函数(在本例中,当按下向上箭头键时),然后在该函数中(start1),我再次调用main(),当再次按下“向上箭头键”时,我想进入start() 当我运行程序时,我得到以下信息: 递归错误:超过最大递归深度 有什么建议吗 代码如下: def main(text, func): exit = False while not exit: for event in pygame.event.get
def main(text, func):
exit = False
while not exit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
func
if event.key == pygame.K_DOWN:
pygame.quit()
quit()
screen.fill(black)
text = str(text)
font = pygame.font.SysFont('georgia', 16)
message = font.render(text, True, white)
screen.blit(message, (screen_width / 2, screen_height / 2))
pygame.display.flip()
clock.tick(30)
def start():
main("Hello, press key-up to get to start 1!", start1())
def start1():
os.system('cls')
main("Good, Back to start on Key-up", start())
start()
您没有将
start1
和start
函数传递给main
,而是在调用main之前调用它们
def start():
main("Hello, press key-up to get to start 1!", start1())
def start1():
os.system('cls')
main("Good, Back to start on Key-up", start())
start
调用start1
,它在评估每个例程中main
的参数时调用start
main
没有被调用的机会:无限乒乓递归首先发生
改为:
def start():
main("Hello, press key-up to get to start 1!", start1)
def start1():
os.system('cls')
main("Good, Back to start on Key-up", start)
在main
中,将func
替换为func()
中的以下代码,以便在此处调用函数:
if event.key == pygame.K_UP:
func()
不要用跳跃来思考,试着用状态来思考。状态机是一种非常典型的游戏开发工具 您有(至少)3种状态:“向上未按下”、“向上按下一次”、“连续向上按下两次”
将此状态存储在变量中,并在按键时更新。然后,当按下Up键时,您可以很容易地知道是否要调用
start()
。哦,这是一个很好的小帮助!