繁体   English   中英

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

[英]After playing my game once, if i select it again from the main menu it instantly cuts to the game over screen (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()

根据pygame.QUIT事件,我似乎没有代码执行多个窗口,然后再调用pygame.display.set_mode。

也许“ QUIT”事件在函数调用之间持续存在? 我建议您在其中为每个pygame.display.set_mode调用加上pygame.event.get()前缀-这将刷新未决事件,并确保队列中没有来自先前屏幕的事件。

回顾代码-调用game_over_noscore()如何使您的程序退出主循环? 还是没有,只是一直显示东西,直到玩家关闭窗口?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM