pygame

Pygame

对象(总体)

surface

方法 说明
fill(color,Rect)
blit(surface对象,绘制到的区域,surface中用于绘制的部分区域) ( ,[(x,y),Rect],Rect)
get_width()
get_height()
get_size() return (w,h)
get_rect() return Rect
subsurface(Rect) 创建子Surface

pygame.display(窗口图层)

方法 说明
set_mode(size,flags,depth) size:(x,y) flags:创建模式,[pygame.FULLSCREEN(全屏),pygame.HWSURFACE(硬件加速窗口图层),pygame.OPENGL,pygame.RESIZABLE(可缩放窗口图层),pygame.DOUBLEBUF(双缓冲区窗口),pygame.NOFRAME(无边框窗口)],depth:颜色位深
set_caption(title)
set_icon(Surface)
flip() 双缓冲区模式更新整个图层
update(Rect) 普通模式,可选区域

pygame.image

方法 说明
load()
convert_alpha() 将Surface对象转换为带alpha通道的格式(可能更快)
scale(size) 返回一个尺寸为size的新Surface
rotate(angle) 返回一个旋转后的Surface,正逆负顺
rotozoom(angle,(x_rate,y_rate)) 返回旋转且按比例放缩的Surface

pygame.draw

方法 说明
line() surface:要在其上绘制线条的Surface对象。 color:线条的颜色,通常是一个RGB元组,例如(255, 0, 0)表示红色。 start_pos:线条的起始位置,是一个元组(x, y)end_pos:线条的结束位置,也是一个元组(x, y)width(可选):线条的宽度,默认为1。
lines() surface:要在其上绘制线条的Surface对象。 color:线条的颜色,通常是一个RGB元组。 closed:一个布尔值,指示是否将线条的起点和终点相连以形成一个闭合形状。 pointlist:一个点的列表,每个点都是一个(x, y)元组,表示线条的顶点。 width(可选):线条的宽度,默认为1
rect() surface:要在其上绘制矩形的Surface对象。 color:矩形的颜色,通常是一个RGB元组,例如(255, 0, 0)表示红色。 rect:一个pygame.Rect对象,表示要绘制的矩形的位置和尺寸。 width(可选):矩形边框的宽度,默认为0,表示填充矩形。如果大于0,则表示绘制矩形边框的宽度
polygon() surface:要在其上绘制多边形的Surface对象。 color:多边形的颜色,通常是一个RGB元组,例如(255, 0, 0)表示红色。 pointlist:一个点的列表,每个点都是一个(x, y)元组,表示多边形的顶点。这些点应该按照顺序连接,最后一个点会自动与第一个点相连,以形成一个闭合的多边形。 width(可选):多边形边框的宽度,默认为0,表示填充多边形。如果大于0,则表示绘制多边形边框的宽度。
circle() surface:要在其上绘制圆形的Surface对象。 color:圆形的颜色,通常是一个RGB元组,例如(255, 0, 0)表示红色。 pos:圆心的位置,是一个(x, y)元组。 radius:圆的半径。 width(可选):圆形边框的宽度,默认为0,表示填充圆形。如果大于0,则表示绘制圆形边框的宽度。
ellipse() surface:要在其上绘制椭圆的Surface对象。 color:椭圆的颜色,通常是一个RGB元组,例如(255, 0, 0)表示红色。 rect:一个pygame.Rect对象,表示椭圆外接矩形的位置和尺寸。 width(可选):椭圆边框的宽度,默认为0,表示填充椭圆。如果大于0,则表示绘制椭圆边框的宽度。
arc() surface:要在其上绘制圆弧的Surface对象。 color:圆弧的颜色,通常是一个RGB元组,例如(255, 0, 0)表示红色。 rect:一个pygame.Rect对象,表示圆弧外接矩形的位置和尺寸。 start_angle:圆弧的起始角度,以度为单位,0度表示正右方,顺时针方向增加。 stop_angle:圆弧的终止角度,以度为单位。 width(可选):圆弧边框的宽度,默认为1,表示绘制圆弧边框的宽度。如果设置为0,则不会绘制圆弧,但可以用来填充圆弧所对应的扇形区域。

pygame.font

