Экран вступления не загружается - PullRequest
3 голосов
/ 22 октября 2019

У меня проблемы с загрузкой заставки, определенной с помощью def game_intro (). Всякий раз, когда я запускаю его, он просто застревает на пустом черном экране. До того, как я его добавил, игра работала нормально.

Я пробовал отладчик, но не смог успешно выяснить, в чем дело. Я использую Python IDE для написания кода. Код проблемы указан ниже:

import pygame
import time

pygame.init()

scrWdt = 500 
scrHgt = 500

win = pygame.display.set_mode((scrWdt,scrHgt))
pygame.display.set_caption("Snake")

clock = pygame.time.Clock()
black = (0, 0, 0)

def text_objects(text, font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()

def game_intro():
    intro = True
    while intro:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()

    win.fill(white)
    largeText = pygame.font.Font('freesansbold.ttf',115)
    TextSurf, TextRect = text_objects("Snake", largeText)
    TextRect.center = ((scrWdt/2),(scrHgt/2))
    win.blit(TextSurf, TextRect)
    pygame.display.update()
    clock.tick(100)

game_intro() 

Я хочу увидеть белый экран с надписью «Змея».

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Ваш отступ просто отключен

def game_intro():
    intro = True
    while intro:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                intro = False
    # ---> 
        win.fill(pygame.Color('white'))
        largeText = pygame.font.Font('freesansbold.ttf',115)
        TextSurf, TextRect = text_objects("Snake", largeText)
        TextRect.center = ((scrWdt/2),(scrHgt/2))
        win.blit(TextSurf, TextRect)
        pygame.display.update()
        clock.tick(100)

game_intro() 
pygame.quit()

Просто сделайте правильный отступ для остальной части игрового цикла под циклом while, и он заработает. Кроме того, вы нигде не определяли white, но для простых цветов вы можете просто использовать pygame.Color класс

. Кроме того, я изменил условие прерывания цикла, чтобы использовать вашу переменную intro в точностивместо pygame.quit(), поскольку последнее приведет к некоторым ошибкам в видеосистеме (pygame.display.update() по-прежнему вызывается один раз после деинициализации pygame в цикле обработки событий, что приводит к ошибке).

1 голос
/ 22 октября 2019
intro = True
while intro:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

Я почти уверен, что цикл будет работать вечно, или, по крайней мере, до тех пор, пока вы не выйдете. Вызов pygame.event.get() извлекает список событий, но единственный выход из этого цикла - если вы получите QUIT.

Следовательно, он никогда не попадет в ваш код, который на самом деледелает вступление.

Вы, вероятно, хотите что-то вроде (Pythonic, но на самом деле псевдокод):

def intro():
    displayIntroScreen()

    loopCount = 10 # For a 1-second intro
    while loopCount > 0:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
        sleep(100ms)
        loopCount -= 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...