**pygame.draw.line()**绘制线段。

line(Surface, color, start_pos, end_pos, width=1) -> Rect

在 Surface  对象上绘制一条线段。两端以方形结束。

**pygame.draw.lines()**绘制多条连续的线段。

lines(Surface, color, closed, pointlist, width=1) -> Rect

在 Surface  对象上绘制一系列连续的线段。pointlist 参数是一系列短点。如果 closed 参数设置为 True,则绘制首尾相连。

**pygame.draw.aaline()**绘制抗锯齿的线段。

aaline(Surface, color, startpos, endpos, blend=1) -> Rect

在 Surface  对象上绘制一条抗锯齿的线段。blend 参数指定是否通过绘制混合背景的阴影来实现抗锯齿功能。该函数的结束位置允许使用浮点数。

**pygame.draw.aalines()**绘制多条连续的线段(抗锯齿)。

aalines(Surface, color, closed, pointlist, blend=1) -> Rect

在 Surface  对象上绘制一系列连续的线段(抗锯齿)。如果 closed 参数为 True,则首尾相连。blend 参数指定是否通过绘制混合背景的阴影来实现抗锯齿功能。该函数的结束位置允许使用浮点数。

image

# 公众号:一行数据

import pygame

import sys

import math

from pygame.locals import *

pygame.init()

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

GREEN = (0, 255, 0)

RED = (255, 0, 0)

BLUE = (0, 0, 255)

points = [(200, 175), (300, 125), (400, 175), (450, 125), (450, 225), (400, 175), (300, 225)]

size = width, height = 640, 1000

screen = pygame.display.set_mode(size)

pygame.display.set_caption(“Python Demo”)

clock = pygame.time.Clock()

while True:

for event in pygame.event.get():

if event.type == QUIT:

sys.exit()

screen.fill(WHITE)

pygame.draw.rect(screen, BLACK, (50, 30, 150, 50), 0)

pygame.draw.rect(screen, BLACK, (250, 30, 150, 50), 1)

pygame.draw.rect(screen, BLACK, (450, 30, 150, 50), 10)

pygame.draw.polygon(screen, GREEN, points, 0)

pygame.draw.circle(screen, RED, (320, 400), 25, 1)

pygame.draw.circle(screen, GREEN, (320, 400), 75, 1)

pygame.draw.circle(screen, BLUE, (320, 400), 125, 1)

pygame.draw.ellipse(screen, BLACK, (100, 600, 440, 100), 1)

pygame.draw.ellipse(screen, BLACK, (220, 550, 200, 200), 1)

pygame.draw.arc(screen, BLACK, (100, 800, 440, 100), 0, math.pi, 1)

pygame.draw.arc(screen, BLACK, (220, 750, 200, 200), math.pi, math.pi * 2, 1)

pygame.display.flip()

clock.tick(10)

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 对象 Pygame 通过事件队列控制所有的时间消息。该模块中的程序将帮你管理事件队列。输入队列很大程度依赖于 pygame 的 display 模块。如果 display 没有被初始化,显示模式没有被设置,那么事件队列就还没有开始真正工作。

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

