pygame入门基础知识(二)

简介: > 6、pygame模块time时间控制:pygame.time 时间控制模块,其主要功能是管理时间和游戏帧数率(即 FPS)

> 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,该参数用来设置字体的背景颜色。

相关文章
|
5月前
|
Python 容器
Pygame入门 2022 (4) 使用精灵类重构
Pygame入门 2022 (4) 使用精灵类重构
|
5月前
|
Python
Pygame入门 2022 (2)
Pygame入门 2022 (2)
Pygame入门 2022 (2)
|
5月前
|
Python
Pygame入门 2022 (3)
Pygame入门 2022 (3)
|
5月前
|
开发工具 图形学 Python
Pygame入门 2022 (1)
Pygame入门 2022 (1)
|
程序员 Python
Pygame第1-1课:入门
Pygame第1-1课:入门
122 0
|
编解码 Python
14天学习训练营之 入门Pygame
14天学习训练营之 入门Pygame
113 0
14天学习训练营之 入门Pygame
|
开发框架 Python
Python游戏开发入门:pygame实例运动的小球-5
Python游戏开发入门:pygame实例运动的小球-5
150 0
Python游戏开发入门:pygame实例运动的小球-5
|
Python
Python游戏开发入门:pygame色彩与绘图机制-4
Python游戏开发入门:pygame色彩与绘图机制-4
268 0
Python游戏开发入门:pygame色彩与绘图机制-4
|
Python
Python游戏开发入门:pygame事件处理机制-3
Python游戏开发入门:pygame事件处理机制-3
361 0
Python游戏开发入门:pygame事件处理机制-3
|
Python
Python游戏开发入门:pygame屏幕绘制机制-2
Python游戏开发入门:pygame屏幕绘制机制-2
266 0