Вы создаете поверхность с именем black_surface
, но вы заполняете ее белым цветом.Заполните его черным (например, (0, 0, 0, 1)
) и он может работать, но есть еще одна проблема:
Когда вы вызываете display.flip()
внутри цикла, когда вы меняете поверхность экрана, дисплей может не обновиться, если выне позволяйте pygame обрабатывать события (например, вызывая pygame.event.get()
), в зависимости от вашей ОС.Кроме того, пока выполняется цикл, вы не можете обрабатывать события вручную, например, событие QUIT
.Поэтому, пока ваш экран становится черным, вы не можете выйти из игры.
Как правило, вы должны иметь только один основной цикл и не вызывать функции блокировки, такие как pygame.time.sleep
, но, конечно, есть исключения).
Вот простой пример Sprite
:
import pygame
class Fade(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.rect = pygame.display.get_surface().get_rect()
self.image = pygame.Surface(self.rect.size, flags=pygame.SRCALPHA)
self.alpha = 0
self.direction = 1
def update(self, events):
self.image.fill((0, 0, 0, self.alpha))
self.alpha += self.direction
if self.alpha > 255 or self.alpha < 0:
self.direction *= -1
self.alpha += self.direction
def main():
pygame.init()
screen = pygame.display.set_mode((500, 500))
sprites = pygame.sprite.Group(Fade())
clock = pygame.time.Clock()
while True:
events = pygame.event.get()
for e in events:
if e.type == pygame.QUIT:
return
sprites.update(events)
screen.fill((30, 30, 30))
pygame.draw.rect(screen, pygame.Color('dodgerblue'), (100, 100, 100, 100))
sprites.draw(screen)
pygame.display.update()
clock.tick(60)
if __name__ == '__main__':
main()