Surface简单运用
Surface
是Pygame中用于表示图像和画布的基本对象类型,界面的所有内容都是显示在Surface
的对象上面的,所以程序至少应该有一个Surface
。可以在surface
上面再绘制surface
,一般将最底层的surface
命名为screen。
Surface介绍
Surface的对象使用pygame.Surface((width,height))
获取,其方法和属性如下:
属性:
- width:屏幕的宽度(以像素为单位)。
- height:屏幕的高度(以像素为单位)。
- left:屏幕左边缘的 x 坐标。
- top:屏幕上边缘的 y 坐标。
- rect:屏幕的矩形表示。
方法:
- blit():将一个图像或 Surface 对象绘制到当前屏幕上。
- fill():使用指定的颜色或图像填充屏幕。
- get_at():返回屏幕上指定位置的像素颜色。
- get_rect():返回屏幕的矩形表示。
- set_at():设置屏幕上指定位置的像素颜色。
- set_clip():设置屏幕的剪辑区域。
- subsurface():返回屏幕上的一部分,形成一个新的 Surface 对象。
screen
通常将pygame.display.set_mode((width,height))
返回的对象命名为screen
,它是 Pygame 的一个 Surface 对象。界面会默认显示该界面,同时其他surface应该绘制在此界面上进行显示
代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import pygame
import sys
# 初始化 Pygame
pygame.init()
# 创建窗体
screen = pygame.display.set_mode((400, 300))
# 游戏循环
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
运行结果为:
纯色
pygame库中可以使用预置颜色名称、RGB元组和十六进制(#rrggbb)字符串三种方式设置颜色。
可以使用颜色名称是因为Color模块已经预置了部分颜色,详细的颜色见官方文档。在实际使用时通过pygame.Color('color_name')
即可调用。
通过元组的方式颜色的完整形式为(r,g,b,a)
,其中rgb分别代表红绿蓝、a代表透明度,他们的取值范围都是0255.该形式也可以简写为ff,需要留意(r,g,b)
,忽略透明度参数。
十六进制字符串设置逻辑与简化的元组逻辑相同,格式为#rrggbb
,每个通道的值范围为00#
字符不可少。
代码示例如下:
1 | import pygame |
效果如图
图片
加载图片作为surface的语法为pygame.image.load('img_Path').convert_alpha()
,其中convert_alpha()
的作用将图像的每个像素转换为包含Alpha通道的数据。如果不添加convert_alpha()
,pygame会将图像视为完全不透明的,即使原始图像中包含Alpha通道信息(即原图有透明部分)。这可能导致在绘制图像时不透明部分没有被正确处理,导致图像渲染有错误或者出现不期望的视觉效果。例如,预期为透明或半透明的部分可能会显示为黑色或其他颜色,或者预期应该是透明的背景部分没有被正确的消除。
图片可以使用transform模块的方法进行变换,例如pygame.transform.rotozoom(surface, angle, zoom)
进行选择和缩放,其中各个参数的作用为:
-
surface
: 要进行旋转和缩放的 Pygame Surface 对象。 -
angle
: 旋转的角度,以度为单位。正值表示顺时针旋转,负值表示逆时针旋转。 -
zoom
: 缩放比例。值小于 1.0 表示缩小,大于 1.0 表示放大。
代码示例如下:
1 | import pygame |
效果如图
文字
使用文字作为surface的内容需要font对象,获取该对象的语法为Font(file, size)
,其中 file
:表示字体文件的路路径,如果传入 None
则使用 Pygame 默认字体; size
是一个整数,以磅为单位表示字体的大小。
创建对象时使用font.render(text,antialias,color,backgroup)
创建surface对象,其中font
为字体类的实例化对象。方法中的参数的作用分别为:text参数为要渲染的文本字符串;antialias参数是一个布尔值,用于指定是否应用抗锯齿;color参数用于设置文本的颜色,使用RGB格式;background参数为RGB格式设置背景颜色,如果未指定或为None则默认背景颜色为(0, 0, 0)。
代码示例如下:
1 | import pygame |
效果如图
surface显示更新
在基础框架中使用了screen.fill()
进行绘制、pygame.display.flip()
方法进行更新是因为pygame的双缓冲机制需要如此操作。在这个机制中有绘制和显示两个缓冲区。flip()
将绘制缓冲区的内容复制到显示缓冲区,从而使得绘制的内容显示在屏幕上。
也可以将 pygame.display.flip()
修改为 pygame.display.update()
。两者的作用是类似的,都用于将绘制的内容显示在屏幕上。pygame.display.flip()
方法是无参方法,使用时默认更新整个显示的内容;使用pygame.display.update()
方法可以选择性地更新屏幕的特定区域,通过可以传递一个矩形参数,参数表示要更新的区域。