所有事件都有一个类型标识符,这个标识符对应的值定义在 NOEVENT 到 NUMEVENTS 之间(温馨提示:类似于 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.fontPygame 中加载和表示字体的模块。

函数

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 对象 字体模块可以在一个新的 Surface 对象上表示 TrueType 字体。它接受所有 UCS-2 字符(‘u0001’ 到 ‘uFFFF’)。此模块为可选择模块,并且依赖于 SDL_ttf。在使用之前,你需要先测试该模块是否可用,而且对其进行初始化。

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

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

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

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

常用函数详解类 class pygame.font.Font 从一个字体文件创建一个 Font 对象。

Font(filename, size) -> Font

Font(object, size) -> Font

方法

pygame.font.Font.render()  ——  在一个新 Surface 对象上绘制文本 pygame.font.Font.size()  ——  确定多大的空间用于表示文本 pygame.font.Font.set_underline()  ——  控制文本是否用下划线渲染 pygame.font.Font.get_underline()  ——  检查文本是否绘制下划线 pygame.font.Font.set_bold()  ——  启动粗体字渲染 pygame.font.Font.get_bold()  ——  检查文本是否使用粗体渲染 pygame.font.Font.set_italic()  ——  启动斜体字渲染 pygame.font.Font.metrics()  ——  获取字符串参数每个字符的参数 pygame.font.Font.get_italic()  ——  检查文本是否使用斜体渲染 pygame.font.Font.get_linesize()  ——  获取字体文本的行高 pygame.font.Font.get_height()  ——  获取字体的高度 pygame.font.Font.get_ascent()  ——  获取字体顶端到基准线的距离 pygame.font.Font.get_descent()  ——  获取字体底端到基准线的距离 根据提供的文件名或者 python 文件对象加载一个新的字体。字体的高度是以像素为单位。如果文件名是 “None”,则加载 Pygame 的默认字体。如果一个字体无法由给定的参数加载,将会产生一个异常。一旦字体已经创建完毕,那么字体的尺寸将不能修改。

字体对象主要被用于在新 Surface 对象中渲染文本。文本可以渲染为仿真的粗体或者斜体特征,但最好是加载的字体本身就带有粗体或者斜体字形。可以用普通字符串或者 Unicode 编码字符来渲染文本。

方法详解

pygame.font.Font.render() 在一个新 Surface 对象上绘制文本。

render(text, antialias, color, background=None) -> Surface

该函数创建一个新的 Surface 对象,并在上边渲染指定的文本。Pygame 没有提供直接的方式在一个现有的 Surface 对象上绘制文本,取而代之的方法是:使用 Font.render() 函数创建一个渲染了文本的图像(Surface 对象),然后将这个图像绘制到目标 Surface 对象上。

仅支持渲染一行文本:“换行”字符不会被渲染。空字符(‘x00’)被渲染将产生一个 TypeError 错误。Unicode 和 char(字节)字符串都可以被接受。对于 Unicode 字符串,仅 UCS-2 字符范围(‘u0001’ 到 ‘uFFFF’)被认为是有效的。任何编码值更大字符的字符会产生一个 UnicodeError 的错误;对于 char 字符串,默认的是使用 LATIN1 编码。color 参数决定的是文本的颜色(例如:(0, 0, 255) 表示蓝色)。可选参数 background 决定了文本的背景颜色。如果没有传递 background 参数,则对应区域内表示的文本背景将会被设置为透明。

返回的 Surface 对象将保持表示文本所需要的尺寸(与 Font.size() 所返回的尺寸相同)。如果将一个空字符串渲染为文本,将会返回一个空白 Surface 对象,它仅有一个像素点的宽度,但高度与字体高度一样。

由于取决于文本背景的类型和抗锯齿功能的使用,该函数将会返回不同类型的 Surface 对象。出于性能上的考虑,了解何种类型的图像会被使用是很有帮助的:如果抗锯齿功能没有被使用,返回的图像将采用二元调色的 8 位图像。此时如果背景是透明的,只设置一个 colorkey 来实现;抗锯齿图像会被渲染为 24 位 RGB 图像。此时如果背景是透明的,每个像素都将包含一个 alpha 通道。

优化:如果你已知文本最终将绘制在一个纯色的背景上,那么文本是抗锯齿的,你可以通过指定文本的背景色来提高性能(将文本背景色设置目标 Surface 对象的颜色)。使用这个技巧,你只需用一个 colorkey 即可保持透明信息,而不需要设置每个像素的 alpha 通道值(这样效率会低很多)。

如果你尝试渲染 ‘\n’,通常是显示为一个矩形(未知字符)。因此,你需要自己想办法处理换行。

字体渲染并不是线程安全的行为:在任何时候仅有一个线程可以渲染文本。

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 对象 image 模块包含了加载和保存图像的函数,同时转换为 Surface 对象支持的格式。

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

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

JPG PNG GIF(无动画) BMP PCX TGA(无压缩) TIF LBM(和 PBM) PBM(和 PGM,PPM) XPM 支持保存为以下格式: BMP TGA PNG JPEG 其中,保存为 PNG 和 JPEG 格式是 Pygame 1.8 新增加的。

**函数详解****pygame.image.load()**从文件加载新图片。

load(filename) -> Surface

load(fileobj, namehint=””) -> Surface

从文件加载一张图片,你可以传递一个文件路径或一个 Python 的文件对象。

Pygame 将自动判断图像的格式(比如 GIF 或位图)并创建一个新的 Surface  对象。有时它可能需要知道文件的后缀名(比如 GIF 图像应该以 “.gif” 为后缀)。如果你传入原始文件对象,你需要传入它对应的文件名到 namehint 参数中。

返回的 Surface  对象将包含与源文件相同的颜色格式,colorkey 和 alpha 透明度通道。你通常需要调用 Surface.convert() 函数进行转换,这样可以使得在屏幕上绘制的速度更快。

对于含有 alpha 通道的图片(支持部分位置透明,像 PNG 图像),需要使用 Surface.convert_alpha() 函数进行转换。

在某些环境下,Pygame 可能无法支持上述所有的图像格式,但至少无压缩的 BMP 格式是支持的。你可以调用 pygame.image.get_extended() 函数,如果返回 True,说明可以加载上述的格式(包含 PNG,JPG 和 GIF)。

你应该使用 os.path.join() 提高代码的兼容性:

asurf = pygame.image.load(os.path.join(‘data’, ‘Python.png’))

**pygame.image.save()**将图像保存到磁盘上。

save(Surface, filename) -> None

该函数将保存 Surface  对象到磁盘上,支持存储为 BMP,TGA,PNG 或 JPEG 格式的图像。如果 filename 没有指定后缀名,那么默认是保存为 TGA 格式。TGA 和 BMP 格式是无压缩的文件。

保存为 PNG 和 JPEG 格式是 Pygame 1.8 新增的。

**pygame.image.get_extended()**检测是否支持载入扩展的图像格式。

get_extended() -> bool

如果 Pygame 支持上述所有的扩展图像格式,则返回 True。

**pygame.image.tostring()**将图像转换为字符串描述。

tostring(Surface, format, flipped=False) -> string

将图像转换为一个字符串描述,可以被 Python 的其他图像模块通过 “fromstring” 转换回图像。一些 Python 图像模块喜欢“自下而上”的存储格式(例如 PyOpenGL)。如果 flipped 参数为 True,那么字符串将会垂直翻转以适用这类图像模块。

format 参数可以是下表中任何一个字符串。注意:只有 8 位的 Surface  对象可以使用 “P” 格式。其他格式可以用于任何 Surface  对象上。

**pygame.image.fromstring()**将字符串描述转换为图像。

fromstring(string, size, format, flipped=False) -> Surface

该函数的使用跟 pygame.image.tostring() 相似。size 参数是一对表示宽度和高度的数字。一旦新的 Surface 对象创建成功,你就可以删除字符串描述。

size 和 format 参数指定的数据需要跟字符串描述相符,否则将抛出异常。

更快地将图片转换到 Pygame,请参考 pygame.image.frombuffer() 函数。

**pygame.image.frombuffer()**创建一个与字符串描述共享数据的 Surface 对象。

frombuffer(string, size, format) -> Surface

创建一个新的 Surface 对象,与字符串描述直接共享像素数据。该函数的使用跟 pygame.image.fromstring() 类似,但没法垂直翻转原始数据。

该函数的速度会比 pygame.image.fromstring() 快很多,因为该函数不需要申请和拷贝任何像素数据。

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()  —  获取按键标识符对应的名字 该模块包含处理与键盘操作相关的函数。当键盘按键被按下和释放时,事件队列将获得 pygame.KEYDOWN 和 pygame.KEYUP 事件消息。这两个消息均包含 key 属性,是一个整数的 id,代表键盘上具体的某个按键。

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

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

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

| KeyASCII | 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 bracket) |

