Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对播放器输入的Python函数调用_Python_Function_Call - Fatal编程技术网

对播放器输入的Python函数调用

对播放器输入的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

pygame在python中有一个问题。我想在用户进行特定输入后“跳转到”一个函数(在本例中,当按下向上箭头键时),然后在该函数中(start1),我再次调用main(),当再次按下“向上箭头键”时,我想进入start()

当我运行程序时,我得到以下信息:

递归错误:超过最大递归深度

有什么建议吗

代码如下:

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()

哦,这是一个很好的小帮助!