方法 说明
SysFont() 返回字体对象 name:系统字体的名称。如果指定为None,pygame将使用默认的系统字体。 size:字体的大小,以像素为单位。 bold(可选):是否启用粗体效果,默认为Falseitalic(可选):是否启用斜体效果,默认为False
Font() 返回字体对象 filename:字体文件的路径,它可以是TrueType字体(.ttf)或OpenType字体(.otf)文件。 size:字体的大小,以像素为单位。

font对象

字体对象方法 说明
set_bold(bool) 是否加粗
set_italic(bool) 是否倾斜
set_underlines() 是否添加下划线
render() 返回一个Surface对象, text:要渲染的文本字符串。 antialias:一个布尔值,指定是否启用抗锯齿效果。如果设置为True,则文本边缘会更加平滑。 color:文本的颜色,通常是一个RGB元组,例如(255, 255, 255)表示白色。 background(可选):文本的背景色,也是一个RGB元组。如果指定了背景色,渲染出的Surface对象将包含这个背景色

pygame.time

方法 说明
get_tick 返回运行时间
wait() 等待一段时间(毫秒)
delay()
set_timer() 设置一个计时器,定时触发事件。 eventid:一个用户定义的事件ID,它必须是一个正整数。这个ID用于标识定时器事件,以便在事件队列中识别它。 milliseconds:定时器触发的时间间隔,以毫秒为单位。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#set_timer()示例
import pygame
import sys

pygame.init()

# 创建一个窗口
screen = pygame.display.set_mode((640, 480))

# 设置定时器事件ID和时间间隔
TIMER_EVENT = pygame.USEREVENT + 1
TIME_INTERVAL = 1000 # 1秒

# 创建定时器事件
pygame.time.set_timer(TIMER_EVENT, TIME_INTERVAL)

# 游戏循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == TIMER_EVENT:
# 处理定时器事件
print("定时器事件触发!")

# 更新屏幕显示
pygame.display.flip()

pygame.quit()
sys.exit()

Clock() 创建并返回Clock对象

Clock对象

clock对象方法 说明
tick(FPS) 设置FPS
get_fps()

pygame.event

类属性 说明
type 类型标识符
dict 专有属性字典

pygame.event.get()获取所有事件对象组成的列表。

事件对象类型标识符

类型标识符 专有属性 解释
pygame.QUIT 退出事件,当用户尝试关闭窗口时触发
pygame.ACTIVEEVENT gain, state 活动事件,与窗口的激活状态有关
pygame.KEYDOWN unicode, key, mod 键盘按键按下事件,包含按下的Unicode字符、按键代码和修饰键状态
pygame.KEYUP key, mod 键盘按键释放事件,包含按键代码和修饰键状态
pygame.MOUSEMOTION pos, rel, buttons 鼠标移动事件,包含当前位置、相对移动和按下的按钮状态
pygame.MOUSEBUTTONDOWN pos, button 鼠标按钮按下事件,包含按下时的位置和按钮编号
pygame.MOUSEBUTTONUP pos, button 鼠标按钮释放事件,包含释放时的位置和按钮编号
pygame.JOYAXISMOTION joy, axis, value 游戏手柄轴运动事件,包含手柄ID、轴编号和轴值
pygame.JOYBALLMOTION joy, ball, rel 游戏手柄球运动事件,包含手柄ID、球编号和相对运动值
pygame.JOYHATMOTION joy, hat, value 游戏手柄帽子(方向帽)运动事件,包含手柄ID、帽子编号和方向值
pygame.JOYBUTTONDOWN joy, button 游戏手柄按钮按下事件,包含手柄ID和按钮编号
pygame.JOYBUTTONUP joy, button 游戏手柄按钮释放事件,包含手柄ID和按钮编号
pygame.VIDEORESIZE size, w, h 视频窗口大小改变事件,包含新的窗口大小(宽高对)和单独的宽高值
pygame.VIDEOEXPOSE 视频窗口暴露事件,通常不需要用户处理
pygame.USEREVENT 自定义属性 用户自定义事件,类型标识符值应大于等于pygame.USEREVENT,用户可自定义属性和值

