меню запуска Pygame не отображается при запуске программы - PullRequest
0 голосов
/ 16 сентября 2018

В настоящее время я изучаю 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, так как сомневаюсь, что это влияет на проблему. Надеюсь, кто-то может заметить ошибку:).

1 Ответ

0 голосов
/ 16 сентября 2018

Проблема с вашим кодом заключается в том, что до тех пор, пока вы не запустите mainGame(), start=True и только когда вы запустите игру, start станет ложным.Тем не менее, «нажмите пробел для начала текста» помещается после цикла, поэтому он будет работать только после выхода из цикла (что означает, что вы играли в игру хотя бы один раз.

Чтобы решить эту проблему, простопоместите код дисплея перед циклом, как показано ниже:

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
...