> 6、pygame模块time时间控制:
pygame.time 时间控制模块,其主要功能是管理时间和游戏帧数率(即 FPS)
Pygame.time 模块提供了以下常用方法:
```python
pygame.time.get_ticks() 以毫秒为单位获取时间(从pygame初始化后开始计算)
pygame.time.wait() 使程序暂停一段时间
pygame.time.set_timer() 创建一个定时器,即每隔一段时间,去执行一些动作
pygame.time.Clock() 创建一个时钟对象来帮我们确定游戏要以多大的帧数运行
```
设置游戏的帧数率(FPS)可以通过 Clock() 方法来实现,
```python
#创建时钟对象(控制游戏的FPS)
clock = pygame.time.Clock()
while True:
#通过时钟对象,指定循环频率,每秒循环60次
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
pygame.display.update()
```
> 7、pygame模块Rect矩形区域
Rect指的是矩形,在 Pygame 中我们使用 Rect() 方法来创建一个指定位置,大小的矩形区域。函数的语法格式如下:
```
rect =pygame.Rect(left,top,width,height)
```
Rect 表示的区域必须位于一个 Surface 对象之上,比如游戏的主窗口(screen)。上述方法由四个关键参数值构成,分别是 left、top、width、height,
```python
#导入所需的模块
import sys
import pygame
# 使用pygame之前必须初始化
pygame.init()
# 设置主屏窗口
screen = pygame.display.set_mode((400,400))
# 设置窗口的标题,即游戏名称
pygame.display.set_caption('hello world')
#加载一张图片作为背景
background = pygame.image.load(r'H:\temp\dw.png')
#背景图设置成屏幕小
background = pygame.transform.scale(background,(400,400))
#获得显示对象的rect区域坐标
bgRect = background.get_rect()
backgroundRect = pygame.Rect(100,100,150,150)
child = background.subsurface(backgroundRect)
childRect = child.get_rect()
# 引入字体类型
f = pygame.font.Font('C:/Windows/Fonts/simhei.ttf',50)
# 生成文本信息,第一个参数文本内容;第二个参数,字体是否平滑;
# 第三个参数,RGB模式的字体颜色;第四个参数,RGB模式字体背景颜色;
text = f.render("这里是文字",True,(255,0,0),(0,0,0))
#获得显示对象的rect区域坐标
textRect =text.get_rect()
# 设置显示对象居中
textRect.center = (200,200)
# 将背景图绘制到主屏幕 Screen 上。
screen.blit(background,bgRect)
# 将准备好的文本信息,绘制到主屏幕 Screen 上,并且在背景之上。
screen.blit(text,textRect)
# 绘制到主屏幕 和 文本之上
screen.blit(child,childRect)
# 固定代码段,实现点击"X"号退出界面的功能,几乎所有的pygame都会使用该段代码
while True:
# 循环获取事件,监听事件状态
for event in pygame.event.get():
# 判断用户是否点了"X"关闭按钮,并执行if代码段
if event.type == pygame.QUIT:
#卸载所有模块
pygame.quit()
#终止程序,确保退出程序
sys.exit()
pygame.display.flip() #更新屏幕内容
```
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/4c1987eec4744c7f821c137f623bbcb1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbGlhbmdibG9n,size_13,color_FFFFFF,t_70,g_se,x_16)
Rect(矩形区域)对象一些常用方法:
pygame.Rect.copy() 复制矩形
pygame.Rect.move() 移动矩形区域,接受一个列表参数
pygame.Rect.move_ip() 移动矩形(无返回)
pygame.Rect.inflate() 增大或缩小矩形大小
pygame.Rect.clamp() 将矩形移到另一个矩形内
pygame.Rect.union() 返回一个两个矩形合并后的矩形。
pygame.Rect.fit() 按纵横比调整矩形的大小或移动矩形。
pygame.Rect.contains() 测试一个矩形是否在另一个矩形内
pygame.Rect.collidepoint() 测试点是否在矩形内
pygame.Rect.colliderect() 测试两个矩形是否重叠
Rect 对象一些关于矩形大小的常用的属性:
x,y 表示矩形距离 x、y 轴的距离
top, left, bottom, right #在坐标系内描述矩形的大小
topleft, bottomleft, topright, bottomright #返回一个描述矩形大小的元组
midtop, midleft, midbottom, midright #返回一个描述矩形大小的元组
center, centerx, centery #(centerx,centery)表示矩形中央坐标(x,y)的值
size, width, height #用于描述矩形的width、height
除了通过 Rect 对象来构造一个矩形区域之外,我们还可以使用rect属性来构建一个矩形区域。在 Pygame 中有许多函数都提供了rect属性,比如有下列函数:
```
surface.fill((0,0,255),rect=(100,100,100,50))
```
上述代码会在 surface 对象的区域内选定一个 rect 区域,并将该区域填充为蓝色。
> 8、pygame模块Event 事件:
事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,比如鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等等,这些都可以看做是“事件”。Pygame 定义了一个专门用来处理事件的结构,即事件队列,该结构遵循遵循队列“先到先处理”的基本原则,通过事件队列,我们可以有序的、逐一的处理用户的操作(触发事件);
Pygame.event 模块提供了处理事件队列的常用方法:
pygame.event.get() 从事件队列中获取一个事件,并从队列中删除该事件
pygame.event.wait() 阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态
pygame.event.set_blocked() 控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入
pygame.event.set_allowed() 控制哪些事件允许进入队列
pygame.event.pump() 调用该方法后,Pygame 会自动处理事件队列
pygame.event.poll() 会根据实际情形返回一个真实的事件,或者一个None
pygame.event.peek() 检测某类型事件是否在队列中
pygame.event.clear() 从队列中清除所有的事件
pygame.event.get_blocked() 检测某一类型的事件是否被禁止进入队列
pygame.event.post() 放置一个新的事件到队列中
pygame.event.Event() 创建一个用户自定义的新事件
键盘鼠标事件:
```cpp
import sys
from turtle import speed
import pygame
print(pygame.version)
#初始化
pygame.init()
#设置窗口大小
screen = pygame.display.set_mode((400,400))
#设置名称
pygame.display.set_caption('鼠标键盘时间demo')
#加载一个图片并设置大小
img_move = pygame.image.load(r'H:\temp\dw.png')
img_move = pygame.transform.scale(img_move,(100,100))
img_rect = img_move.get_rect()
#开始循环
while True:
#初始化速度为0
speed = [0,0]
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
#通过键盘按键确定移动方向
key_pressed = pygame.key.get_pressed()
if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]:
speed[0] -= 10
if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:
speed[0] += 10
if key_pressed[pygame.K_w] or key_pressed[pygame.K_UP]:
speed[1] -= 10
if key_pressed[pygame.K_s] or key_pressed[pygame.K_DOWN]:
speed[1] += 10
#判断鼠标移动事件
if event.type == pygame.MOUSEMOTION:
#获取鼠标坐标
x,y = event.pos
#修改矩形中心为鼠标坐标
img_rect.center = (x,y)
#移动
img_rect = img_rect.move(speed)
#填充背景
screen.fill((255,255,255))
#绘制图像
screen.blit(img_move,img_rect)
pygame.display.update()
```
Pygame 提供了三个鼠标事件:
鼠标移动(MOUSEMOTION)、
鼠标按下(MOUSEBUTTONDOWN)、
鼠标释放(MOUSEBUTTONUP),
不同事件类型对应着不同的成员属性。
pygame.event.MOUSEMOTION鼠标移动事件
event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
event.rel 鼠标相对运动距离(X,Y),相对于上次事件
event.buttons 鼠标按钮初始状态(0,0,0),分别对应(左键,滑轮,右键),移动过程中点击那个键,相应位置变会为1
pygame.event.MOUSEBUTTONUP鼠标键释放事件
event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
event.button 鼠标释放键编号(整数)左键为1,按下滚动轮2、右键为3
pygame.event.MOUSEBUTTONDOWN 鼠标键按下事件
event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
event.button 鼠标按下键编号(整数),左键为1,按下滚动轮2、右键为3,向前滚动滑轮4、向后滚动滑轮5
>9、pygame基础功能模块Draw绘画函数:
Pygame 中提供了一个draw模块用来绘制一些简单的图形状,比如矩形、多边形、圆形、直线、弧线等。
1) 绘制矩形:
pygame.draw.rect(surface, color, rect, width)
参数说明如下:
surface:指主游戏窗口,无特殊情况,一般都会绘制在主屏幕上;
color:该参数用于该图形着色;
rect:绘制图形的位置和尺寸大小;
width:可选参数,指定边框的宽度,默认为 0,表示填充该矩形区域。
注意,当 width > 0 时,表示线框的宽度;而 width < 0 时,此时不会绘制任何图形。
2) 绘制多边形
pygame.draw.polygon(surface, color, points, width)
其中 points 一个列表参数,它表示组成多边形顶点的 3 或者多个 (x,y) 坐标,通过元组或者列表来表示这些多边形顶点。其余参数与上述函数相同。
3) 绘制圆形
pygame.circle(surface, color, pos, radius, width=0)
上述参数的含义如下:
pos:该参数用来指定的圆心位置;
radius:用来指定圆的半径;
4) 绘制椭圆形
pygame.draw.ellipse(surface, color, Rect, width=0)
绘制椭圆形的过程,其实就是在矩形区域内部(Rect)绘制一个内接椭圆形,其余参数与上述参数意思相同。
5) 绘制圆弧曲线
当需要绘制圆弧的曲线时,使用以下函数,语法格式如下:
pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width=1)
与 ellipse 函数相比,该函数多了两个参数:
start_angle是该段圆弧的起始角度;
stop_angle是终止角度;
这两个都是用弧度制来表示的,而原点就是矩形 Rect 的中心位置。
6) 绘制直线
Draw 模块提供了两类绘制直线的方法,即是否消除直线的锯齿,并且根据实际情况,我们还可以选择绘制一条或者多条直线。
pygame.draw.line(surface, color, start_pos, end_pos, width=1)
参数说明:
start_pos 和 end_pos 表示线段的起始位置,此处使用 [x,y] 来表示起始位置;
width =1 表示直线的宽度,默认为 1。
如果是绘制一条消除锯齿的平滑线,此时则使用 blend = 1 参数,如下所示:
pygame.aaline(surface, color, startpos, endpos, blend=1)
blend 参数表示通过绘制混合背景的阴影来实现抗锯齿功能。
7) 绘制多条直接
当需要绘制多条直线的时候,我们可以使用以下方法:
pygame.lines(surface, color, closed, pointlist, width=1)
其中 pointlist 与 closed 含义如下:
pointlist:参数值为列表,包含了一些列点坐标的列表
closed:布尔值参数,如果设置为 True,表示直线的第一个端点和直线的最后一个端点要首尾相连;
>10、pygame基础模块font文本:
Pygame 通过pygame.font模块来创建一个字体对象,从而实现绘制文本的目的;
Font 模块提供了两种创建字体(Font)对象的方法:
SysFont(从系统中加载字体文件创建字体对象)
Font(通过文件路径创建字体对象)
1) font.SysFont()
直接从系统中加载字体使用如下方法:
pygame.font.SysFont(name, size, bold=False, italic=False)
name:列表参数值,表示要从系统中加载的字体名称,它会按照列表中的元素顺序依次搜索,如果系统中没有列表中的字体,将使用 Pygame 默认的字体。
size:表示字体的大小;
bold:字体是否加粗;
italic:字体是否为斜体。
my_font = pygame.font.SysFont(['方正粗黑宋简体','microsoftsansserif'],50)
上述方法将优先使用“方正粗黑宋简体”。
注意,如果要显示中文,那么一定要使用中文字体文件,比如“方正粗黑宋简体”,否则会出现文字乱码的现象(编程帮三个字无法显示)。
2) font.Font()
当我们想要在游戏中引入比较炫酷的字体,而系统中又不存在时,我们可以使用另外一种方法,从外部加载字体文件来绘制文本。其语法格式如下:
my_font = pygame.font.Font(filename, size)
参数说明如下:
filename:字符串格式,表示字体文件的所在路径;
size:设置字体的大小。
3) 字体对象方法
Pygame 为处理字体对象提供了一些常用方法;使用最多的方法是绘制文本内容的关键方法,其语法格式如下:
render(text, antialias, color, background=None)
参数说明如下所示:
text:要绘制的文本内容
antialias:布尔值参数,是否是平滑字体(抗锯齿)。
color:设置字体颜色;
background:可选参数,默认为 None,该参数用来设置字体的背景颜色。