не отображается экран pygame

#python #pygame #surface

#python #pygame #Поверхность

Вопрос:

У меня есть следующий код на Python 3 (и pygame), но белая поверхность не отображается, и я не понимаю, почему. Имеет ли это какое-то отношение к тому, где он был размещен? Я пытался удалить отступы, но это тоже не сработало? Код выглядит следующим образом:

 import pygame
from pygame.locals import*
pygame.init()

screen=pygame.display.set_mode((800,600))


# Variable to keep our main loop running
running = True

# Our main loop!
while running:
    # for loop through the event queue
    for event in pygame.event.get():
        # Check for KEYDOWN event; KEYDOWN is a constant defined in pygame.locals, which we imported earlier
        if event.type == KEYDOWN:
            # If the Esc key has been pressed set running to false to exit the main loop
            if event.key == K_ESCAPE:
                running = False
            # Check for QUIT event; if QUIT, set running to false
            elif event.type == QUIT:
                running = False

            # Create the surface and pass in a tuple with its length and width
            surf = pygame.Surface((50, 50))
            # Give the surface a color to differentiate it from the background
            surf.fill((255, 255, 255))
            rect = surf.get_rect()

            screen.blit(surf, (400, 300))
            pygame.display.flip()
  

Комментарии:

1. Вы получаете сообщение об ошибке?

2. «Я пытался удалить отступы, но это тоже не сработало?» — Да, не делай этого. Случайное добавление и удаление отступов в вашем коде вам не поможет.

3. лист — ваш комментарий тоже не очень полезен. Я имел в виду удаление отступов в коде, относящемся к чертежу поверхности. Тристан — нет, ошибки нет. Просто пустой черный экран

4. @pythoncarrot Но вся причина, по которой ваше окно не отображается, заключается в вашем отступе.

5. неверно. Программа работает отлично. (Возможно, я неправильно вставил его в stackoverflow, поскольку это испортило мой отступ). Просто, когда я добавляю бит поверхности, он не рисуется. Обратите внимание на редактирование выше — при таком использовании отображается черный экран, но не желаемая поверхность.

Ответ №1:

Итак, похоже, что ваш отступ неверен.

Вам необходимо определить поверхность и обновить экран и т. Д. Вне цикла событий.

По крайней мере, вы должны переместить screen.blit(surf, (400, 300)) и pygame.display.flip() за пределы цикла событий.

Это исправлено:

 # Our main loop!
while running:
    # for loop through the event queue
    for event in pygame.event.get():
        # Check for KEYDOWN event; KEYDOWN is a constant defined in pygame.locals, which we imported earlier
        if event.type == KEYDOWN:
            # If the Esc key has been pressed set running to false to exit the main loop
            if event.key == K_ESCAPE:
                running = False
            # Check for QUIT event; if QUIT, set running to false
            elif event.type == QUIT:
                running = False

    # Create the surface and pass in a tuple with its length and width
    surf = pygame.Surface((50, 50))
    # Give the surface a color to differentiate it from the background
    surf.fill((255, 255, 255))
    rect = surf.get_rect()

    screen.blit(surf, (400, 300))
    pygame.display.flip()