Python 播放器输入函数调用

Python function call on player input

我在 python 和 pygame 中遇到问题。我想在用户进行特定输入后 "jump to" 一个函数(在这种情况下,当按下向上箭头键时),然后在该函数(start1)中我再次回调到 main() 并当再次按下 "up arrow key" 时,我想进入 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()

您没有将 start1start 函数传递给 main,而是 调用 它们 before 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的参数时调用startmain 没有机会被调用:首先发生无限乒乓递归。

更改为:

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 not pressed"、"up pressed once"、"up pressed twice in a row"。

将此状态存储在一个变量中,在按键时更新它。然后当按下 Up 时,您可以很容易地知道是否要调用 start()