python自学篇——PyGame模块的所有功能函数详解

PyGame是SDL多媒体库的Python包装器模块。它包含python函数和类,允许您使用SDL对播放cdroms、音频和视频输出以及键盘、鼠标和操纵杆输入的支持。

点我一键到底

文件

  • 自述

    关于游戏的基本信息:它是什么,涉及到谁,在哪里找到它。

  • 安装

    在多个平台上编译游戏所需的步骤。还可以帮助您为系统查找和安装预构建的二进制文件。

  • 文件路径函数参数

    游戏如何处理文件系统路径。

  • LGPL许可证

    这是许可证下的玩牌游戏。它提供了用开源软件和商业软件发布游戏的功能。一般情况下,如果游戏没有改变,它可以与任何类型的程序一起使用。

教程

导入和初始化游戏的开始步骤。游戏包由几个模块组成。有些模块并不包括在所有平台上。

一个基础教程,涵盖了2D计算机动画背后的概念。有关绘制和清除对象以使其显示为动画的信息。

游戏的例子包括一个简单的程序,有一个互动的拳头和一个黑猩猩。这是受21世纪初令人讨厌的闪光旗帜的启发。本教程将检查示例中使用的每一行代码。

  • 雪碧模块游戏攻略

    PyGame包括一个更高级别的精灵模块,以帮助组织游戏。sprite模块包括几个类,它们帮助管理几乎所有游戏类型中的细节。雪碧类比常规的游戏模块要先进一些,需要更多的理解才能正确使用。

  • 苏法雷游戏攻略

    PyGames使用NumPypython模块对图像进行有效的每个像素效果。使用表面阵列是一个高级功能,允许自定义效果和过滤器。这还研究了pyGames示例arraydemo.py的一些简单效果。

  • 相机模块游戏攻略

    PYGAME,在1.9岁时,有一个相机模块,允许你捕捉图像,观看实时流,并做一些基本的计算机视觉。本教程涵盖这些用例。

  • 新手指南

    列出了十三个有用的小窍门,让人们可以轻松地使用游戏。

  • 制作游戏教程

    一个大型教程,涵盖创建整个游戏所需的更大主题。

  • 显示模式

    为屏幕获取一个显示面。

参照模块

序号模块功能
1pygame.cdrom访问光驱
2pygame.cursors加载光标
3pygame.display访问显示设备
4pygame.drawpygame.gfxdraw绘制图像
5pygame.event管理事件
6pygame.font用于加载和呈现字体
7pygame.image加载和存储图片
8pygame.joystick用于与操纵杆,游戏手柄和轨迹球进行交互
9pygame.key读取键盘按键
10pygame.mixer声音
11pygame.mouse鼠标
12pygame.movie播放视频(已被弃用)
13pygame.music播放音频
14pygame.overlay访问高级视频叠加
15pygame.rect管理矩形区域
16pygame.sndarray操作声音数据
17pygame. sprite操作移动图像
18pygame.surface管理图像和屏幕
19pygame.surfarray管理点阵图像数据
20pygame.time管理时间和帧信息
21pygame.transform缩放和移动图像

各模块的详细功能讲解

1、pygame.cdrom 访问光驱

cdrom模块管理计算机上的CDDVD驱动器。它还可以控制音频CD的播放。在执行任何操作之前,需要先初始化此模块。CD您创建的每个对象都代表一个cdrom驱动器,并且在执行大多数操作之前还必须单独进行初始化。

用于音频CDROM控制的游戏模块

pygame.cdrom.init初始化CDROM模块
pygame.cdrom.quit取消CDROM模块的初始化
pygame.cdrom.get_init如果初始化CDROM模块,则为true。
pygame.cdrom.get_count系统上的CD驱动器数目
pygame.cdrom.CD类来管理CDROM驱动器。

类来管理CDROM驱动器。

CD(Id)->CD

pygame.cdrom.CD.init初始化CDROM驱动器以供使用
pygame.cdrom.CD.quit取消初始化CDROM驱动器以供使用
pygame.cdrom.CD.get_init如果此cd设备已初始化,则为true。
pygame.cdrom.CD.play开始播放音频
pygame.cdrom.CD.stop停止音频播放
pygame.cdrom.CD.pause暂时停止音频播放
pygame.cdrom.CD.resume取消暂停音频回放
pygame.cdrom.CD.eject弹出或打开CDROM驱动器
pygame.cdrom.CD.get_id光盘驱动器的索引
pygame.cdrom.CD.get_nameCDROM驱动器的系统名称
pygame.cdrom.CD.get_busy如果驱动器正在播放音频,则为true。
pygame.cdrom.CD.get_paused如果暂停驱动器,则为true。
pygame.cdrom.CD.get_current当前音频播放位置
pygame.cdrom.CD.get_empty如果驱动器中有CDROM,则为false
pygame.cdrom.CD.get_numtracts光盘上的轨道数目
pygame.cdrom.CD.get_track_audio如果CDROM轨道有音频数据,则为true。
pygame.cdrom.cd.get_all获取所有跟踪信息
pygame.cdrom.cd.get_path_startCDROM轨道的启动时间
pygame.cdrom.CD.get_track_length光盘轨道长度

