Pygame:提高游戏的颜值3 – 零基础入门学习Python083

Pygame:提高游戏的颜值3

 

让编程改变世界

Change the world by program


 

转换图片

 

我们说过,图像是特定像素的组合,而 Surface 对象是 Pygame 对图像的描述。在 Pygame 中,到处都是 Surface 对象:set_mode() 方法返回的是一个 Surface 对象;在界面上打印文字,也是先将文字转变成Surface对象再“贴”上去;小乌龟在上边爬来爬去,事实上就是不断调整 Surface 对象上一些特定像素的位置。

 

image.load() 载入图片后将返回一个 Surface 对象,此前我们一直拿来就用,没有对其进行转换,这是效率相对较低的做法。如果你希望 Pygame 尽可能高效地处理你的图片,那么我们应该在载入图片后同时调用 convert() 方法进行转换。

background = pygame.image.load(“background.jpg”).convert()

 

有童鞋就好奇了,不是说 image.load() 会返回一个 Surface 对象吗?还转换个啥?其实这里转换的是“像素格式”,image.load()

返回的 Surface 对象中保留了原图像的像素格式。在调用 blit() 方法的时候,如果两个 Surface 对象的像素格式不同,那么 Pygame 会实时地进行转换,这是相当费时的操作。因此,从今天起,我们应该在 image.load() 之后马上调用 convert() 方法,将像素格式先转换好。

 

还有一个是 convert_alpha(),它们有什么区别呢?一般情况下我们用 RGB 来描述一个颜色,而在游戏开发中我们常常用 RGBA 来描述。多的这个 A 指的是 Alpha 通道,用于表示透明度,它的值也是 0~255,0 表示完全透明,255 表示完全不透明。image.load() 支持多种格式的图片导入,对于包含 alpha 通道的图片,我们使用 convert_alpha() 转换格式,否则使用 convert()。

turtle = pygame.image.load(“turtle.png”).convert_alpha()

 

透明度分析

 

Pygame 支持三种类型的透明度设置:colorkeys,surface alphas 和 pixel alphas。设置 colorkeys 是指定一种颜色,使其变为透明。surface alphas 是整体设置一个图片的透明度。pixel alphas 为每个像素增加一个 alpha 通道,也就是允许设置每个像素的透明度。colorkeys 和 surface alphas 可以混合使用,而 pixel alphas 不能和其它类型混合。

 

说的那么复杂,其实就是由 convert() 方法转换来的 Surface 对象支持 colorkeys 和 surface alphas 设置透明度,并且可以混合设置。而 convert_alpha() 方法转换后是支持 pixel alphas,也就是这个图片本身每个像素都带有 alpha 通道(所以我们载入一个带 alpha 通道的 png 图片,可以看到该图片部分位置是透明的)。

 

我们来做下实验,这里有两张图片 turtle.jpg 和 turtle.png。turtle.jpg 不带 alpha 通道,turtle.png 带 alpha 通道,并且背景被设置为透明。

 

…… 此处省略N多内容,具体请看视频讲解 ……

 


为您推荐

报歉!评论已关闭.