将 screen.fill 设置为 pygame 中的渐变?

Setting screen.fill as a gradient in pygame?

我正在尝试将我的背景设置为从黑色到红色的渐变(过渡是 vertical/the 顶部为黑色,底部为红色)。我怎样才能达到这个效果?

DR0ID 有一个名为 gradients.py 的好模块。

这是更简单的垂直渐变函数,它使用 linear interpolation:

def vertical(size, startcolor, endcolor):
    """
    Draws a vertical linear gradient filling the entire surface. Returns a
    surface filled with the gradient (numeric is only 2-3 times faster).
    """
    height = size[1]
    bigSurf = pygame.Surface((1,height)).convert_alpha()
    dd = 1.0/height
    sr, sg, sb, sa = startcolor
    er, eg, eb, ea = endcolor
    rm = (er-sr)*dd
    gm = (eg-sg)*dd
    bm = (eb-sb)*dd
    am = (ea-sa)*dd
    for y in range(height):
        bigSurf.set_at((0,y),
                        (int(sr + rm*y),
                         int(sg + gm*y),
                         int(sb + bm*y),
                         int(sa + am*y))
                      )
    return pygame.transform.scale(bigSurf, size)

还有一个更通用的 vertical_func 函数,它允许您为每个颜色通道传递不同的函数。