Python + Pygame;screen.fill () окно сбоя - PullRequest
2 голосов
/ 12 октября 2019

Всякий раз, когда я пытаюсь включить «screen.fill (введите значение здесь)» в мой код Pygame, окно мгновенно падает. Я могу закомментировать это, и мой код работает просто отлично. Я действительно не уверен, почему.

Я пытался переместить строку, частично используя код других людей - не повезло.

import pygame
pygame.init()

win = pygame.display.set_mode((1000, 800))
pygame.display.set_caption("Tetris")

img=pygame.image.load("C:\\Users\\Charlotte\\Desktop\\tetris_grid.png")
win.blit(img,(450, 150))

running = True
while running:
    screen.fill(0, 0, 0)
    pygame.display.update()
    pygame.time.delay(100)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

pygame.quit()

Когда я запускаю код с этой строкойв нем окно открывается, а затем мгновенно закрывается.

Ответы [ 2 ]

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

Параметр цвета до fill() должен быть либо единичным значением оттенка серого, либо кортежем из 3 или 4 компонентов RGBA. Таким образом, это должно быть:

win.fill(0)

или

win.fill((0, 0, 0))

Далее вы должны blit() изображение в основном цикле. Чтобы непрерывно рисовать сцену в главном цикле приложения, вы должны:

  • обработать события
  • очистить окно
  • нарисовать сцену (бликнуть изображение)
  • обновить отображение

Кроме того, я рекомендую использовать tick() из pygame.time.Clock вместо pygame.time.delay() tpo управления кадрами в секунду.

import pygame

pygame.init()

win = pygame.display.set_mode((1000, 800))
pygame.display.set_caption("Tetris")
clock = pygame.time.Clock()

img=pygame.image.load("C:\\Users\\Charlotte\\Desktop\\tetris_grid.png")

running = True
while running:

    clock.tick(60)

    # handle the events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # clear the display
    win.fill(0)

    # draw the scene
    win.blit(img,(450, 150))

    # update the display
    pygame.display.update()

pygame.quit()
1 голос
/ 12 октября 2019

Если вы пытаетесь заполнить экран черным, цвет должен быть передан в виде кортежа:

win.fill((0, 0, 0))

Кроме того, вы никогда не назначаете screen, может быть, вы намеревались использовать win?

Документ для Surface.fill .

...