解释说明

  • gain, state(ACTIVEEVENT):gain属性表示窗口是否获得焦点,state属性表示窗口的激活状态(如最小化、最大化等)。
  • unicode, key, mod(KEYDOWN/KEYUP):unicode属性包含按下的Unicode字符(对于非特殊键),key属性是按键的pygame常量代码,mod属性表示按下时是否同时按下了修饰键(如Ctrl、Shift等)。
  • pos, rel, buttons(MOUSEMOTION):pos属性表示鼠标的当前位置(窗口坐标系),rel属性表示自上次事件以来的相对移动,buttons属性表示当前按下的鼠标按钮状态。
  • pos, button(MOUSEBUTTONDOWN/MOUSEBUTTONUP):pos属性表示事件触发时的鼠标位置,button属性是按下或释放的按钮编号。
  • joy, axis, value(JOYAXISMOTION):joy属性表示触发事件的手柄ID,axis属性是轴的编号,value属性是轴的位置值。
  • size, w, h(VIDEORESIZE):size属性是一个包含新窗口宽度和高度的元组,wh属性分别是新的窗口宽度和高度。
  • 自定义属性(USEREVENT):用户自定义事件可以包含任何自定义的属性名和值,用于在程序中传递自定义信息。

窗口事件

事件类型 事件描述 详细解释
pygame.QUIT 用户尝试关闭窗口时触发的事件 当用户点击窗口的关闭按钮或按下特定的关闭快捷键时,pygame会触发QUIT事件。在事件循环中捕获此事件,可以安全地退出游戏或应用程序。
pygame.WINDOWEVENT 与窗口相关的事件,如窗口创建、销毁、移动、调整大小等 WINDOWEVENT是一个通用的事件类型,用于表示与窗口相关的各种事件。它包含多个子类型,如WINDOWEVENT_CLOSE(窗口关闭)、WINDOWEVENT_RESIZED(窗口大小调整)、WINDOWEVENT_MOVED(窗口移动)等。通过检查WINDOWEVENT的事件子类型,可以对窗口的不同状态变化做出响应。
pygame.VIDEORESIZE 窗口大小改变时触发的事件 当用户调整窗口大小时,pygame会触发VIDEORESIZE事件。此事件包含新的窗口尺寸信息,允许程序根据新的窗口大小调整渲染区域或游戏逻辑。

详细解释补充

  1. pygame.QUIT

    • 背景:在pygame程序中,用户可能随时想要退出游戏或应用程序。
    • 过程:当用户点击窗口的关闭按钮(通常位于窗口的右上角)或按下系统指定的关闭快捷键(如Alt+F4)时,操作系统会通知pygame窗口即将关闭。
    • 影响:pygame捕捉到QUIT事件后,程序应该执行清理操作(如释放资源、保存游戏状态等),并通过调用pygame.quit()sys.exit()安全地退出。
  2. pygame.WINDOWEVENT

    • 背景:窗口是pygame程序与用户交互的主要界面,窗口的状态变化(如移动、调整大小、获得/失去焦点等)会影响用户的游戏体验。
    • 过程:当窗口发生状态变化时,pygame会将这些变化封装为WINDOWEVENT事件,并放入事件队列中。程序通过检查事件队列中的事件,可以获取窗口的最新状态。
    • 影响:根据WINDOWEVENT的事件子类型,程序可以做出相应的响应。例如,如果窗口被关闭,程序可以执行退出操作;如果窗口大小被调整,程序可以重新调整渲染区域以适应新的窗口尺寸。
  3. pygame.VIDEORESIZE

    • 背景:用户可能希望根据自己的屏幕分辨率或偏好调整pygame窗口的大小。
    • 过程:当用户拖动窗口的边缘以改变其大小时,pygame会检测到这一变化,并触发VIDEORESIZE事件。此事件包含新的窗口宽度和高度信息。
    • 影响:程序捕捉到VIDEORESIZE事件后,可以根据新的窗口尺寸重新调整游戏画面或渲染区域的大小,以确保游戏内容能够正确地显示在窗口中。这有助于提升用户体验和游戏的可访问性。

键盘事件

