学习笔记——pygame最常用的15个模块

Posted 别呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记——pygame最常用的15个模块相关的知识,希望对你有一定的参考价值。

1、Color类

class pygame.Color

Pygame 中用于描述颜色的对象。Color(name) -> Color Color(r, g, b, a) -> Color Color(rgbvalue) -> Color

方法 & 属性

方法描述
pygame.Color.r()获取或设置 Color 对象的红色值
pygame.Color.g()获取或设置 Color 对象的绿色值
pygame.Color.b()获取或设置 Color 对象的蓝色值
pygame.Color.a()获取或设置 Color 对象的 alpha 值
pygame.Color.cmy()获取或设置 Color 对象表示的 CMY 值
pygame.Color.hsva()获取或设置 Color 对象表示的 HSVA 值
pygame.Color.hsla()获取或设置 Color 对象表示的 HSLA 值
pygame.Color.i1i2i3()获取或设置 Color 对象表示的 I1I2I3 值
pygame.Color.normalize()返回 Color 对象的标准化 RGBA 值
pygame.Color.correct_gamma()应用一定的伽马值调整 Color 对象
pygame.Color.set_length()设置 Color 对象的长度(成员数量)
pygame.Color.lerp()返回给定颜色的线性插值
pygame.Color.premul_alpha()返回一个颜色,其中r,g,b组件已经乘以了alpha
pygame.Color.update()设置颜色的元素

