本节书摘来自异步社区《Python和Pygame游戏开发指南》一书中的第2章,第2.11节,作者[美]Al Sweigart(斯维加特), 李强 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.11 颜色的透明度
当你通过一个带有红色色调的玻璃窗口看过去,其背后的所有颜色都会增加一个红色的阴影。你可以通过给颜色值添加第4个0~255的整数值来模仿这种效果。这个值叫作alpha值(alpha value)。这是表示一种颜色有多么不透明的一个度量值。通常,当你在一个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对象。例如,如下代码创建了一个可以在其上绘制透明颜色的Surface对象。
一旦在该Surface对象上绘制的内容存储到了anotherSurface中,随后another Surface可以“复制”(blit,也就是copy)到DISPLAYSURF中,以便它可以显示在屏幕上(参见本章稍后的2.19节)。在那些并非从一个convert_alpha()返回的Surface对象上,你不能够使用透明颜色,这也包括从pygame.display. set_mode()返回的显示Surface,注意这一点是很重要的。
如果我们创建了一个颜色元组来绘制著名的隐形粉红独角兽,应该会使用(255, 192, 192, 0),它最终看上去是完全不可见的,就像是alpha值为0的任何其他颜色一样。毕竟,它是隐形的。图2-5是绘制隐形粉红独角兽的屏幕截图。