在玩了一次游戏之后,如果我再次从主菜单中选择它,它会立即切换到屏幕上的游戏(pygame)

时间:2018-01-11 23:11:07

标签: python function pygame

基本上每当我从主菜单中选择我的游戏时它都会播放,但如果我回到主菜单并再次选择它,它只会在屏幕上显示游戏,而不会再次播放。

在下面的代码中,它关于main_menu的zy_mainloop()部分,它在第一次运行后没有运行。我真的很感激这方面的帮助

def main_menu():
    WIDTH = 1280
    HEIGHT = 800
    screen = pygame.display.set_mode((WIDTH, HEIGHT))

    main_menu = True
    while main_menu:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_1:
                    WIDTH = 480
                    HEIGHT = 600
                    pygame.display.set_mode((WIDTH, HEIGHT))
                    g.new()
                    g.show_go_screen()
                    main_menu = False
                if event.key == pygame.K_2:
                    zy_mainloop()
                    main_menu = False


        screen.blit(mainmenu_img, mainmenu_rect)
        pygame.display.flip()


def start_screen():
    WIDTH = 1280
    HEIGHT = 800
    screen = pygame.display.set_mode((WIDTH, HEIGHT))

    start_screen = True
    while start_screen:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_x:
                    main_menu()
                    start_screen = False

        screen.blit(startscreen_img, startscreen_rect)
        pygame.display.flip()

def game_over_noscore():
    WIDTH = 1280
    HEIGHT = 800
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    screen.blit(gameovernoscore_img, noscore_rect)
    pygame.display.flip()

    gameover_screen = True
    while gameover_screen:
        clock.tick(FPS)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_x:
                    main_menu()
                    gameover_screen = False

def zy_mainloop():
    WIDTH = 480
    HEIGHT = 600
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    zy_running = True

    while zy_running:
        clock.tick(FPS)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                zy_running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE and zyplayer.shotsfired <= 1:
                    zyplayer.shoot()

        # Update
        zy_all_sprites.update()

        # Hit Check
        hits = pygame.sprite.groupcollide(zy_bullets, zy_enemybullets, True, True, pygame.sprite.collide_circle)
        for hit in hits:
            m = zyEnemyBullet()
            zy_all_sprites.add(m)
            zy_enemybullets.add(m)
            zyplayer.shotsfired -= 1

        hits = pygame.sprite.spritecollide(zyplayer, zy_enemybullets, True, pygame.sprite.collide_circle)
        for hit in hits:
            zyplayer.lives -= 1
            m = zyEnemyBullet()
            zy_all_sprites.add(m)
            zy_enemybullets.add(m)
        hits = pygame.sprite.groupcollide(zy_bullets, zy_enemies, True, False, pygame.sprite.collide_circle)
        for hit in hits:
            zy_enemy.enemylives -= 1
            zyplayer.shotsfired -= 1
        hits = pygame.sprite.spritecollide(zyplayer, zy_enemies, False, pygame.sprite.collide_circle)
        for hit in hits:
            zyplayer.lives -= 3

        # Win / Lose condition
        if zyplayer.lives == 0:
            game_over_noscore()
        if zy_enemy.enemylives == 0:
            game_over_noscore()

        # Draw
        zy_drawgame()

1 个答案:

答案 0 :(得分:0)

我似乎没有代码执行多个窗口,具体取决于pygame.QUIT事件,然后再次调用pygame.display.set_mode。

也许“QUIT”事件在函数调用中持续存在? 我建议你为pygame.display.set_mode中的每个pygame.event.get()调用添加前缀,以便清除待处理的事件,并确保前一个屏幕上没有事件在队列中。

回顾你的代码 - 调用game_over_noscore()如何让你的程序退出mainloop?或者它不会,并且只有在播放器关闭窗口之前才会显示内容?