Изменение фона PyGame по умолчанию с черного на белый

#python #pygame

Вопрос:

Я пытаюсь изменить цвет по умолчанию с черного на белый. не для того, чтобы заполнить его. Мой текущий код, где я его заполняю:

 import pygame
pygame.init()

size = 600, 600

surface = pygame.display.set_mode(size, pygame.RESIZABLE)
surface.fill((255, 255, 255))

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
    pygame.display.update()
 

Это работает, однако на секунду оно отображается черным, а затем само меняется, и я ищу решение, в котором оно заранее начинается с белого фона. Заранее спасибо

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

1. Просто поместите pygame.display.update() непосредственно после screen.fill(). Но на самом деле, вы должны заполнить фон цветом каждого кадра, а затем нарисовать все поверх него. Это самый простой способ создать хорошо функционирующую программу pygame.

2. Я знаю, хотя я поставил его сразу после fill() того, как он все равно будет показан не сразу, а через миллисекунду. я ищу решение, которое установит цвет при инициализации поверхности или что-то подобное

3. Это невозможно. Кроме того, просто для ясности, в этом коде вы не обновляете() непосредственно после заполнения, сначала вы проверяете очередь событий, что занимает некоторое время.

4. Если на самом деле обновление() непосредственно после заполнения все еще слишком медленное для вас, если черная вспышка в течение 0,00001 секунды неприемлема, вы можете создать скрытое окно с помощью pygame. СКРЫТЫЙ, а затем сделайте его белым, а затем покажите его, снова установив режим с помощью pygame. показанный

Ответ №1:

Может быть, это вам поможет

 import pygame
pygame.init()

size = 600, 600

surface = pygame.display.set_mode(size, pygame.RESIZABLE)
surface.fill((255, 255, 255))

while True:
    surface.fill((255, 255, 255))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
    pygame.display.update()
 

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

1. Тем не менее, через секунду он становится белым.

Ответ №2:

По @starbuck45 я использовал флаг pygame.HIDDEN .

 import pygame
pygame.init()

size = 600, 600
surface = pygame.display.set_mode(size, pygame.RESIZABLE | pygame.HIDDEN)
surface.fill("white")
pygame.display.set_mode(size)

line = pygame.draw.line(surface, "black", (0, 0), (600, 600))


while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
 

и это сработало отлично!