| 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 属性,用于描述组合键状态。

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

| KeyASCII | 描述 |

| — | — |

| KMOD_NONE | 木有同时按下组合键 |

| KMOD_LSHIFT | 同时按下左边的 shift 键 |

| KMOD_RSHIFT | 同时按下右边的 shift 键 |

| KMOD_SHIFT | 同时按下 shift 键 |

| KMOD_CAPS | 同时按下大写字母锁定键 |

| 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_NUM | 同时按下数字键盘锁定键 |

| KMOD_MODE | 同时按下模式转换键 |

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

**函数详解****pygame.key.get_focused()**当窗口获得键盘的输入焦点时返回 True。

get_focused() -> bool

当窗口获得键盘的输入焦点时返回 True,如果窗口需要确保不失去键盘焦点,可以使用 pygame.event.set_grab(True) 独占所有的输入接口。

温馨提示:注意,这样做你就无法将鼠标移出窗口客户区了,但你仍然可以通过 Ctrl - Alt - Delete 热键“解围”。

**pygame.key.get_pressed()**获取键盘上所有按键的状态。

get_pressed() -> bools

返回一个由布尔类型值组成的序列,表示键盘上所有按键的当前状态。使用 key 常量作为索引,如果该元素是 True,表示该按键被按下。

使用该函数获取一系列按钮被按下的状态,并不能正确的获取用户输入的文本。因为你无法知道用户按键的被按下的顺序,并且快速的连续按下键盘可能无法完全被捕获(在两次调用 pygame.key.get_pressed() 的过程中被忽略),也无法将这些按下的按键完全转化为字符值。实现此功能可以通过捕获 pygame.KEYDOWN 事件消息来实现。