2、pygame.cursors 加载光标

该模块包括几个标准游标。该pygame.mouse.set_cursor() 函数带有几个参数。所有这些参数都存储在一个元组中,您可以这样调用:

>>> pygame.mouse.set_cursor(*pygame.cursors.arrow)

该模块还包含一些作为格式化字符串的游标。您需要pygame.cursors.compile()先将它们传递给功能,然后才能使用它们。示例调用如下所示:

>>> cursor = pygame.cursors.compile(pygame.cursors.textmarker_strings)
>>> pygame.mouse.set_cursor(*cursor)

以下变量是可用作光标的光标位图:

  • pygame.cursors.arrow
  • pygame.cursors.diamond
  • pygame.cursors.broken_x
  • pygame.cursors.tri_left
  • pygame.cursors.tri_right

可以使用以下字符串将其转换为光标位图 pygame.cursors.compile()

  • pygame.cursors.thickarrow_strings
  • pygame.cursors.sizer_x_strings
  • pygame.cursors.sizer_y_strings
  • pygame.cursors.sizer_xy_strings

游标资源的游戏模块

pygame.cursors.compile从简单字符串创建二进制游标数据
pygame.cursors.load_xbm从XBM文件加载游标数据

3、pygame.display 访问显示设备

该模块提供对pygame显示的控制。Pygame具有单个显示Surface,该Surface可以包含在窗口中,也可以全屏运行。创建显示后,将其视为常规Surface。更改不会立即显示在屏幕上;您必须选择两个翻转功能之一来更新实际显示。

显示的原点(x = 0和y = 0)在屏幕的左上方。两个轴都朝着屏幕的右下角正向增加。

游戏模块控制显示窗口和屏幕

pygame.display.init初始化显示模块
pygame.display.quit取消初始化显示模块
pygame.display.get_init如果已初始化显示模块,则返回True
pygame.display.set_mode初始化窗口或屏幕以供显示
pygame.display.get_surface获取对当前设置的显示面的引用。
pygame.display.flip将完整显示面更新到屏幕上
pygame.display.update更新屏幕的软件显示部分
pygame.display.GET_Driver获取游戏显示后端的名称
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使显示表面呈锥形
pygame.display.toggle_fullscreen全屏幕和窗口显示器之间的切换
pygame.display.SET_GAMMA更改硬件伽马坡道
pygame.display.set_gamma_ramp使用自定义查找更改硬件伽马坡道
pygame.display.set_icon更改显示窗口的系统映像
pygame.display.set_caption设置当前窗口标题
pygame.display.get_caption获取当前窗口标题
pygame.display.set_palette设置索引显示的显示调色板
pygame.display.get_num_display返回显示数量
pygame.display.get_Window_size返回窗口或屏幕的大小

4、pygame.drawpygame.gfxdraw 绘制图像

在表面上绘制几个简单的形状。这些功能可用于渲染到任何格式的表面。渲染到硬件表面将比常规软件表面慢。

大多数函数采用width参数来表示形状边缘周围的笔触大小(厚度)。如果宽度为0,则将填充形状(实心)。

所有绘图功能均会遵守曲面的裁剪区域,并且将约束到该区域。该函数返回一个矩形,该矩形代表更改后的像素的边界区域。该边界矩形是包围受影响区域的“最小”边界框。

注意:pygame.gfxdraw在以后的pygame版本中可能会更改或消失。如果使用此选项,则您的代码可能会在下一个pygame版本中中断。

pygame软件包在加载时不会自动导入gfxdraw,因此必须显式导入才能使用。

import pygame
import pygame.gfxdraw

图形绘制游戏模块

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绘制多个连续直线反错线段

图形绘制游戏模块

pygame.gfxdraw.pixel画一个像素
pygame.gfxdraw.hline画一条水平线
pygame.gfxdraw.vline画一条垂直线
pygame.gfxdraw.line划一条线
pygame.gfxdraw.rectangle画长方形
pygame.gfxdraw.box画一个填充的矩形
pygame.gfxdraw.circle画一个圆
pygame.gfxdraw.aacircle画一个反锯齿圆
pygame.gfxdraw.filled_circle画一个充满了的圆圈
pygame.gfxdraw.ellipse画一个椭圆
pygame.gfxdraw.aaellipse画一个反锯齿椭圆
pygame.gfxdraw.filled_ellipse画一个填充的椭圆
pygame.gfxdraw.arc画弧
pygame.gfxdraw.pie画个馅饼
pygame.gfxdraw.trigon画一个三角形/三角形
pygame.gfxdraw.aatrigon绘制反别名三角/三角形
pygame.gfxdraw.filled_trigon画一个填充的三角/三角形
pygame.gfxdraw.polygon画多边形
pygame.gfxdraw.aapolygon绘制反别名多边形
pygame.gfxdraw.filled_polygon绘制填充多边形
pygame.gfxdraw.textured_polygon绘制纹理多边形
pygame.gfxdraw.bezier绘制Bézier曲线