(函数详解见官网:https://www.pygame.org/docs/

Pygame 使用 Color 类表示 RGBA 颜色值,每个颜色值的取值范围是 0 ~ 255。允许通过基本的算术运算创造新的颜色值,支持转换为其他颜色空间,例如 HSV 或 HSL,并让你调整单个颜色通道。当没有给出 alpha 的值默认是 255(不透明)。

“RGB值”可以是一个颜色名,一个 html 颜色格式的字符串,一个 16 进制数的字符串,或者一个整型像素值。HTML 格式是 “#rrggbbaa”,其中 “rr”,“gg”,“bb”,“aa” 都是 2 位的 16 进制数。代表 alpha 的 “aa” 是可选的。16 进制数的字符串组成形式为 “0xrrggbbaa”,当然,其中的 “aa” 也是可选的。


2、display模块

pygame.display

Pygame 中用于控制窗口和屏幕显示的模块。

注:为了适应语境,display 在该文档中有时翻译为“显示”,有时翻译为“显示界面”。

函数

函数描述
pygame.display.init()初始化 display 模块
pygame.display.quit()结束 display 模块
pygame.display.get_init()如果 display 模块已经初始化,返回 True
pygame.display.set_mode()初始化一个准备显示的窗口或屏幕
pygame.display.get_surface()获取当前显示的 Surface 对象
pygame.display.flip()更新整个待显示的 Surface 对象到屏幕上
pygame.display.update()更新部分软件界面显示
pygame.display.get_driver()获取 Pygame 显示后端的名字
pygame.display.Info()创建有关显示界面的信息对象
pygame.display.get_wm_info()获取关于当前窗口系统的信息
pygame.display.list_modes()获取全屏模式下可使用的分辨率
pygame.display.mode_ok()为显示模式选择最合适的颜色深度
pygame.display.gl_get_attribute()获取当前显示界面 OpenGL 的属性值
pygame.display.gl_set_attribute()设置当前显示模式的 OpenGL 属性值
pygame.display.get_active()当前显示界面显示在屏幕上时返回 True
pygame.display.iconify()最小化显示的 Surface 对象
pygame.display.toggle_fullscreen()切换全屏模式和窗口模式
pygame.display.set_gamma()修改硬件显示的 gama 坡道
pygame.display.set_gamma_ramp()自定义修改硬件显示的 gama 坡道
pygame.display.set_icon()修改显示窗口的图标
pygame.display.set_caption()设置当前窗口标题
pygame.display.get_caption()获取当前窗口标题
pygame.display.set_palette()为索引显示设置显示调色板
pygame.display.get_num_displays()返回显示的数量
pygame.display.get_window_size()返回窗口或屏幕的大小
pygame.display.get_allow_screensaver()返回屏幕保护程序是否允许运行
pygame.display.set_allow_screensaver()设置屏幕保护程序是否可以运行

(函数详解见官网:https://www.pygame.org/docs/

Pygame 的 display 事实上可以有几种初始化的方式。默认情况下,display 作为一个软件驱动的帧缓冲区。除此之外,你可以使用硬件加速和 OpenGL 支持的特殊模块。这些是通过给 pygame.display.set_mode() 传入 flags 参数来控制的。

Pygame 在任何时间内都只允许有一个显示界面。使用 pygame.display.set_mode() 创建的新显示界面会自动替换掉旧的。如果需要精确控制像素格式或显示分辨率,使用 pygame.display.mode_ok()pygame.display.list_modes(),和 pygame.display.Info() 来查询显示界面相关的信息。

一旦 Surface 对象的显示界面被创建出来,这个模块的函数就只影响当前的显示界面。如果该模块未初始化, Surface 对象也会变为“非法”。如果新的显示模式被设置,当前的 Surface 对象将会自动切换到新的显示界面。

当一个新的显示模式被设置,会在 Pygame 的事件队列中放入几个相关事件。当用于希望关闭程序时,pygame.QUIT 事件会被发送;当显示界面获得和失去焦点时,窗口会得到 pygame.ACTIVEEVENT 事件;如果显示界面设置了 pygame.RESIZABLE 标志,那么当用户调整窗口尺寸时,pygame.VIDEORESIZE 事件会被发送;硬件显示指当接收到 pygame.VIDEOEXPOSE 事件时,将部分需要被重绘的窗口直接绘制到屏幕上。

一些显示环境拥有自动拉伸所有窗口的选项。当该选项被启动时,自动拉伸会扭曲 Pygame 窗口的外观。


3、draw 模块

pygame.draw

Pygame 中绘制图形的模块。

函数

函数描述
pygame.draw.rect()绘制矩形
pygame.draw.polygon()绘制多边形
pygame.draw.circle()根据圆心和半径绘制圆形
pygame.draw.ellipse()根据限定矩形绘制一个椭圆形
pygame.draw.arc()绘制弧线
pygame.draw.line()绘制线段
pygame.draw.lines()绘制多条连续的线段
pygame.draw.aaline()绘制抗锯齿的线段
pygame.draw.aalines()绘制多条连续的线段(抗锯齿)

(函数详解见官网:https://www.pygame.org/docs/

该模块用于在 Surface 对象上绘制一些简单的形状。这些函数将渲染到任何格式的 Surface 对象上。硬件渲染会比普通的软件渲染更耗时。

大部分函数用 width 参数指定图形边框的大小,如果 width = 0 则表示填充整个图形。

所有的绘图函数仅能在 Surface 对象的剪切区域生效。这些函数返回一个 Rect,表示包含实际绘制图形的矩形区域。

大部分函数都有一个 color 参数,传入一个表示 RGB 颜色值的三元组,当然也支持 RGBA 四元组。其中的 A 是 Alpha 的意思,用于控制透明度。不过该模块的函数并不会绘制透明度,而是直接传入到对应 Surface 对象的 pixel alphas 中。color 参数也可以是已经映射到 Surface 对象的像素格式中的整型像素值。

当这些函数在绘制时,必须暂时锁定 Surface 对象。许多连续绘制的函数可以通过一次性锁定直到画完再解锁来提高效率。


4、event模块

pygame.event

用于处理事件与事件队列的 Pygame 模块。

函数

函数描述
pygame.event.pump()让 Pygame 内部自动处理事件
pygame.event.get()从队列中获取事件
pygame.event.poll()从队列中获取一个事件
pygame.event.wait()等待并从队列中获取一个事件
pygame.event.peek()检测某类型事件是否在队列中
pygame.event.clear()从队列中删除所有的事件
pygame.event.event_name()通过 id 获得该事件的字符串名字
pygame.event.set_blocked()控制哪些事件禁止进入队列
pygame.event.set_allowed()控制哪些事件允许进入队列
pygame.event.get_blocked()检测某一类型的事件是否被禁止进入队列
pygame.event.set_grab()控制输入设备与其他应用程序的共享
pygame.event.get_grab()检测程序是否共享输入设备
pygame.event.post()放置一个新的事件到队列中
pygame.event.Event()创建一个新的事件对象
pygame.event.EventType()代表 SDL 事件的 Pygame 对象

(函数详解见官网:https://www.pygame.org/docs/

常规的队列是由 pygame.event.EventType 定义的事件对象的组成,有多种方法来访问里边的事件对象:从简单的检测事件是否存在,到直接从栈中获取它们。

所有事件都有一个类型标识符,这个标识符对应的值定义在 NOEVENTNUMEVENTS 之间(温馨提示:类似于 C 语言的宏定义,明白?)。用户可以自行定义事件,但类型标识符的值应该高于或等于 USEREVENT

获取各种输入设备的状态,推荐你直接通过它们相应的模块(mouse,key 和 joystick)提供的函数访问,而不是通过事件队列;如果你使用此函数,请记住,Pygame 需要通过一些方式与系统的窗口管理器和平台的其他部分进行通信。为了保持 Pygame 和系统同步,你需要调用 pygame.event.pump() 确保实时更新,你将在游戏的每次循环中调用这个函数。

事件队列提供了一些简单的过滤。通过阻止某些事件进入事件队列,可以略微提高游戏的性能(温馨提示:因为这样事件队列的尺寸就会小一些,所以说可以略微提升性能)。使用 pygame.event.set_allowed()pygame.event.set_blocked() 来控制某些事件是否允许进入事件队列。默认所有事件都会进入事件队列。

事件子系统应该在主线程被调用。如果你希望从其他线程中投递事件消息进入事件队列,请使用 fastevent 包。

Joysticks(游戏手柄)只有在设备初始化后才会发送事件。

一个 EventType 事件对象包含一个事件类型标识符和一组成员数据(事件对象不包含方法,只有数据)。EventType 对象从 Python 的事件队列中获得,你也可以使用 pygame.event.Event() 函数创建自定义的新事件。

由于 SDL 的事件队列限制了事件数量的上限(标准的 SDL 1.2 限制为 128),所以当队列已满时,新的事件将会被扔掉。为了防止丢失事件消息,尤其是代表退出的输入事件(因为当用户点击退出按钮没有反应,往往会被认为“死机”了),你的程序必须定期检测事件,并对其进行处理。

为了加快事件队列的处理速度,可以使用 pygame.event.set_blocked() 函数阻止一些我们不关注的事件进入队列中。

所有的 EventType 实例对象都拥有一个事件类型标识符,属性名是 type。你也可以通过事件对象的 dict 属性来完全访问其他属性。所有其他成员属性的值都是通过事件对象的字典来传递。


5、font模块

pygame.font

Pygame 中加载和表示字体的模块。

函数

函数参数
pygame.font.init()初始化字体模块
pygame.font.quit()还原字体模块
pygame.font.get_init()检查字体模块是否被初始化
pygame.font.get_default_font()获得默认字体的文件名
pygame.font.get_fonts()获取所有可使用的字体
pygame.font.match_font()在系统中搜索一种特殊的字体
pygame.font.SysFont()从系统字体库创建一个 Font 对象 类
pygame.font.Font()从一个字体文件创建一个 Font 对象

(函数详解见官网:https://www.pygame.org/docs/

通过使用现有的 Font 对象,可以完成大多数与字体有关的工作。Pygame.font 模块自身仅可以完成常规的初始化以及通过 pygame.font.Font() 创建 Font 对象。

你可以通过使用 pygame.font.SysFont() 函数从系统内加载字体。另外还有其他几个函数可以帮助你搜索系统的字体。

Pygame 配备了内建的默认字体。通过传递 “None” 为文件名访问此字体。

在 pygame 第一次导入之前,当pygame.font 模块确定环境变量 PYGAME_FREETYPE 时使用基于 pygame.ftfontpygame.freetype 模块。Pygame.ftfont 是一个pygame.font 可兼容模块,兼容绝大部分,除开其中某个字体模块单元测试:Pygame.ftfont 并没有基于字体模块的 SDL_ttf 的 UCS-2字符限制,所以对于大于 ‘uFFFF’ 的码点会产生异常。如果 pygame.freetype 是不可使用的,那么 SDL_ttf 字体模块将会被加载用于替代。


6、image模块

pygame.image

用于图像传输的 Pygame 模块。

函数

函数描述
pygame.image.load()从文件加载新图片
pygame.image.save()将图像保存到磁盘上
pygame.image.get_extended()检测是否支持载入扩展的图像格式
pygame.image.tostring()将图像转换为字符串描述
pygame.image.fromstring()将字符串描述转换为图像
pygame.image.frombuffer()创建一个与字符串描述共享数据的 Surface 对象

(函数详解见官网:https://www.pygame.org/docs/

注意:没有 Image 类;当一个图像被成功载入后,将转换为 Surface 对象。Surface 对象允许你在上边画线、设置像素、捕获区域等。

Image 是 Pygame 相当依赖的一个模块,支持载入的图像格式如下:

JPG
PNG
GIF(无动画)
BMP
PCX
TGA(无压缩)
TIF
LBM(和 PBM)
PBM(和 PGM,PPM)
XPM 

支持保存为以下格式:

BMP
TGA
PNG
JPEG 

7、key模块

pygame.key

与键盘相关的 Pygame 模块。

函数

函数描述
pygame.key.get_focused()当窗口获得键盘的输入焦点时返回 True
pygame.key.get_pressed()获取键盘上所有按键的状态
pygame.key.get_mods()检测是否有组合键被按下
pygame.key.set_mods()临时设置某些组合键为被按下状态
pygame.key.set_repeat()控制重复响应持续按下按键的时间
pygame.key.get_repeat()获取重复响应按键的参数
pygame.key.name()获取按键标识符对应的名字 该模块包含处理与键盘操作相关的函数。

(函数详解见官网:https://www.pygame.org/docs/

pygame.KYEDOWN 事件还有个额外的属性 unicode 和 scancode。unicode 代表一个按键翻译后的 Unicode 编码,这包含 shift 按键和组合键。scancode 是扫描码,不同键盘间该值可能不同。不过这对于特殊按键像多媒体键的选择是有用的。

温馨提示:当键盘按下的时候,键盘会发送一个扫描码给系统。扫描码是键盘反馈哪一个按键被按下的方式,不同类型的键盘扫描码不同。再由系统调用相应的函数将其转换为统一的 Unicode 编码。

key 属性的值是一个数字,为了方便使用,Pygame 将这些数字定义为以下这些常量:

Constant      ASCII   描述
---------------------------------
K_BACKSPACE   \\b      退格键(Backspace)
K_TAB         \\t      制表键(Tab)
K_CLEAR               清除键(clear)
K_RETURN      \\r      回车键(Enter)
K_PAUSE               暂停键(Pause)
K_ESCAPE      ^[      退出键(Escape)
K_SPACE               空格键(Space)
K_EXCLAIM     !       感叹号(exclaim)
K_QUOTEDBL    "       双引号(quotedbl)
K_HASH        #       井号(hash)
K_DOLLAR      $       美元符号(dollar)
K_AMPERSAND   &       and 符号(ampersand)
K_QUOTE       ’       单引号(quote)
K_LEFTPAREN   (       左小括号(left parenthesis)
K_RIGHTPAREN  )       右小括号(right parenthesis)
K_ASTERISK    *       星号(asterisk)
K_PLUS        +       加号(plus sign)
K_COMMA       ,       逗号(comma)
K_MINUS       -       减号(minus sign)
K_PERIOD      .       句号(period)
K_SLASH       /       正斜杠(forward slash)
K_0           0       0
K_1           1       1
K_2           2       2
K_3           3       3
K_4           4       4
K_5           5       5
K_6           6       6
K_7           7       7
K_8           8       8
K_9           9       9
K_COLON       :       冒号(colon)
K_SEMICOLON   ;       分号(semicolon)
K_LESS        <       小于号(less-than sign)
K_EQUALS      =       等于号(equals sign)
K_GREATER     >       大于号(greater-than sign)
K_QUESTION    ?       问号(question mark)
K_AT          @       at 符号(at)
K_LEFTBRACKET [       左中括号(left bracket)
K_BACKSLASH   \\       反斜杠(backslash)
K_RIGHTBRACKET ]      右中括号(right racket)
K_CARET       ^       脱字符(caret)
K_UNDERSCORE  _       下划线(underscore)
K_BACKQUOTE   `       重音符(grave)
K_a           a       a
K_b           b       b
K_c           c       c
K_d           d       d
K_e           e       e
K_f           f       f
K_g           g       g
K_h           h       h
K_i           i       i
K_j           j       j
K_k           k       k
K_l           l       l
K_m           m       m
K_n           n       n
K_o           o       o
K_p           p       p
K_q           q       q
K_r           r       r
K_s           s       s
K_t           t       t
K_u           u       u
K_v           v       v
K_w           w       w
K_x           x       x
K_y           y       y
K_z           z       z
K_DELETE              删除键(delete)
K_KP0                 0(小键盘)
K_KP1                 1(小键盘)
K_KP2                 2(小键盘)
K_KP3                 3(小键盘)
K_KP4                 4(小键盘)
K_KP5                 5(小键盘)
K_KP6                 6(小键盘)
K_KP7                 7(小键盘)
K_KP8                 8(小键盘)
K_KP9                 9(小键盘)
K_KP_PERIOD   .       句号(小键盘)
K_KP_DIVIDE   /       除号(小键盘)
K_KP_MULTIPLY *       乘号(小键盘)
K_KP_MINUS    -       减号(小键盘)
K_KP_PLUS     +       加号(小键盘)
K_KP_ENTER    \\r      回车键(小键盘)
K_KP_EQUALS   =       等于号(小键盘)
K_UP                  向上箭头(up arrow)
K_DOWN                向下箭头(down arrow)
K_RIGHT               向右箭头(right arrow)
K_LEFT                向左箭头(left arrow)
K_INSERT              插入符(insert)
K_HOME                Home 键(home)
K_END                 End 键(end)
K_PAGEUP              上一页(page up)
K_PAGEDOWN            下一页(page down)
K_F1                  F1
K_F2                  F2
K_F3                  F3
K_F4                  F4
K_F5                  F5
K_F6                  F6
K_F7                  F7
K_F8                  F8
K_F9                  F9
K_F10                 F10
K_F11                 F11
K_F12                 F12
K_F13                 F13
K_F14                 F14
K_F15                 F15
K_NUMLOCK             数字键盘锁定键(numlock)
K_CAPSLOCK            大写字母锁定键(capslock)
K_SCROLLOCK           滚动锁定键(scrollock)
K_RSHIFT              右边的 shift 键(right shift)
K_LSHIFT              左边的 shift 键(left shift)
K_RCTRL               右边的 ctrl 键(right ctrl)
K_LCTRL               左边的 ctrl 键(left ctrl)
K_RALT                右边的 alt 键(right alt)
K_LALT                左边的 alt 键(left alt)
K_RMETA               右边的元键(right meta)
K_LMETA               左边的元键(left meta)
K_LSUPER              左边的 Window 键(left windows key)
K_RSUPER              右边的 Window 键(right windows key)
K_MODE                模式转换键(mode shift)
K_HELP                帮助键(help)
K_PRINT               打印屏幕键(print screen)
K_SYSREQ              魔术键(sysrq)
K_BREAK               中断键(break)
K_MENU                菜单键(menu)
K_POWER               电源键(power)
K_EURO                欧元符号(euro)

还有一个 mod 属性,用于描述组合键状态。

以下是组合键的常量定义:

Constant      描述
-------------------------
KMOD_NONE     木有同时按下组合键
KMOD_LSHIFT   同时按下左边的 shift 键
KMOD_RSHIFT   同时按下右边的 shift 键
KMOD_SHIFT    同时按下 shift 键
KMOD_LCTRL    同时按下左边的 ctrl 键
KMOD_RCTRL    同时按下右边的 ctrl 键
KMOD_CTRL     同时按下 ctrl 键
KMOD_LALT     同时按下左边的 alt 键
KMOD_RALT     同时按下右边的 alt 键
KMOD_ALT      同时按下 alt 键
KMOD_LMETA    同时按下左边的元键
KMOD_RMETA    同时按下右边的元键
KMOD_META     同时按下元键
KMOD_CAPS     同时按下数字键盘锁定键
KMOD_MODE     同时按下模式转换键

温馨提示:如果 mod & KMOD_CTRL 是真的话,表示用户同时按下了 Ctrl 键。


8、locals模块

pygame.locals :Pygame 定义的常量。

这个模块包含了 Pygame 定义的各种常量。它的内容会被自动放入到 Pygame 模块的名字空间中。你可以使用

from pygame.locals import *将所有的 Pygame 常量导入。

各个常量的详细描述记录在 Pygame 各个模块的相关文档中。比如 pygame.display.set_mode() 方法用到的 HWSURFACE 常量,你就可以在 display 模块的文档中找到详细的说明;事件类型在 event 模块的文档中可以找到;当产生 KEYDOWNKEYUP 事件时,key 属性描述具体哪个按键被按下,该值是以 K_ 开头的常量(MOD_ 开头的常量表示各种组合键被按下),在 key 模块的文档中可以找到;最后,TIME_RESOLUTION 被定义在 time 模块中。


9、mixer模块

pygame.mixer

用于加载和播放声音的pygame模块

函数

函数描述
pygame.mixer.init初始化混音器模块
pygame.mixer.pre_init预设混音器初始化参数
pygame.mixer.quit卸载混音器模块
pygame.mixer.get_init测试混音器是否初始化
pygame.mixer.stop停止播放所有通道
pygame.mixer.pause暂停播放所有通道
pygame.mixer.unpause恢复播放
pygame.mixer.fadeout淡出停止
pygame.mixer.set_num_channels设置播放频道的总数
pygame.mixer.get_num_channels获取播放频道的总数
pygame.mixer.set_reserved预留频道自动使用
pygame.mixer.find_channel找到一个未使用的频道
pygame.mixer.get_busy测试混音器是否正在使用类
pygame.mixer.Sound从文件或缓冲区对象创建新的Sound对象
pygame.mixer.Channel创建一个Channel对象来控制播放

(函数详解见官网:https://www.pygame.org/docs/

此模块包含用于加载 Sound 对象和控制播放的类。混音器模块是可选的,取决于SDL_mixer。您的程序应该在使用它之前 测试 模块是否可用并进行初始化。

混音器模块具有有限数量的声音播放声道。通常程序会告诉 pygame 开始播放音频,它会自动选择一个可用的频道。默认为8个并发通道,但复杂的程序可以更精确地控制通道数量及其使用。

所有声音播放都混合在后台线程中。当您开始播放Sound对象时,它会在声音继续播放时立即返回。单个Sound对象也可以自动播放多次。

混音器还有一个特殊流通道用于音乐播放,可通过 pygame.mixer.music 模块访问。

混音器模块必须像其他 pygame 模块一样进行初始化,但它有一些额外的条件。pygame.mixer.init() 函数采用几个可选参数来控制播放速率和样本大小。Pygame将 默认为合理的值,但pygame无法执行声音重采样,因此应初始化混音器以匹配音频资源的值。

注意:不要使用较少的延迟声音,请使用较小的缓冲区大小。 默认设置为减少某些计算机上发出沙哑声音的可能性。 您可以在 pygame.mixer.init() 或者 pygame.init() 之前 通过调用pygame.mixer.pre_init()预设混合器初始化参数来更改默认缓冲区。 例如:pygame.mixer.pre_init(44100,-16,2,1024)。在pygame 1.8中,默认大小从1024更改为3072。


10、mouse模块

pygame.mouse

Pygame 中与鼠标工作相关的模块。

函数

函数描述
pygame.mouse.get_pressed()获取鼠标按键的情况(是否被按下)
pygame.mouse.get_rel()获取鼠标一系列的活动
pygame.mouse.set_pos()设置鼠标光标的位置
pygame.mouse.set_visible()隐藏或显示鼠标光标
pygame.mouse.get_focused()检查程序界面是否获得鼠标焦点
pygame.mouse.set_cursor()设置鼠标光标在程序内的显示图像
pygame.mouse.get_cursor()获取鼠标光标在程序内的显示图像

(函数详解见官网:https://www.pygame.org/docs/

这些函数可以用于获取目前鼠标设备的情况,也可以改变鼠标在程序内的显示光标。

当设置显示模式之后,事件队列将开始接收鼠标事件。当鼠标按键被按下时会产生 pygame.MOUSEBUTTONDOWN 事件,当鼠标按键被松开时会产生 pygame.MOUSEBUTTONUP 事件。这些事件包含了一个按键属性,用于表示具体由哪个按键所触发。

当鼠标滑轮被滚动时也会产生 pygame.MOUSEBUTTONDOWNpygame.MOUSEBUTTONUP 事件。当鼠标滑轮往上滚动时,按键将会被设置成4;当鼠标滑轮向下滚动时,按键会被设置成 5。

任何时候鼠标移动都会产生一个 pygame.MOUSEMOTION 事件。鼠标的活动被拆分成小而精确的事件。当鼠标运动时,大量的运动事件会被放入相应的队列中等待处理。没有及时清除掉一些运动事件是队列被塞满的主要原因。

如果鼠标光标被隐藏并且输入被当前显示器占用,鼠标会进入虚拟输入模式,在此模式内,鼠标的相关活动不会因为屏幕的边界限制而停止。调用 pygame.mouse.set_visible() 方法和 pygame.event.set_grab() 方法进行设置。


11、Rect对象

class pygame.RectRect

是用于存储矩形坐标的 Pygame 对象。

Rect(left, top, width, height) -> Rect
Rect((left, top), (width, height)) -> Rect
Rect(object) -> Rect

属性 & 方法

函数描述
pygame.Rect.copy()拷贝 Rect 对象
pygame.Rect.move()移动 Rect 对象
pygame.Rect.move_ip()原地移动 Rect 对象
pygame.Rect.inflate()放大和缩小 Rect 对象的尺寸
pygame.Rect.inflate_ip()原地放大和缩小 Rect 对象的尺寸
pygame.Rect.clamp()将一个 Rect 对象移动到另一个 Rect 对象的中心
pygame.Rect.clamp_ip()原地将一个 Rect 对象移动到另一个 Rect 对象的中心
pygame.Rect.clip()获取两个 Rect 对象互相重叠的部分
pygame.Rect.union()将两个 Rect 对象合并
pygame.Rect.union_ip()原地将两个 Rect 对象合并
pygame.Rect.unionall()将多个 Rect 对象合并
pygame.Rect.unionall_ip()原地将多个 Rect 对象合并
pygame.Rect.fit()按照一定的宽高比调整 Rect 对象
pygame.Rect.normalize()翻转 Rect 对象(如果尺寸为负数)
pygame.Rect.contains()检测一个 Rect 对象是否完全包含在该 Rect 对象内
pygame.Rect.collidepoint()检测一个点是否包含在该 Rect 对象内
pygame.Rect.colliderect()检测两个 Rect 对象是否重叠
pygame.Rect.collidelist()检测该 Rect 对象是否与列表中的任何一个矩形有交集
pygame.Rect.collidelistall()检测该 Rect 对象与列表中的每个矩形是否有交集
pygame.Rect.collidedict()检测该 Rect 对象是否与字典中的任何一个矩形有交集
pygame.Rect.collidedictall()检测该 Rect 对象与字典中的每个矩形是否有交集

(函数详解见官网:https://www.pygame.org/docs/

Pygame 通过 Rect 对象存储和操作矩形区域。一个 Rect 对象可以由 lefttopwidthheight 几个值创建。Rect 也可以是由 Pygame 的对象所创建,它们拥有一个属性叫“rect”。

任何需要一个 Rect 对象作为参数的 Pygame 函数都可以使用以上值构造一个 Rect。这样使得作为参数传递的同时创建 Rect 成为可能。

Rect 对象中的大部分方法在修改矩形的位置、尺寸后会返回一个新的 Rect 拷贝,原始的 Rect 对象不会有任何改变。但有些方法比较特殊,它们会“原地”修改 Rect 对象(也就是说它们会改动原始的 Rect 对象),这些方法都会以 “ip” 作为后缀。

对了方便大家移动和对齐,Rect 对象提供以下这些虚拟属性:

x,y
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery
size, width, height
w,h

上边这些属性均可以被赋值,例如:

rect1.right = 10 
rect2.center = (20,30)

给 size,width,height 属性赋值将改变矩形的尺寸;给其它属性赋值将移动矩形。注意:一些属性是整数,一些是整数对。

如果一个 Rect 对象的 width 或 height 非 0,那么将在非 0 测试中返回 True。一些方法返回尺寸为 0 的 Rect 对象,用于表示一个非法的矩形。

Rect 对象的坐标都是整数,size 的值可以是负数,但在大多数情况下被认为是非法的。

还有一些方法可以实现矩形间碰撞检测,大多数 Python 的容器可以用于检索其中的元素与某个 Rect 对象是否碰撞。

Rect 对象覆盖的范围并不包含 right 和 bottom 指定的边缘位置。


13、time模块

pygame.time

Pygame 中用于监控时间的模块。

函数

函数描述
pygame.time.get_ticks()获取以毫秒为单位的时间
pygame.time.wait()暂停程序一段时间
pygame.time.delay()暂停程序一段时间
pygame.time.set_timer()在事件队列上重复创建一个事件
pygame.time.Clock()创建一个对象来帮助跟踪时间

(函数详解见官网:https://www.pygame.org/docs/

Pygame中的时间以毫秒(1/1000秒)表示。大多数平台的时间分辨率有限,大约为10毫秒。该分辨率(以毫秒为单位) 以常量 TIMER_RESLUTION 给出。


14、music模块

pygame.mixer.music

Pygame 中控制音频流的模块。

函数

函数描述
pygame.mixer.music.load()载入一个音乐文件用于播放
pygame.mixer.music.play()开始播放音乐流
pygame.mixer.music.rewind()重新开始播放音乐
pygame.mixer.music.stop()结束音乐播放
pygame.mixer.music.pause()暂停音乐播放
pygame.mixer.music.unpause()恢复音乐播放
pygame.mixer.music.fadeout()淡出的效果结束音乐播放
pygame.mixer.music.set_volume()设置音量
pygame.mixer.music.get_volume()获取音量
pygame.mixer.music.get_busy()检查是否正在播放音乐
pygame.mixer.music.set_pos()设置播放的位置
pygame.mixer.music.get_pos()获取播放的位置
pygame.mixer.music.queue()将一个音乐文件放入队列中,并排在当前播放的音乐之后
pygame.mixer.music.set_endevent()当播放结束时发出一个事件
pygame.mixer.music.get_endevent()获取播放结束时发送的事件

(函数详解见官网:https://www.pygame.org/docs/

Pygame 中播放音乐的模块和 pygame.mixer 模块是密切联系的。使用音乐模块去控制在调音器上的音乐播放。

音乐(music)播放和声音(sound)播放的不同之处在于音乐是流式的,并且绝对不会在一开始就把一个音乐文件全部载入。调音系统在工作刚开始时仅支持单音乐流。

注意:对于 MP3 格式的支持是受限制的。在一些系统上,一种不受支持的格式将会是系统崩溃,例如 Debian Linux。为了游戏的稳定性,建议使用 OGG 进行替代。


15、pygame模块

pygame

Pygame 最顶层的包。

函数 & 属性

函数描述
pygame.init()初始化所有导入的 pygame 模块
pygame.quit()卸载所有导入的 pygame 模块
pygame.error()标准 pygame 异常模块
pygame.get_error()获得当前错误信息
pygame.set_error()设置当前错误信息
pygame.get_sdl_version()获得 SDL 的版本号
pygame.get_sdl_byteorder()获得 SDL 的字节顺序
pygame.register_quit()注册一个函数,这个函数将在 pygame 退出时被调用
pygame.encode_string()对 unicode 或字节对象编码
pygame.encode_file_path()将 unicode 或字节对象编码为文件系统路径

(函数详解见官网:https://www.pygame.org/docs/
pygame 包是可供使用的最顶层的包。Pygame 被分成许多子模块,但是并不会影响程序使用 Pygame。

为了方便,在 pygame 中绝大多数的顶级变量被放入名为“pygame.locals”的模块中。意思是说这些变量可通过以下方式导入:

import pygame 
from pygame.locals import *

当你导入 pygame 后,所有可用的 pygame 子模块都将自动被导入。需要注意的是,一些 pygame 模块是“可选的”,并且可能无法使用。以防万一,Pygame 将提供了一个占位符对象替代原来的模块,这个对象可用来测试某些功能(变量)是否可用。




参考文章:
Pygame官网:https://www.pygame.org/docs/
pygame中文手册pdf版本:https://yihang.cowtransfer.com/s/7b027011c9cd4a

以上是关于学习笔记——pygame最常用的15个模块的主要内容,如果未能解决你的问题,请参考以下文章

python学习笔记05:贪吃蛇游戏代码

python学习笔记:常用模块

python学习笔记:常用模块

14天学习训练营之 初识Pygame

Python 常用模块学习

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务