**pygame.key.get_mods()**检测是否有组合键被按下。

get_mods() -> int

返回一个包含所有组合键位掩码的整数。使用位操作符 & 你可以检测某个组合键是否被按下。

温馨提示:假如 pygame.key.get_mods() 返回值存放在 mods 变量中,如果 mods & KMOD_CTRL 为 True,表示 ctrl 键正被按下。

pygame.key.set_mods() 临时设置某些组合键为被按下状态。

set_mods(int) -> None

创建一个位掩码整数,包含你需要设置为被按下状态的组合键。

温馨提示:比如我们需要设置 ctrl 和 alt 组合键为按下状态,则可以 mods = KMOD_CTRL | KMOD_ALT,然后调用 pygame.key.set_mods(mods),这样尽管用户没有按下 ctrl 和 alt 组合键,它们依然是显示被按下状态。

**pygame.key.set_repeat()**控制重复响应持续按下按键的时间。

set_repeat() -> None

set_repeat(delay, interval) -> None

当开启重复响应按键,那么用户持续按下某一按键,就会不断产生同一 pygame.KEYDOWN 事件。delay 参数设置多久后(单位是毫秒)开始发送第一个 pygame.KEYDOWN 事件。interval 参数设置发送两个事件之间的间隔。如果不传入任何参数,表示取消重复响应按键。

**pygame.key.get_repeat()**获取重复响应按键的参数。

get_repeat() -> (delay, interval)

当开启重复响应按键,那么用户持续按下某一按键,就会不断产生同一 pygame.KEYDOWN 事件。返回值是一个二元组,第一个元素 delay 表示多久后(单位是毫秒)开始发送第一个 pygame.KEYDOWN 事件。第二个元素 interval 表示发送两个事件之间的间隔。

默认情况下重复响应按键是没有开启的。

Pygame 1.8 新增加的。

**pygame.key.name()**获取按键标识符对应的名字。

name(key) -> string

获取一个按键标识符对应的字符串描述

8.locals模块

==========

pygame.localsPygame 定义的常量。

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

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

各个常量的详细描述记录在 Pygame 各个模块的相关文档中。比如 pygame.display.set_mode() 方法用到的 HWSURFACE 常量,你就可以在 display 模块的文档中找到详细的说明;事件类型在 event 模块的文档中可以找到;当产生 KEYDOWN 或 KEYUP 事件时,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对象来控制播放

此模块包含用于加载 Sound 对象和控制播放的类。混音器模块是可选的,取决于SDL_mixer。您的程序应该在使用它之前 测试 pygame.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。

函数详解pygame.mixer.init() 初始化混音器模块 init(frequency=22050, size=-16, channels=2, buffer=4096) -> None 初始化混音器模块以进行声音加载和播放。默认参数可以被改变以提供特定的音频混合。允许使用关键字参数。对于参数设置为零的向后兼容性,使用默认值(可能由pre_init调用更改)。

size参数表示每个音频样本使用的位数。如果值为负,则将使用带符号的样本值。正值表示将使用不带符号的音频样本。无效值会引发异常。