事件类型 事件描述 详细解释
pygame.KEYDOWN 键盘按键按下事件 当用户按下键盘上的任何按键时,pygame会触发KEYDOWN事件。此事件包含多个属性,如unicode(按键的Unicode字符,但通常不推荐使用,因为它依赖于平台)、key(按键的常量名称,是一个整数值,pygame提供了如K_aK_LEFT等常量来表示不同的按键)、mod(按键修饰符的组合值,用于表示是否同时按下了如Ctrl、Shift、Alt等修饰键)。通过检查这些属性,程序可以识别用户按下了哪个按键,并根据需要做出响应。
pygame.KEYUP 键盘按键释放事件 当用户释放之前按下的键盘按键时,pygame会触发KEYUP事件。与KEYDOWN事件类似,KEYUP事件也包含keymod属性,但通常不包含unicode属性,因为释放按键时不需要知道按键对应的Unicode字符。通过捕获KEYUP事件,程序可以知道用户何时停止了按键操作,这对于实现如长按检测等功能非常有用。

详细解释补充

  • pygame.KEYDOWN事件

    • 当用户按下键盘上的按键时,pygame会将该事件放入事件队列中。程序通过遍历事件队列并检查事件类型,可以识别出KEYDOWN事件。
    • key属性是识别具体按键的关键。pygame提供了一系列的常量来表示不同的按键,如字母键(K_aK_b等)、方向键(K_LEFTK_RIGHT等)和功能键(如K_ESCAPE)。
    • mod属性用于表示按键时是否同时按下了修饰键。pygame提供了如KMOD_CTRLKMOD_SHIFTKMOD_ALT等常量来表示不同的修饰键。通过检查mod属性与这些常量的按位与运算结果,可以确定是否按下了特定的修饰键组合。
  • pygame.KEYUP事件

    • 与KEYDOWN事件相对应,当用户释放按键时,pygame会触发KEYUP事件。
    • 通过捕获KEYUP事件,程序可以知道用户何时停止了按键操作。这对于实现如连续射击、长按加速等功能至关重要,因为它允许程序在用户停止按键时停止相应的操作。
    • keymod属性的作用与KEYDOWN事件中相同,分别用于表示释放的按键和同时按下的修饰键组合。
key属性值
key属性值 按键名称 描述
K_BACKSPACE Backspace 退格键,用于删除光标前的字符
K_TAB Tab 制表键,用于在不同字段间移动光标
K_RETURN Enter 回车键,用于确认输入或换行
K_ESCAPE Escape 退出键,常用于取消操作或退出程序
K_SPACE Space 空格键
K_LEFT Left Arrow 向左键
K_RIGHT Right Arrow 向右键
K_UP Up Arrow 向上键
K_DOWN Down Arrow 向下键
K_aK_z A 到 Z 英文字母键
K_0K_9 0 到 9 数字键
K_KP0K_KP9 Keypad 0 到 9 小键盘上的数字键
K_F1K_F12 F1 到 F12 功能键,常用于快捷操作
K_LSHIFT, K_RSHIFT Left Shift, Right Shift 左右Shift键,用于输入大写字母或特殊符号
K_LCTRL, K_RCTRL Left Ctrl, Right Ctrl 左右Ctrl键,常用于组合快捷键
K_LALT, K_RALT Left Alt, Right Alt 左右Alt键,常用于组合快捷键
K_DELETE Delete 删除键,用于删除选中的内容

key属性是在pygame的KEYDOWN和KEYUP事件中使用的,用于标识被按下或释放的按键。当这些事件发生时,可以通过检查事件的key属性来确定是哪个按键被操作,并据此编写相应的响应逻辑。

在pygame中处理键盘事件时,通常会结合使用pygame.key.get_pressed()函数和事件监听来获取按键状态。pygame.key.get_pressed()函数会返回一个序列,表示当前所有按键的状态(按下为True,未按下为False),而事件监听则允许程序响应按键的按下和释放动作。

鼠标事件

以下是一个关于pygame鼠标事件的详细解释表格:

事件代码 事件描述 详细解释
pygame.
MOUSEMOTION
鼠标移动事件 当鼠标在窗口中移动时触发。事件包含pos(鼠标当前坐标值,相对于窗口左上角的(x, y)坐标)、rel(鼠标相对于上一次事件的移动距离,也是一个(x, y)坐标值)和buttons(鼠标按钮状态,一个包含三个数字的元组,分别代表左键、中键(滚轮)、右键的状态,状态值为0或1,表示按钮是否按下)属性。通过处理这个事件,可以实现如跟随鼠标移动的效果、实时显示鼠标坐标等功能。
pygame.
MOUSEBUTTONDOWN
鼠标按键按下事件 当用户按下鼠标触发。事件包含pos(鼠标当前坐标值)和button(被按下的鼠标按钮编号,左键为1,中键为2,右键为3,向上滚动滚轮为4,向下滚动滚轮为5)属性。
pygame.
MOUSEBUTTONUP
鼠标按键释放事件 当用户释放鼠标触发。事件包含pos(鼠标当前坐标值)和button(被释放的鼠标按钮编号,与MOUSEBUTTONDOWN事件中的button属性相同)属性。

