在Python 3.8中使用Pygame模块:
我正在尝试为我正在制作的一个颜色游戏制作颜色渐变。我知道如何制作一维渐变,像这样:
但我希望能够创建一个图像与两个以上的颜色内的梯度。一个例子,从互联网上是这样的:(忽略花哨的文字)
如何创建一个函数来在曲面上生成多种颜色的渐变?重要的是,我可以选择角上的颜色,或者至少能够以我可以理解的方式影响它们。
我在网上发现的一个想法是这样的:
for i in range(900):
for j in range(900):
surface.set_at((i,j),(i/4,j/4,i/4))
我的问题是很难选择它生成的颜色,我不能拼凑如何使颜色相互融合,特别是有多个颜色。
2条答案
按热度按时间9lowa7mx1#
Pygame没有渐变的API,虽然你没有发布自己的代码,但你可能做得很好。
因此,对于“2维平方梯度”,你必须继续将问题分解为更小的部分,直到你得到你想要的-对于这个,它可能是:在你感兴趣的区域的顶部y == 0处有一个渐变,在你感兴趣的区域的底部y =高度处有另一个渐变,对于每一列,你插入一个新的渐变,从顶部渐变的颜色开始,一直到底部渐变的颜色。
唯一的坏消息是,这在pygame中会非常慢-但您可以绘制一次并保存生成的图像,然后在游戏时加载它。
还有其他适合绘制 * 线性 * 渐变的库和框架,并且可以快速完成,如Cairo,GEGL和OpenGL本身-但这些都没有现成的方法将一个完整的渐变过渡到另一个。
[继续...]
nfeuvbwi2#
因此,对于“2维平方梯度”,你必须继续将问题分解为更小的部分,直到你得到你想要的-对于这个,它可能是:在你感兴趣的区域的顶部y = 0处有一个渐变,在你感兴趣的区域的底部y =高度处有另一个渐变,对于每一列,你插入一个新的渐变,从顶部渐变的颜色开始,一直到底部渐变的颜色。
这很好用!我能够想出三个函数,它们一起创建了非常棒的4色矩形渐变,每种颜色都在不同的角落。如果你想使用它,这里是我的代码:
要绘制新的渐变,首先使用createColorGrid(resolution,color 1,color 2,color 3,color 4)来构建特定分辨率的颜色块数组。低分辨率看起来就像游戏I Love Hue中的东西。一旦有了colorGrid变量,将其插入drawColorGrid(colorGrid,rect)。这将获取colorGrid数组并将其blit到给定rect内的屏幕上。在本例中,屏幕表面名为windowSurface。
我是一个相当新的程序员,所以上面的代码中肯定有一些优化。如果你愿意,可以指出来给我看,但这段代码对我正在做的应用程序来说非常好。它似乎足够流畅,每秒可以生成并blit至少20个随机渐变到全屏,这比我需要的要多得多。