pygame 2中的新功能(使用SDL2编译时) - 大小可以是32(32位浮点数)。

channels参数用于指定是使用单声道还是立体声。1表示单声道,2表示立体声。不支持其他值(负值被视为1,大于2的值被视为2)。

buffer参数控制混音器中使用的内部采样数。默认值应适用于大多数情况。可以降低它以减少延迟,但可能会发生声音丢失。它可以被提升到更大的值,以确保播放永远不会跳过,但它会对声音播放施加延迟。缓冲区大小必须是2的幂(如果不是,则向上舍入到下一个最接近的2的幂)。

某些平台需要在 display 模块初始化后初始化pygame.mixer 模块。顶级pygame.init() 自动处理此问题,但无法将任何参数传递给 mixer init。为了解决这个问题,mixer 具有pygame.mixer.pre_init() 函数在使用顶层初始化之前设置正确默认值。

多次调用是安全的,但是在初始化混音器后,如果没有先调用 pygame.mixer.quit(),则无法更改播放参数 。

**pygame.mixer.pre_init(**预设混音器初始化参数

pre_init(frequency=22050, size=-16, channels=2, buffersize=4096) -> None

调用 pre_init 可以更改调用 真正的初始化 pygame.mixer.init() 使用的默认值。允许使用关键字参数。设置自定义混音器播放值的最佳方法是 在调用顶级 pygame.init() 之前调用 pygame.mixer.pre_init()。对于向后兼容性参数,零值将替换为启动默认值。

**pygame.mixer.quit()**退出混音器

quit() -> None

这将卸载 pygame.mixer,如果稍候重新初始化,则所有播放将停止并且任何加载的Sound对象可能与混音器不兼容。

**pygame.mixer.get_init()**测试混音器是否初始化

get_init() -> (frequency, format, channels)

如果混合器已初始化,则返回正在使用的播放参数。如果混音器尚未初始化,则返回None

**pygame.mixer.stop()**停止播放所有声道

stop() -> None

这将停止所有活动混音器通道的播放。

**pygame.mixer.pause()**暂时停止播放所有声道

pause() -> None

这将暂时停止活动混音器通道上的所有播放。稍后可以 通过 pygame.mixer.unpause() 恢复播放

**pygame.mixer.unpause()**恢复播放声道

unpause() -> None

这将在暂停后恢复所有活动声道。

**pygame.mixer.fadeout()**停止前淡出所有声音的音量

fadeout(time) -> None

这将在设定时间上淡出所有活动通道上的音量,时间以毫秒为单位。声音静音后,播放将停止。

**pygame.mixer.set_num_channels()**设置播放频道的总数

set_num_channels(count) -> None

设置调音台的可用频道数。默认值为8。可以增加或减少该值。如果该值减小,则截断的通道上播放的声音将停止。

**pygame.mixer.get_num_channels()**获取播放频道的总数

get_num_channels() -> count

返回当前活动的播放通道数。

**pygame.mixer.set_reserved()**预留频道自动使用

set_reserved(count) -> None

调音台可以保留任意数量的通道,这些通道不会被声音自动选择播放。如果声音当前正在预留频道播放,则不会停止。

这允许应用程序为重要声音保留特定数量的声道,这些声音不得被丢弃或具有可保证的频道。

**pygame.mixer.find_channel()**找到一个未使用的频道

find_channel(force=False) -> Channel

这将找到并返回一个非活动的Channel对象。如果没有非活动通道,则此函数将返回None。如果没有非活动通道且force参数为True,则会找到运行时间最长的声道并返回它。

如果调音台有 pygame.mixer.set_reserved() 保留频道,则此处不会返回这些频道。

**pygame.mixer.get_busy()**测试mixer 是否正忙

get_busy() -> bool

如果混音器正忙,则返回True。如果混音器处于空闲状态,则返回False。

类 pygame.mixer.Sound 从文件或缓冲区对象创建新的Sound对象

Sound(filename) -> Sound Sound(file=filename) -> Sound Sound(buffer) -> Sound Sound(buffer=buffer) -> Sound Sound(object) -> Sound Sound(file=object) -> Sound Sound(array=object) -> Sound

pygame.mixer.Sound.play        -        开始播放声音 pygame.mixer.Sound.stop        -        停止声音播放 pygame.mixer.Sound.fadeout        -        淡出后停止声音播放 pygame.mixer.Sound.set_volume        -        设置此声音的播放音量

pygame.mixer.Sound.get_volume        -        获取播放音量 pygame.mixer.Sound.get_num_channels        -        计算此声音播放的次数 pygame.mixer.Sound.get_length        -        得到声音的长度 pygame.mixer.Sound.get_raw        -        返回Sound样本的bytestring副本。从文件名,python文件对象或可读缓冲区对象加载新的声音缓冲区。将执行有限的重新采样以帮助样本匹配混音器的初始化参数。Unicode字符串只能是文件路径名。Python 2.x字符串或Python 3.x字节对象可以是路径名或缓冲区对象。使用’file’或’buffer’关键字来避免歧义; 否则Sound可能会猜错。如果使用了array关键字,则该对象应该导出版本3,C级别数组接口,或者对于Python 2.6或更高版本,导出新的缓冲区接口(首先检查该对象的缓冲区接口。)

Sound对象表示实际的声音样本数据。更改Sound对象状态的方法将是Sound播放的所有实例。Sound对象还导出数组接口,对于Python 2.6或更高版本,还会导出新的缓冲区接口。

可以从OGG音频文件或未压缩的 WAV 文件加载声音。

注意:缓冲区将在内部复制,不会在它与Sound对象之间共享数据。

目前缓冲区和数组支持与sndarray.make_sound 数值数组一致,因为忽略了样本符号和字节顺序。这将通过正确处理符号和字节顺序或在不同时引发异常来改变。此外,截断源样本以适合音频样本大小。这不会改变。

pygame.mixer.Sound(buffer)是pygame 1.8中新增的pygame.mixer.Sound关键字参数和数组接口支持pygame 1.9.2中的新功能。

**play()**开始播放声音

play(loops=0, maxtime=0, fade_ms=0) -> Channel

在可用频道上开始播放声音(即,在计算机的扬声器上)。 这将强制选择一个频道,因此如有必要,播放可能会切断当前正在播放的声音。

loops参数控制第一次播放后样本重复的次数。值 5 表示声音将播放一次,然后重复播放五次,因此共播放六次。默认值(0)表示声音不重复,因此只播放一次。如果循环设置为-1,则Sound将无限循环(但是您仍然可以调用stop()来停止它)。

maxtime参数可用于在给定的毫秒数后停止播放。

fade_ms参数将使声音以0音量开始播放,并在给定时间内逐渐升至全音量。样本可以在淡入完成之前结束。

这将返回所选通道的Channel对象。

**stop()**停止声音播放

stop() -> None

这将停止在任何活动频道上播放此声音。

**fadeout()**淡出后停止声音播放

fadeout(time) -> None

这将在以毫秒为单位在时间参数上淡出后停止播放声音。Sound会在所有播放的频道上消失并停止。

**set_volume()**设置此声音的播放音量

set_volume(value) -> None

这将设置此声音的播放音量(响度)。如果正在播放,这将立即影响声音。它也会影响此声音的任何未来播放。参数是从0.0到1.0的值。

**get_volume()**获取播放音量

get_volume() -> value

返回0.0到1.0之间的值,表示此Sound的音量。

**get_num_channels()**计算此声音播放的次数

get_num_channels() -> count

返回此声音正在播放的活动频道数。

**get_length()**得到声音的长度

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

alue) -> None

这将设置此声音的播放音量(响度)。如果正在播放,这将立即影响声音。它也会影响此声音的任何未来播放。参数是从0.0到1.0的值。

**get_volume()**获取播放音量

get_volume() -> value

返回0.0到1.0之间的值,表示此Sound的音量。

**get_num_channels()**计算此声音播放的次数

get_num_channels() -> count

返回此声音正在播放的活动频道数。

**get_length()**得到声音的长度

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。 [外链图片转存中…(img-PxHzFsF7-1712436024592)] [外链图片转存中…(img-CgwS00SN-1712436024593)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python) [外链图片转存中…(img-fZeVfVTK-1712436024593)]

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长! [外链图片转存中…(img-fJZTsSRO-1712436024594)]

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: