使用填充逐渐淡出表面

Gradually fading a surface using fill

我正在尝试为我目前正在制作的游戏在一段时间内淡化表面。这是我第一次在 surface.fill() 方法中使用 alpha 值,在阅读文档后我认为它会相当简单。但是,我不断收到错误消息:pygame.error

这本身就比较模糊,我其实也不知道哪里出了问题。那么有人可以建议我正在使用的方法的替代方法,或者简单地解释如何正确使用 surface.fill() 吗?

这是我编写的一些代码示例,用于演示我希望实现的目标。

import pygame

pygame.init()
SCREEN = pygame.display.set_mode((300, 300))

fade = 0
while True:
    SCREEN.fill((0, 0, 0))
    SCREEN.fill((250, 248, 239, fade), None, pygame.SRCALPHA)

    fade += 1

    pygame.display.update()

SRCALPHAspecial_flags 无效。看看 docs

SRCALPHA 仅在创建曲面时使用(因为它通常是只读标志)。


您的代码应如下所示:

import pygame

pygame.init()
SCREEN = pygame.display.set_mode((300, 300))

surf = pygame.Surface((300, 300), pygame.SRCALPHA)

fade = 0
while True:
    if pygame.event.get(pygame.QUIT): break
    pygame.event.pump()

    SCREEN.fill((0, 0, 0))
    surf.fill((250, 248, 239, fade))
    SCREEN.blit(surf, (0, 0))

    if fade < 255:
        fade += 1
    pygame.display.update()

不要尝试用 RGBA 颜色填充屏幕表面。请改用带有 SRCALPHA 标志的 Surface

请注意,fade 永远不应大于 255。否则,您将得到一个无效的颜色参数异常。