pygame.mouse.get_pressed()用于获取当前所有鼠标按键的状态,返回一个由3个0/1组成的元组

pygame.mouse.get_pos()用于获取当前鼠标的位置。返回光标坐标。

自定义事件

方法 说明
Event(type,dict) type:这是一个整数或者pygame中定义的事件类型常量,比如pygame.QUITpygame.KEYDOWN等。它指定了新创建事件的类型。 dict:这是一个字典,包含了事件的属性。不同的事件类型有不同的属性集。比如,对于pygame.KEYDOWN事件,你可以包含keymod属性;对于pygame.MOUSEBUTTONDOWN事件,你可以包含posbutton属性。该值应高于pygame.USEREVENT
post(event) 将自定义事件加入事件队列

pygame.sprite

Sprite类

Sprite类属性 说明
image
rect
mask
Sprite类方法 说明
update() 更新状态
add() 将该精灵添加至精灵组
remove() 从精灵组中删除精灵
kill() 将精灵从其属于的所有精灵组删除
alive() 判断该精灵是否属于任意精灵组
groups() 返回该精灵所属的所有精灵组组成的列表

Group类

Group类方法 说明
update() 更新组内所有精灵的状态
add() 将指定精灵拉进来
remove() 将指定精灵踢出去
empty() 清空
sprites() 用列表返回所有精灵
has() 判断组内有没有某精灵
draw() 绘制全部精灵

碰撞检测

方法 说明
spritecollide(sprite,group,dokill,collided) 检查源精灵是否与另一个精灵组中的任何精灵发生碰撞。如果发生碰撞,spritecollide() 会返回一个包含所有与源精灵碰撞的精灵的列表
sprite:要进行碰撞检测的源精灵。
group:要与之进行碰撞检测的精灵组。
dokill:一个布尔值,如果设置为True,则在发生碰撞时,会从精灵组中删除碰撞的精灵。 collided:一个可选的碰撞回调函数。collide_rect()矩形检测、collide_circle圆形检测、collidemask()像素蒙版检测。
spritecollideany(sprite,group,collided) 返回第一个与源精灵碰撞的精灵
groupcollide() 返回一个字典,其中包含了所有发生碰撞的精灵对。
group1:第一个要进行碰撞检测的精灵组。
group2:第二个要进行碰撞检测的精灵组。
dokill1:一个布尔值,如果设置为 True,则在发生碰撞时,会从 group1 中删除碰撞的精灵。
dokill2:一个布尔值,如果设置为 True,则在发生碰撞时,会从 group2 中删除碰撞的精灵。
collided:一个可选的碰撞回调函数,用于自定义碰撞检测的逻辑。如果提供了这个函数,它将被用来代替默认的碰撞检测逻辑

pygame.mixer

创建音效对象

pygame.mixer.Sound(filename)

音效对象方法

方法 说明
play() 播放音效

Rect

属性 说明
x
y
left
right
top
bottom
width(简写w)
height(简写h)
size (w,h)
centerx
centery
center
topleft,bottomleft
topright,bottomright
midtop,,midbottom,midleft,midright
方法 说明
move(x,y) 返回新Rect,不改旧Rect
move_ip(x,y) 无返回值,改旧Rect
inflate(x,y) 宽+x,高+y,不改旧Rect
inflate_ip() 改旧Rect
contains(Rect) 检测调用此方法的Rect是否包含参数Rect, return bool
collidepoint(x,y) 检测(x,y)是否在Rect内,return bool
colliderect(Rect) 检测两Rect是否重叠,return bool
collidelist([Rect1,Rect2,…]) 检测Rect是否与列表中Rect重叠,返回首个重叠的Rect的索引,否则返回-1
collidelistall([Rect1,Rect2,…]) 若碰撞,返回列表

pygame
https://fiy-pc.github.io/2024/10/29/pygame/
作者
FIY-pc
发布于
2024年10月29日
许可协议