【问题标题】:pygame start menu not rendering when the program starts程序启动时pygame开始菜单不呈现
【发布时间】:2018-09-16 17:33:33
【问题描述】:

我目前正在学习 pygame 并编写一个简单的 2d 游戏。我已经到了需要介绍开始菜单的地步。问题是虽然 startSCreen 函数在程序启动时不会呈现“按空格键启动”标签,但它会在角色第一次死亡后呈现(如下所示,该函数在无限循环中运行, startScreen 在玩家输掉后再次被调用)。游戏的运作方式如下图所示:

pygame.init()

win = pygame.display.set_mode((600, 900))
pygame.display.set_caption('The Game')
start_font = pygame.font.SysFont('Arial', 25, bold = True) 
def startScreen():
    start = True
    while start:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            mainGame()
            start = False
    win.fill((0,0,0))

    start_text = start_font.render('PRESS SPACE TO START', 1, (255, 255,    255))
    win.blit(start_text, (50, 300))
    pygame.display.update()

def mainGame():
    main game code

while True:
    startScreen()

我没有粘贴 mainGame 函数代码,因为我怀疑它会影响问题。希望有人能发现错误:)。

【问题讨论】:

  • while 循环中缺少缩进仅仅是复制/粘贴错误吗?

标签: python menu pygame screen


【解决方案1】:

您的代码的问题在于,在您运行mainGame()start=True 之前,只有当您运行游戏时,start 才会变为 False。但是,“按空格开始文本”放置在循环之后,因此它只会在循环退出后运行(这意味着您至少玩过一次游戏。

要解决这个问题,只需将显示代码放在循环之前,如下所示:

def startScreen():
    # Display Start Text
    win.fill((0,0,0))

    start_text = start_font.render('PRESS SPACE TO START', 1, (255, 255,    255))
    win.blit(start_text, (50, 300))
    pygame.display.update()

    # Loop until exited or game is played
    start = True
    while start:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()

            if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                mainGame()
                start = False

【讨论】:

  • 它按照现在应该的方式工作。谢谢你启发我:)
猜你喜欢
  • 2012-11-24
  • 2021-09-03
  • 1970-01-01
  • 2022-10-21
  • 2021-08-22
  • 2015-09-21
  • 2014-03-09
  • 2011-01-12
  • 1970-01-01
相关资源
最近更新 更多