5、pygame.event 管理事件

事件队列对其可容纳的事件数有上限(标准SDL 1.2为128)。当队列已满时,新事件将被静默删除。为了防止丢失事件,尤其是表示发出退出命令的输入事件,您的程序必须定期检查事件并进行处理。为了加快队列处理速度,可以pygame.event.set_blocked()控制队列中允许哪些事件,以限制将哪些事件放入队列。

要获取各种输入设备的状态,您可以放弃事件队列,并使用其相应的模块直接访问输入设备: pygame.mousepygame模块与鼠标一起使用pygame.keypygame模块与键盘一起使用,以及pygame.joystickPygame模块与操纵杆进行交互,游戏手柄和轨迹球。。如果使用此方法,请记住pygame需要与系统窗口管理器和平台的其他部分进行某种形式的通信。为了使pygame与系统保持同步,您将需要在pygame.event.pump()内部调用pygame事件处理程序以使所有内容保持最新。通常,每个游戏循环应调用一次。注意:在初始化设备之前,操纵杆不会发送任何事件。

事件队列包含pygame.event.EventType用于表示事件事件对象的pygame对象。有多种方法可以访问排队的事件,从简单地检查事件的存在到直接将它们从堆栈中获取。事件队列还提供了一些简单的筛选,它可以通过阻止队列中的某些事件类型来稍微提高性能。使用 pygame.event.set_allowed()控制队列pygame.event.set_blocked()上允许哪些事件控制队列上允许哪些事件来更改此过滤。默认情况下,所有事件类型都可以放在队列中。

用于与事件和队列交互的游戏模块

pygame.event.pump内部进程游戏事件处理程序
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.custom_type使自定义用户事件类型
pygame.event.Event创建一个新的事件对象
pygame.event.EventType用于表示事件的游戏对象

6、pygame.font 用于加载和呈现字体

字体模块允许将TrueType字体呈现到新的Surface对象中。它接受任何UCS-2字符(“ u0001”至“ uFFFF”)。该模块是可选的,并且需要SDL_ttf作为依赖项。 在尝试使用pygame.fontpygame模块之前,应该测试该模块是否可用并进行了初始化。

使用字体完成的大多数工作都是通过使用实际的Font对象完成的。模块本身仅具有用于初始化模块和使用创建字体对象的例程pygame.font.Font()

您可以使用该pygame.font.SysFont() 功能从系统加载字体。还有一些其他功能可帮助您查找系统字体。

用于加载和呈现字体的游戏模块

pygame.font.init初始化字体模块
pygame.font.quit未初始化字体模块
pygame.font.get_init如果初始化了字体模块,则为true。
pygame.font.get_default_type获取默认字体的文件名。
pygame.font.get_fonts获取所有可用字体
pygame.font.match_font在系统上查找特定字体
pygame.font.SysFont从系统字体创建字体对象
pygame.font.Font从文件中创建新的Font对象

7、pygame.image 加载和存储图片

