Python游戏开发从入门到精通
上QQ阅读APP看书,第一时间看更新

3.3 设置像素和颜色

3.3 设置像素和颜色

在Pygame模块中,可以很方便地实现对颜色和像素的处理。例如在实例3-3中,设置了不同文本的颜色。在本节的内容中,将详细讲解设置像素和颜色的知识。

3.3.1 颜色介绍

在现实应用中,光线主要有3种的颜色:红色、绿色和蓝色。将这3种颜色用不同的量组合起来,可以形成任何其他的颜色。在Pygame中,使用包含3个整数的元组来表示颜色。

● 元组中的第1个值,表示颜色中有多少红色。为0表示没有红色,而255表示红色达到最大值。

● 元组中的第2个值表示绿色。

● 元组中的第3个值表示蓝色。

用上述3个整数表示一种颜色的颜色值,这通常称为RGB值(RGB value)。因为可以针对3种主要的颜色使用0~255之间的任何组合,Pygame可以绘制16777216种不同的颜色,即256×256×256种颜色。如果试图使用大于255的值或者负值,将会得到类似“ValueError: invalid color argument”的一个错误。例如,我们创建元组(0, 0, 0)并且将其存储到一个名为BLACK的变量中。没有红色、绿色和蓝色的颜色量,最终的颜色是完全的黑色。黑色就是任何颜色都没有。元组(255,255,255)表示红色、绿色和蓝色都达到最大量,最终得到白色。白色是红色、绿色和蓝色的完全组合。元组(255, 0, 0)表示红色达到最大量,而没有绿色和蓝色,因此,最终的颜色是红色。同样道理,元组(0, 255, 0)是绿色,而元组(0, 0, 255)是蓝色。可以组合红色、绿色和蓝色的不同量来形成其他的颜色。在表3-1中列出了许多常见的颜色和它们的RGB值。

表3-1 颜色及其RGB值

在Python程序中,可以使用这些颜色中的任何一种,甚至可以组合不同的颜色。在Pyagame框架中,除了可以用3个整数或4个整数的一个元组来设置颜色,还可以使用pygame.Color对象设置颜色。通过调用pygame.Color()构造函数,并且传入3个整数或4个整数来创建Color对象。可以将这个Color对象存储到变量中,就像可以将元组存储到变量中一样。

在Pygame中的任何绘制函数,如果有一个针对颜色的参数的话,那么可以为其传递元组形式或者Color对象形式的颜色。即便二者是不同的数据类型,但如果它们都表示相同的颜色,一个Color对象等同于4个整数的一个元组(在程序中整数42和浮点数42.0的颜色值的意义是相同的)。既然知道了如何表示颜色(用pygame.Color对象或者是3个整数或4个整数的一个元组,3个整数的话,分别表示红色、绿色和蓝色,4个整数的话,还包括一个可选的alpha值)和坐标(表示X和Y的两个整数的一个元组),让我们来了解一下pygame.Rect对象,以便可以开始使用Pygame的绘制函数。

3.3.2 设置透明度

在Python程序中,可以使用alpha值设置颜色的透明度。当在一个Surface对象上绘制一个像素时,新的颜色完全替代了那里已经存在的任何颜色。但是,如果使用带有一个alpha值的颜色,可以给已经存在的颜色添加一个带有颜色的色调。例如表示绿色的3个整数值的元组是(0, 255, 0)。但是如果添加了第4个整数作为alpha值,可以使其成为一个半透明的绿色(0, 255, 0, 128)。数字255表示的alpha值是完全不透明的(也就是说,根本没有透明度)。颜色(0, 255, 0)和(0, 255, 0, 255)看上去完全相同。alpha值为0,表示该颜色是完全透明的。如果将alpha值为0的任何一个颜色绘制到一个Surface对象上,它没有任何效果,因为这个颜色完全是透明的,且不可见。为了使用透明颜色来进行绘制,必须使用方法convert_alpha()创建一个Surface对象。

实例文件tou.py的具体实现代码如下所示。

在上述代码中设置了一幅背景图片,然后使用一个“天魔伞”图片作为前景图在背景图中移动。为了实现最佳的显示效果,将背景图和前景图设置为不同的分辨率,并且设置了透明度(Alpha通道),执行后的效果如图3-3所示。

图3-3 执行效果

3.3.3 实现一个三原色颜色滑动条效果

例如在下面的实例文件xi.py中,演示了实现一个三原色颜色滑动条效果的过程。

实例文件xi.py的具体实现代码如下所示。

执行后的效果如图3-4所示。

图3-4 执行效果