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 模块没有被初始化,显示模式没有被设置,那么事件队列就还没有开始真正工作。
常规的队列是由 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属性来完全访问其他属性。所有其他成员属性的值都是通过事件对象的字典来传递。
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 字体模块将会被加载用于替代。
在一个新 Surface 对象上绘制文本。
render(text, antialias, color, background=None) -> Surface
该函数创建一个新的 Surface 对象,并在上边渲染指定的文本。Pygame 没有提供直接的方式在一 Surface ace 对象上绘制文本,取而代之的方法是:使用 Font.render() 函数创建一个渲染了文本的图像(Surface 对象),然后将这 Surface Surface 对象上。
仅支持渲染一行文本:“换行”字符不会被渲染。空字符(‘x00’)被渲染将产生一个 TypeError 错误。Unicode 和 char(字节)字符串都可以被接受。对于 Unicode 字符串,仅 UCS-2 字符范围(‘u0001’ 到 ‘uFFFF’)被认为是有效的。任何编码值更大字符的字符会产生一个 UnicodeError 的错误;对于 char 字符串,默认的是使用 LATIN1 编码。color 参数决定的是文本的颜色(例如:(0, 0, 255) 表示蓝色)。可选参数 background 决定了文本的背景颜色。如果没有传递 background 参数,则对应区域内表示的文本背景将会被设置为透明。
返回的 Surface 对象将保持表示文本所需要的尺寸(与 Font.size() 所返回的尺寸相同)。如果将一个空字符串渲染为文本,将会返回 Surface ace 对象,它仅有一个像素点的宽度,但高度与字体高度一样。
由于取决于文本背景的类型和抗锯齿功能的使用,该函数将会返回不同类型的 Surface 对象。出于性能上的考虑,了解何种类型的图像会被使用是很有帮助的:如果抗锯齿功能没有被使用,返回的图像将采用二元调色的 8 位图像。此时如果背景是透明的,只设置一个 colorkey 来实现;抗锯齿图像会被渲染为 24 位 RGB 图像。此时如果背景是透明的,每个像素都将包含一个 alpha 通道。
优化:如果你已知文本最终将绘制在一个纯色的背景上,那么文本是抗锯齿的,你可以通过指定文本的背景色来提高性能(将文本背景色设置目标 Surface 对象的颜色)。使用这个技巧,你只需用一个 colorkey 即可保持透明信息,而不需要设置每个像素的 alpha 通道值(这样效率会低很多)。
如果你尝试渲染 ‘\n’,通常是显示为一个矩形(未知字符)。因此,你需要自己想办法处理换行。
字体渲染并不是线程安全的行为:在任何时候仅有一个线程可以渲染文本。
从文件加载新图片。
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() 提高代码的兼容性: