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

2024-10-01 09:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上每当我从主菜单中选择我的游戏,它就会玩,但如果我回到主菜单,再选择一次,它只是在屏幕上显示游戏,不会再玩了。你知道吗

在下面的代码中,它是关于第一次运行后不运行的主菜单的zy\u 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()

Tags: ineventtrueforiftypedisplaywidth
1条回答
网友
1楼 · 发布于 2024-10-01 09:21:21

我似乎没有代码做多个窗口,这取决于pygame.退出事件,然后调用pygame.display.set\模式以前也是。你知道吗

可能“QUIT”事件在函数调用中持续存在? 我建议您在每个pygame.display.set_mode调用前面加上一个pygame.event.get()-以清除挂起的事件,并确保队列中没有来自上一个屏幕的事件。你知道吗

回顾您的代码—调用game_over_noscore()如何使程序退出主循环?或者它没有,并且只在播放器关闭窗口之前一直显示东西?你知道吗

相关问题 更多 >