图像模块是pygame的必需依赖项,但仅可选地支持任何扩展文件格式。默认情况下,它只能加载未压缩的 BMP图像。当构建具有完整图像支持的pygame.image.load() 功能时,该功能可以支持以下格式。

  • JPG
  • PNG
  • GIF (非动画)
  • BMP
  • PCX
  • TGA (未压缩)
  • TIF
  • LBM(和PBM
  • PBM(和PGMPPM
  • XPM

保存图像仅支持有限的一组格式。您可以保存为以下格式。

  • BMP
  • TGA
  • PNG
  • JPEG

用于图像传输的游戏模块

pygame.image.load从文件中加载新图像
pygame.image.save将映像保存到磁盘
pygame.Image.get_Extended测试扩展图像格式是否可以加载
pygame.image.tostring将图像传输到字符串缓冲区
pygame.image.fromstring从字符串缓冲区创建新的Surface
pygame.image.frombuffer创建一个在字符串缓冲区内共享数据的新Surface

8、pygame.joystick 用于与操纵杆,游戏手柄和轨迹球进行交互

操纵杆模块管理计算机上的操纵杆设备。游戏杆设备包括轨迹球和视频游戏风格的游戏手柄,该模块允许使用多个按钮和“帽子”。计算机可以一次管理多个操纵杆。

游戏杆类的每个实例代表一个插入计算机的游戏设备。如果游戏板上有多个操纵杆,则操纵杆对象实际上可以代表该单个游戏设备上的多个操纵杆。

为了快速初始化操纵杆模块并获取操纵杆实例列表,请使用以下代码:

pygame.joystick.init()
joysticks = [pygame.joystick.Joystick(x) for x in range(pygame.joystick.get_count())]

操纵杆将生成以下事件类型

JOYAXISMOTION JOYBALLMOTION JOYBUTTONDOWN JOYBUTTONUP JOYHATMOTION

为了使某些方法正常工作,需要频繁地抽取事件队列。因此,请定期调用pygame.event.get,pygame.event.wait或pygame.event.pump之一。

游戏模块,用于与操纵杆、游戏垫和跟踪球进行交互。

pygame.joystick.init初始化操纵杆模块。
pygame.joystick.quit取消初始化操纵杆模块。
pygame.joystick.get_init如果已初始化操纵杆模块,则返回True。
pygame.joystick.get_count返回操纵杆的数目。
pygame.joystick.Joystick创建一个新的Joybar对象。

9、pygame.key 读取键盘按键

此模块包含用于处理键盘的功能。

pygame.event与事件和队列交互pygame的模块队列中获得pygame.KEYDOWNpygame.KEYUP 当按下和释放键盘按钮事件。这两个事件都有 keymod属性。

  • key:一个整数ID,代表键盘上的每个键
  • mod: 事件发生时处于按下状态的所有修改键的位掩码

pygame.KEYDOWN事件具有其他属性unicodescancode

  • unicode:一个字符串,即输入的完全翻译后的字符,其中考虑了shift和撰写键
  • scancode:特定于平台的键代码,可能因键盘而异,但对于选择诸如多媒体键之类的奇怪键非常有用

游戏模块与键盘一起工作

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.key.start_text_put开始处理IME组合
pygame.key.STOP_Text_INPUT停止处理IME组合
pygame.key.set_text_put_rect控制候选人列表的位置。

10、pygame.mixer 声音

此模块包含用于加载声音对象和控制播放的类。混合器模块是可选的,取决于SDL_mixer。您的程序应在使用前测试pygame.mixer用于加载和播放声音的pygame模块是否可用并已初始化。

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

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

混音器还具有特殊的流媒体频道。这用于音乐播放,可通过pygame.mixer.musicpygame模块进行访问以控制流音频模块。

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

用于控制流音频的游戏模块

pygame.mixer.music.load加载音乐文件以进行播放
pygame.mixer.music.unload卸载当前加载的音乐以释放资源
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获取播放停止时频道发送的事件

11、pygame.mouse 鼠标

鼠标功能可用于获取鼠标设备的当前状态。这些功能还可以更改鼠标的系统光标。

设置显示模式后,事件队列将开始接收鼠标事件。按下和释放鼠标按钮时会生成pygame.MOUSEBUTTONDOWNpygame.MOUSEBUTTONUP事件。这些事件包含一个按钮属性,表示按下哪个按钮。鼠标滚轮滚动时将生成pygame.MOUSEBUTTONDOWNpygame.MOUSEBUTTONUP事件。滚轮向上滚动时,按钮设置为4;滚轮向下滚动时,按钮设置为5。每当鼠标移动时,都会生成一个pygame.MOUSEMOTION事件。鼠标的移动分为小而准确的运动事件。当鼠标移动时,许多运动事件将被放置在队列中。无法从事件队列中正确清除鼠标动作事件是事件队列填满的主要原因。

如果隐藏了鼠标光标,并且输入被捕获到当前显示,则鼠标将进入虚拟输入模式,在该模式下,鼠标的相对移动将永远不会因屏幕的边界而停止。查看功能 pygame.mouse.set_visible()pygame.event.set_grab()进行配置。

游戏模块与鼠标一起工作

pygame.mouse.get_pressed获取鼠标按钮的状态
pygame.mouse.get_pos获取鼠标光标的位置
pygame.mouse.get_rel获取鼠标移动的数量
pygame.mouse.set_pos设置鼠标光标位置
pygame.mouse.set_visible隐藏或显示鼠标光标
pygame.mouse.get_visible获取鼠标光标的当前可见性状态。
pygame.mouse.get_focused检查显示是否正在接收鼠标输入。
pygame.mouse.set_cursor设置系统鼠标光标的图像
pygame.mouse.get_cursor获取系统鼠标光标的图像

12、pygame.movie 播放视频

要播放视频中的音乐,pygame.movie模块需要对音频接口的完全控制,不能初始化mixer模块。因此要这样完成初始化

pygame.init()
pygame.mixer.quit()
或者只初始化 pygame.display.init()
movie = pygame.movie.Movie('filename') 指定文件名载入视频。视频的格式可以为mpeg1。视频文件不会马上全部载入内存,而是在播放的时候一点一点的载入内存。
movie.set_display(pygame.display.set_mode((640,480))) 指定播放的surface。
movie.set_volume(value) 指定播放的音量。音量的值value的取值范围为0.01.0。
movie.play() 播放视频。这个函数会立即返回,视频在后台播放。这个函数可以带一个参数loops,指定重复次数。 正在播放的视频可以用
movie.stop() 停止播放。
movie.pause() 暂停播放。
movie.skip(seconds) 使视频前进seconds秒钟。
NOTE:在某些XWindow下,可能需要配置环境变量: export SDL_VIDEO_YUV_HWACCEL=0

13、pygame.music 播放音频

音乐模块与pygame.mixerpygame模块紧密相关,用于加载和播放声音。使用音乐模块控制混音器中音乐的播放。

音乐播放和常规声音播放之间的区别在于,音乐是流式传输的,永远不会一次全部加载。混音器系统一次仅支持一个音乐流。

请注意,MP3支持有限。在某些系统上,不支持的格式可能会使程序崩溃e.g。Debian Linux。考虑OGG改为使用。

pygame.mixer.music.load加载音乐文件进行播放
pygame.mixer.music.unload卸载当前加载的音乐以释放资源
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获取播放停止时频道发送的事件

14、pygame.overlay 访问高级视频叠加

叠加层对象提供了对访问硬件视频叠加层的支持。视频叠加层不使用标准RGB像素格式,并且可以使用多种分辨率的数据来创建单个图像。

Overlay对象表示对显示硬件的较低级别访问。要使用该对象,您必须了解视频覆盖的技术细节。

叠加格式确定使用的像素数据的类型。并非所有硬件都支持所有类型的覆盖格式。以下是可用格式类型的列表:

YV12_OVERLAY, IYUV_OVERLAY, YUY2_OVERLAY, UYVY_OVERLAY, YVYU_OVERLAY

width和height参数控制覆盖图像数据的大小。覆盖图像可以以任何尺寸显示,而不仅仅是覆盖分辨率。

覆盖对象始终可见,并始终显示在常规显示内容的上方。

pygame.Overlay.display设置重叠像素数据
pygame.Overlay.set_location控制叠加层的显示位置
pygame.Overlay.get_hardware测试叠加层是否由硬件加速

15、pygame.rect 管理矩形区域

PyGames使用RECT对象来存储和操作矩形区域。可以从左边、顶部、宽度和高度值的组合创建RECT。还可以从已经是RECT的python对象或具有名为“rect”的属性创建Rect。

任何需要rect参数的pyGames函数也会接受这些值中的任何一个来构造RECT。这样就可以更容易地动态创建Rect作为函数的参数。

更改RECT的位置或大小的RECT函数将返回RECT的新副本。原始的RECT没有被修改。有些方法有一个替代的“就地”版本,它只返回原来的RECT。这些“就地”方法用“IP”后缀表示。

RECT对象具有多个虚拟属性,可用于移动和对齐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)

分配给大小、宽度或高度会改变矩形的尺寸;所有其他赋值都会移动该矩形而不调整它的大小。注意,有些属性是整数,而另一些属性是整数对。

如果RECT具有非零宽度或高度,它将返回True进行非零测试。有些方法返回0大小的RECT来表示无效的矩形。

rect对象的坐标都是整数。大小值可以编程为负值,但对于大多数操作来说,这些值都是非法的。

其他矩形之间有几个碰撞测试。大多数python容器都可以搜索到与单个RECT的碰撞。

RECT覆盖的区域不包括像素的最右边和最底部的边缘。如果一个RECT的底部边框是另一个RECT的顶部边框(即矩形1.底部=矩形2.top),则两者在屏幕上完全相遇,但不重叠,并且rect1.colliderect(rect2)返回假。

*新的玩法1.9.2:*RECT类可以被子类化。方法,例如copy()move()将识别这一点并返回子类的实例。但是,子类的__init__()方法不被调用,并且__new__()假设没有争论。因此,如果需要复制任何额外的属性,则应该重写这些方法。

用于存储直角坐标的吡咯对象

直角(左,顶,宽,高)->正向

(左,上),(宽,高)->

重排(宾语)->重述

pygame.Rect.copy复制矩形
pygame.Rect.move移动矩形
pygame.Rect.Move_IP移动矩形,就位
pygame.Rect.inflate增大或缩小矩形大小
pygame.Rect.Burate_IP适当地增大或缩小矩形大小
pygame.Rect.clamp将矩形移动到另一个
pygame.Rect.clamp_ip将矩形移到另一个内,就位。
pygame.Rect.clip在另一个内种植一个长方形
pygame.Rect.union将两个矩形连接成一个
pygame.Rect.Union_IP将两个矩形连接成一个,就位。
pygame.Rect.unionall许多矩形的合并
pygame.Rect.unionall_IP许多矩形的结合,就位
pygame.Rect.fit调整长宽比矩形的大小并移动
pygame.Rect.normalize正确负尺寸
pygame.Rect.contains测试一个矩形是否在另一个矩形内
pygame.Rect.collidepoint测试一个点是否在矩形内
pygame.Rect.colliderect测试两个矩形是否重叠
pygame.Rect.collidelist测试列表中的一个矩形是否与
pygame.Rect.collidelistall测试列表中的所有矩形是否相交
pygame.Rect.collidedict测试字典中的一个矩形是否相交
pygame.Rect.collidedictall测试字典中的所有矩形是否相交

16、pygame.sndarray 操作声音数据

函数在NumPy数组和声音对象之间进行转换。只有当游戏可以使用外部NumPy包时,此模块才可用。

声音数据是由每秒数千个样本组成的,每个样本都是特定时刻波的振幅。例如,在22 kHz格式中,阵列的单元号5是5/22000秒后的波幅。

每个示例都是8位或16位整数,这取决于数据格式。一个立体声文件每个样本有两个值,而一个单一声音文件只有一个。

用于访问声音样本数据的游戏模块

pygame.sndarray.array将声音样本复制到数组中
pygame.sndarray.samples将声音样本引用到数组中
pygame.sndarray.make_sound将数组转换为声音对象
pygame.sndarray.use_arraytype设置用于声音阵列的数组系统。
pygame.sndarra.get_arraytype获取当前活动数组类型。
pygame.sndarray.get_arraytype获取当前支持的数组系统类型。

17、pygame. sprite 操作移动图像

这个模块包含了几个在游戏中使用的简单类。有主Sprite类和几个包含Sprite的Group类。在使用pyGames时,这些类的使用完全是可选的。这些类相当轻量级,只为大多数游戏中常见的代码提供了一个起点。

Sprite类将用作游戏中不同类型对象的基类。还有一个基类只存储精灵。游戏可以创建新类型的Group类,这些类可以对它们包含的特别定制的Sprite实例进行操作。

基本Sprite类可以将它包含的Sprite绘制到曲面中。这个Group.draw()方法要求每个Sprite都有一个Surface.image属性和Surface.rect。这个Group.clear()方法需要这些相同的属性,并且可以用来擦除所有带有背景的Sprite。还有更先进的团体:pygame.sprite.RenderUpdates()pygame.sprite.OrderedUpdates().

最后,该模块包含多个碰撞功能。这些帮助在具有相交边界矩形的多个组中找到精灵。为了找到碰撞,雪碧必须有一个Surface.rect属性分配。

这些组是为高效地去除和添加雪碧而设计的。他们还允许廉价的测试,看看是否一个雪碧已经存在于一个集团。给定的雪碧可以存在于任意数量的组中。游戏可以使用一些组来控制对象的呈现,并使用一组完全独立的组来控制交互或玩家的移动。与其向派生的Sprite类添加类型属性或bools,不如考虑将Sprite保留在有组织的组中。这将允许更容易地查找稍后的游戏。

精灵和组管理它们与add()remove()方法。这些方法可以接受一个或多个成员资格目标。这些类的默认初始化器还接受单个目标或初始成员资格的列表。从组中重复添加和删除相同的雪碧是安全的。

虽然可以设计不从下面的Sprite和抽象组类派生的sprite和group类,但强烈建议在添加Sprite或Group类时扩展它们。

精灵不是线安全的。所以,如果使用线程,请自己锁定它们。

带有基本游戏对象类的游戏模块

pygame.sprite.Sprite可见游戏对象的简单基类。
pygame.sprite.DirtySprite一个具有更多属性和特性的Sprite子类。
pygame.sprite.Group一个容器类,用于保存和管理多个Sprite对象。
pygame.sprite.RenderPlain与pygame.sprite.group相同
pygame.sprite.RenderClear与pygame.sprite.group相同
pygame.sprite.RenderUpdates跟踪脏更新的组子类。
pygame.sprite.OrderedUpdates按加法顺序绘制雪碧的RenderUpdate子类。
pygame.sprite.LayeredUpdatesLayeredUpdate是一个处理层并绘制类似OrderedUpdate的sprite组。
pygame.sprite.LayeredDirtyLayeredDirty组用于DirtySprite对象。子类LayeredUpdate。
pygame.sprite.GroupSingle包含单个sprite的组容器。
pygame.sprite.spritecollide在另一个精灵群中找到精灵。
pygame.sprite.collide_rect两个精灵之间的碰撞检测,使用RECT。
pygame.sprite.collide_rect_ratio两个精灵之间的碰撞检测,使用比例比例的RECT。
pygame.sprite.collide_circle两个精灵之间的碰撞检测,使用圆圈。
pygame.sprite.collide_circle_ratio两个精灵之间的碰撞检测,使用比例成比例的圆圈。
pygame.sprite.collide_mask两个精灵之间的碰撞检测,使用面具。
pygame.sprite.groupcollide找到两组之间发生碰撞的所有精灵。
pygame.sprite.spritecollideany简单的测试一个精灵是否与一个组中的任何东西相交。

18、pygame.surface 管理图像和屏幕

游戏曲面用于表示任何图像。该表面具有固定的分辨率和像素格式。具有8位像素的表面使用调色板映射到24位颜色.

打电话pygame.Surface()用于表示图像的游戏对象若要创建新的图像对象,请执行以下操作。表面将被清除到所有黑色。唯一需要的参数是大小。没有额外的参数,Surface将以与显示Surface最匹配的格式创建。

像素格式可以通过传递位深度或现有曲面来控制。标志参数是图面附加功能的位掩码。您可以传递这些标志的任何组合:

HWSURFACE    creates the image in video memory
SRCALPHA     the pixel format will include a per-pixel alpha

这两个标志只是一个请求,可能不可能对所有的显示和格式。

高级用户可以组合一组具有深度值的位掩码。掩码是一组由4个整数组成的集合,表示像素中的哪些位将代表每种颜色。正常曲面不应要求掩码参数。

曲面可以有许多额外的属性,如alpha平面,彩色键,源矩形裁剪。这些功能主要影响曲面如何被切割到其他表面。Blit例程将尝试在可能的情况下使用硬件加速,否则它们将使用高度优化的软件闪存方法。

游戏中支持三种透明度:彩色键、表面阿尔法和像素阿尔法。表面alpha可以混合色键,但是每像素alpha的图像不能使用其他模式。颜色键透明度使单个颜色值透明。任何与彩色键匹配的像素都不会被绘制。表面α值是改变整个图像透明度的单个值。曲面α为255是不透明的,值为0是完全透明的。

每个像素的alpas是不同的,因为它们存储每个像素的透明度值。这允许最精确的透明度效果,但也是最慢的。每像素阿尔法不能混合表面α和色键。

对于表面的像素访问有支持。硬件表面的像素访问速度慢,不建议使用。可以使用get_at()set_at()职能。这些方法对于简单的访问是很好的,但是在处理像素时会非常慢。如果您计划做大量像素级的工作,建议使用pygame.PixelArray用于曲面直接像素访问的PYGAME对象,它提供了一个类似于表面视图的数组。对于涉及到的数学操作,请尝试pygame.surfarray使用数组接口访问表面像素数据的pyGames模块模块(它非常快,但需要NumPy)。

任何直接访问曲面像素数据的函数都需要对该曲面进行锁()。lock()unlock()表面本身没有帮助。但是,如果一个函数多次被调用,那么这个曲面的多重锁定和解锁就会有很多开销。最好在多次调用函数之前手动锁定曲面,然后在完成时解锁。所有需要锁定表面的函数都会在它们的文档中这样说。记住,只有在必要的时候才能把表面锁上。

表面像素以单个数字的形式存储在内部,其中包含所有的颜色编码。使用map_rgb()unmap_rgb()若要在单个红色、绿色和蓝色值之间转换为该曲面的打包整数,请执行以下操作。

曲面也可以引用其他曲面的部分。这些都是用subsurface()方法。任何一种表面的改变都会影响到另一种表面。

每个曲面都包含一个裁剪区域。默认情况下,剪辑区域覆盖整个曲面。如果更改,所有绘图操作只会影响较小的区域。

用于表示图像的游戏对象

表面((宽度,高度),标志=0,深度=0,掩膜=无)->表面

表面((宽,高),旗=0,面)->面

pygame.Surface.blit把一个图像画到另一个图像上
pygame.Surface.blits把许多图像画到另一张上
pygame.Surface.convert更改图像的像素格式
pygame.Surface.convert_alpha更改图像的像素格式,包括每个像素的alpha。
pygame.Surface.copy创建曲面的新副本
pygame.Surface.fill用固体颜色填充表面
pygame.Surface.scroll将表面图像移到适当位置
pygame.Surface.set_colkey设置透明颜色键
pygame.Surface.get_colorkey获取当前透明的颜色键
pygame.Surface.set_alpha为整个表面图像设置alpha值
pygame.Surface.get_alpha获取当前表面透明度值
pygame.Surface.lock锁定表面存储器以进行像素访问
pygame.Surface.unlock从像素访问中解锁表面存储器
pygame.Surface.mustlock测试Surface是否需要锁定
pygame.Surface.get_locked测试表面是否被电流锁定
pygame.Surface.get_locks获取Surface的锁。
pygame.Surface.get_at获取单个像素处的颜色值。
pygame.Surface.set_at设置单个像素的颜色值
pygame.Surface.get_at_mapped在单个像素处获取映射的颜色值。
pygame.Surface.get_palette获取8位曲面的颜色索引调色板。
pygame.Surface.get_palette_at获取调色板中单个条目的颜色
pygame.Surface.set_palette设置8位曲面的调色板
pygame.Surface.set_palette_at在8位曲面调色板中设置单个索引的颜色
pygame.Surface.map_RGB将颜色转换为映射的颜色值
pygame.Surface.unmap_RGB将映射的整数颜色值转换为颜色
pygame.Surface.set_clip设置曲面的当前裁剪区域
pygame.Surface.get_clip获取曲面的当前裁剪面积
pygame.Surface.subsurface创建引用其父表的新曲面。
pygame.Surface.get_parent查找子曲面的父表
pygame.Surface.get_abs_parent查找子曲面的顶层父级
pygame.Surface.get_offset查找子表在父级内的位置。
pygame.Surface.get_abs_offset查找子表在其顶层父级中的绝对位置。
pygame.Surface.get_size获取曲面的尺寸
pygame.Surface.get_width获取曲面的宽度
pygame.Surface.get_height求出表面的高度
pygame.Surface.get_rect求出曲面的矩形面积
pygame.Surface.get_bitsize获取表面像素格式的位深度
pygame.Surface.get_bytesize获取每个表面像素使用的字节
pygame.Surface.get_flags获取用于Surface的附加标志
pygame.Surface.get_pitch获取每一行使用的字节数
pygame.Surface.get_masks在颜色和映射的整数之间转换所需的位掩码。
pygame.Surface.set_masks设置在颜色和映射整数之间转换所需的位掩码。
pygame.Surface.get_shifts在颜色和映射的整数之间转换所需的位移位。
pygame.Surface.set_shifts设置在颜色和映射整数之间转换所需的位移位。
pygame.Surface.get_losses用于在颜色和映射的整数之间进行转换的有效位。
pygame.Surface.get_bounding_rect查找包含数据的最小RECT
pygame.facface.get_view返回Surface像素的缓冲区视图。
pygame.Surface.get_buffer获取曲面像素的缓冲区对象。
pygame.Surface._pixels_address像素缓冲地址

19、pygame.surfarray 管理点阵图像数据

函数来转换游戏表面和阵列之间的像素数据。只有当游戏可以使用外部NumPy包时,此模块才能发挥作用。

每个像素都存储为一个整数值来表示红色、绿色和蓝色。这些8位图像使用的是一个查看颜色图的值。具有较高深度的像素使用位填充过程将三个或四个值放置到一个数字中。

数组由X首先是轴,然后是Y轴心。将像素视为单个整数的数组称为2D数组。该模块还可以将红色、绿色和蓝色的颜色值分离成不同的索引。这些类型的数组称为3D数组,最后一个索引为红色为0,绿色为1,蓝色为2。

使用数组接口访问表面像素数据的pyGames模块

pygame.surfarray.array2d将像素复制到2d数组中
pygame.surfarray.pixels2d将像素引用到2d数组中
pygame.surfarray.array3d将像素复制到三维数组中
pygame.surfarray.pixels3d将像素引用到三维数组中
pygame.surfarray.Array_alpha将像素alpha复制到2d数组中。
pygame.surfarray.象素_α将象素阿尔法转换为2d数组
pygame.surfarray.象素_red将像素红色引用到2d数组中。
pygame.surfarray.象素绿色将像素绿色引用到2d数组中。
pygame.surfarray.象素_蓝色将像素蓝色引用到2d数组中。
pygame.surfarray.Array_color key将颜色键值复制到2d数组中。
鱼腥草制造表面将数组复制到新曲面
pygame.surfarray.blit阵列直接从数组值中删除
pygame.surfarray.map阵列将三维数组映射为2d数组
pygame.surfarra.use_arraytype设置用于表面阵列的数组系统。
pygame.surfarra.get_arraytype获取当前活动数组类型。
pygame.surfarra.get_arraytype获取当前支持的数组系统类型。

20、pygame.time 管理时间和帧信息

游戏的时间以毫秒为单位(1/1000秒)。大多数平台的时间分辨率限制在10毫秒左右。此分辨率以毫秒为单位,以TIMER_RESOLUTION常量。

用于监测时间的游戏模块

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

21、pygame.transform 缩放和移动图像

曲面变换是移动像素或调整像素大小的操作。所有这些函数都需要一个曲面来操作,并返回一个新的曲面。

有些转换被认为是破坏性的。这意味着,每次执行它们时,它们都会丢失像素数据。常见的例子是调整大小和旋转。因此,与其继续多次变换图像,不如对原始表面进行再变换。(例如,假设您正在动画一个弹跳弹簧,它扩展并收缩。如果将大小更改逐步应用于前面的图像,则会丢失详细信息。相反,始终从原始图像开始,并且缩放到所需的大小。)

可转换曲面的py对策模块

pygame.transform.flip垂直和水平翻转
pygame.transform.scale调整到新的分辨率
pygame.transform.rotate旋转图像
pygame.transform.rotozoom过滤尺度和旋转
pygame.transform.scale2x专用图像倍频器
pygame.transform.smoothscale平滑地将表面缩放到任意大小
pygame.transform.get_smoothscale_backend返回使用中的平滑过滤版本:“泛型”、“MMX”或“SSE”
pygame.transform.set_smoothscale_backend将平滑缩放过滤器版本设置为:“泛型”、“MMX”或“SSE”之一
pygame.transform.chop获取移除内部区域的图像的副本。
pygame.transform.laplacian在曲面中寻找边缘
pygame.transform.average_surfaces从许多曲面中找出平均表面。
pygame.transform.average_color查找表面的平均颜色。
pygame.transform.threshold查找表面中的哪个像素和多少像素在“Search_Color”或“Search_SURF”的阈值范围内。

欢迎关注公众号,原创不易,转载请注明来源哦😘

https://img-blog.csdnimg.cn/2020092912185793.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTcyODk3Ng==,size_16,color_FFFFFF,t_70#pic_center

admin-r꯭o꯭ot꯭ 系统安全 web安全 安全架构
个人公众号:爱国小白帽
推送技术原创及好用的安全工具
因为我也是小白所以文章没啥深度,很适合小白学习,有问题可以一起探讨哦
相关推荐