将 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
函数,它允许您为每个颜色通道传递不同的函数。
我正在尝试将我的背景设置为从黑色到红色的渐变(过渡是 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
函数,它允许您为每个颜色通道传递不同的函数。