在pygame中,我如何从一种颜色褪色到另一种颜色?我想慢慢地改变一个圆圈的颜色,从绿色到蓝色,再到紫色,再到粉色,再到红色,再到橙色,再到黄色再到绿色。我该怎么做?目前,我正在使用
def colour():
switcher = {
0: 0x2FD596,
1: 0x2FC3D5,
2: 0x2F6BD5,
3: 0x432FD5,
4: 0x702FD5,
5: 0xBC2FD5,
6: 0xD52F91,
7: 0xD52F43,
8: 0xD57F2F,
9: 0xD5D52F,
10: 0x64D52F,
11: 0x2FD557,
}
return switcher.get(round((datetime.datetime.now() - starting_time).total_seconds()%11))
但这在颜色和外观之间有很大的区别。在
如果你不需要计算任何颜色,你可以选择:
首先,你需要确定溶解需要多长时间。您还需要存储原始颜色和最终颜色。最后,计算混合物。我会为此创建一个类:
你可以很容易地修改它来做非线性混合。例如,在
blend_colors
:amount = math.sin(amount * math.pi)
(我不是Pygame专家-可能已经有一个内置函数了。)
你可以转换成一个整数,增加数字,再把它转换回十六进制,这样就可以在一种颜色到另一种颜色的所有值之间切换。然后循环,直到达到下一个值,如下所示:
请参阅editbyprune以获得更优雅的实现。请注意,
code_to_change_colour(value1)
应该更改为您在程序中更改颜色的方式。增量将允许您更改跳过的颜色数。显然,这段代码需要以一种易于使用的方式进行编辑:例如def fade(value1, value2)
这样的函数。在从@Prune编辑——因为代码在注释中不能很好地工作。在
请注意,您所写的大部分内容都是“仅仅”循环控制。您已经知道开始和停止值以及固定的增量。这意味着一个
^{pr2}$for
循环,而不是while
。考虑一下这个:关键是简单地计算每一步要改变多少通道(a、r、g和b)。Pygame的},它仍将运行。在
Color
类非常方便,因为它允许在每个通道上进行迭代,并且它的输入非常灵活,所以您只需在下面的示例中将'blue'
更改为{下面是一个简单的运行示例:
如果不想依赖于帧速率,而是使用基于时间的方法,可以将代码更改为:
^{pr2}$相关问题 更多 >
编程相关推荐