赞
踩
PyGame
是SDL多媒体库的Python包装器模块。它包含python函数和类,允许您使用SDL对播放cdroms、音频和视频输出以及键盘、鼠标和操纵杆输入的支持。
关于游戏的基本信息:它是什么,涉及到谁,在哪里找到它。
在多个平台上编译游戏所需的步骤。还可以帮助您为系统查找和安装预构建的二进制文件。
游戏如何处理文件系统路径。
这是许可证下的玩牌游戏。它提供了用开源软件和商业软件发布游戏的功能。一般情况下,如果游戏没有改变,它可以与任何类型的程序一起使用。
导入和初始化游戏的开始步骤。游戏包由几个模块组成。有些模块并不包括在所有平台上。
一个基础教程,涵盖了2D计算机动画背后的概念。有关绘制和清除对象以使其显示为动画的信息。
游戏的例子包括一个简单的程序,有一个互动的拳头和一个黑猩猩。这是受21世纪初令人讨厌的闪光旗帜的启发。本教程将检查示例中使用的每一行代码。
PyGame包括一个更高级别的精灵模块,以帮助组织游戏。sprite模块包括几个类,它们帮助管理几乎所有游戏类型中的细节。雪碧类比常规的游戏模块要先进一些,需要更多的理解才能正确使用。
PyGames使用NumPypython模块对图像进行有效的每个像素效果。使用表面阵列是一个高级功能,允许自定义效果和过滤器。这还研究了pyGames示例arraydemo.py的一些简单效果。
PYGAME,在1.9岁时,有一个相机模块,允许你捕捉图像,观看实时流,并做一些基本的计算机视觉。本教程涵盖这些用例。
列出了十三个有用的小窍门,让人们可以轻松地使用游戏。
一个大型教程,涵盖创建整个游戏所需的更大主题。
为屏幕获取一个显示面。
序号 | 模块 | 功能 |
---|---|---|
1 | pygame.cdrom | 访问光驱 |
2 | pygame.cursors | 加载光标 |
3 | pygame.display | 访问显示设备 |
4 | pygame.draw,pygame.gfxdraw | 绘制图像 |
5 | pygame.event | 管理事件 |
6 | pygame.font | 用于加载和呈现字体 |
7 | pygame.image | 加载和存储图片 |
8 | pygame.joystick | 用于与操纵杆,游戏手柄和轨迹球进行交互 |
9 | pygame.key | 读取键盘按键 |
10 | pygame.mixer | 声音 |
11 | pygame.mouse | 鼠标 |
12 | pygame.movie | 播放视频(已被弃用) |
13 | pygame.music | 播放音频 |
14 | pygame.overlay | 访问高级视频叠加 |
15 | pygame.rect | 管理矩形区域 |
16 | pygame.sndarray | 操作声音数据 |
17 | pygame. sprite | 操作移动图像 |
18 | pygame.surface | 管理图像和屏幕 |
19 | pygame.surfarray | 管理点阵图像数据 |
20 | pygame.time | 管理时间和帧信息 |
21 | pygame.transform | 缩放和移动图像 |
cdrom模块管理计算机上的
CD
和DVD
驱动器。它还可以控制音频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_name | CDROM驱动器的系统名称 |
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_start | CDROM轨道的启动时间 |
pygame.cdrom.CD.get_track_length | 光盘轨道长度 |
该模块包括几个标准游标。该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文件加载游标数据 |
该模块提供对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 | 返回窗口或屏幕的大小 |
在表面上绘制几个简单的形状。这些功能可用于渲染到任何格式的表面。渲染到硬件表面将比常规软件表面慢。
大多数函数采用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曲线 |
事件队列对其可容纳的事件数有上限(标准SDL 1.2为128)。当队列已满时,新事件将被静默删除。为了防止丢失事件,尤其是表示发出退出命令的输入事件,您的程序必须定期检查事件并进行处理。为了加快队列处理速度,可以
pygame.event.set_blocked()
控制队列中允许哪些事件,以限制将哪些事件放入队列。要获取各种输入设备的状态,您可以放弃事件队列,并使用其相应的模块直接访问输入设备:
pygame.mouse
pygame模块与鼠标一起使用,pygame.key
pygame模块与键盘一起使用,以及pygame.joystick
Pygame模块与操纵杆进行交互,游戏手柄和轨迹球。。如果使用此方法,请记住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 | 用于表示事件的游戏对象 |
字体模块允许将TrueType字体呈现到新的Surface对象中。它接受任何UCS-2字符(“ u0001”至“ uFFFF”)。该模块是可选的,并且需要SDL_ttf作为依赖项。 在尝试使用
pygame.font
pygame模块之前,应该测试该模块是否可用并进行了初始化。使用字体完成的大多数工作都是通过使用实际的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对象 |
图像模块是pygame的必需依赖项,但仅可选地支持任何扩展文件格式。默认情况下,它只能加载未压缩的 BMP
图像。当构建具有完整图像支持的pygame.image.load()
功能时,该功能可以支持以下格式。
JPG
PNG
GIF
(非动画)BMP
PCX
TGA
(未压缩)TIF
LBM
(和PBM
)PBM
(和PGM
,PPM
)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 |
操纵杆模块管理计算机上的操纵杆设备。游戏杆设备包括轨迹球和视频游戏风格的游戏手柄,该模块允许使用多个按钮和“帽子”。计算机可以一次管理多个操纵杆。
游戏杆类的每个实例代表一个插入计算机的游戏设备。如果游戏板上有多个操纵杆,则操纵杆对象实际上可以代表该单个游戏设备上的多个操纵杆。
为了快速初始化操纵杆模块并获取操纵杆实例列表,请使用以下代码:
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对象。 |
此模块包含用于处理键盘的功能。
在pygame.event
与事件和队列交互pygame的模块队列中获得pygame.KEYDOWN
和pygame.KEYUP
当按下和释放键盘按钮事件。这两个事件都有 key
和mod
属性。
该pygame.KEYDOWN
事件具有其他属性unicode
和 scancode
。
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 | 控制候选人列表的位置。 |
此模块包含用于加载声音对象和控制播放的类。混合器模块是可选的,取决于SDL_mixer。您的程序应在使用前测试
pygame.mixer
用于加载和播放声音的pygame模块是否可用并已初始化。混音器模块的声道数量有限,无法播放声音。通常程序会告诉pygame开始播放音频,然后它会自动选择一个可用频道。默认值为8个并发通道,但是复杂的程序可以更精确地控制通道数量及其使用。
所有声音播放都混合在后台线程中。当您开始播放声音对象时,它将在声音继续播放时立即返回。单个声音对象也可以多次主动播放。
混音器还具有特殊的流媒体频道。这用于音乐播放,可通过
pygame.mixer.music
pygame模块进行访问以控制流音频模块。混合器模块必须像其他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 | 获取播放停止时频道发送的事件 |
鼠标功能可用于获取鼠标设备的当前状态。这些功能还可以更改鼠标的系统光标。
设置显示模式后,事件队列将开始接收鼠标事件。按下和释放鼠标按钮时会生成
pygame.MOUSEBUTTONDOWN
和pygame.MOUSEBUTTONUP
事件。这些事件包含一个按钮属性,表示按下哪个按钮。鼠标滚轮滚动时将生成pygame.MOUSEBUTTONDOWN
和pygame.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 | 获取系统鼠标光标的图像 |
要播放视频中的音乐,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.0到1.0。
movie.play() 播放视频。这个函数会立即返回,视频在后台播放。这个函数可以带一个参数loops,指定重复次数。 正在播放的视频可以用
movie.stop() 停止播放。
movie.pause() 暂停播放。
movie.skip(seconds) 使视频前进seconds秒钟。
NOTE:在某些XWindow下,可能需要配置环境变量: export SDL_VIDEO_YUV_HWACCEL=0
音乐模块与
pygame.mixer
pygame模块紧密相关,用于加载和播放声音。使用音乐模块控制混音器中音乐的播放。音乐播放和常规声音播放之间的区别在于,音乐是流式传输的,永远不会一次全部加载。混音器系统一次仅支持一个音乐流。
请注意,
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 | 获取播放停止时频道发送的事件 |
叠加层对象提供了对访问硬件视频叠加层的支持。视频叠加层不使用标准
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 | 测试叠加层是否由硬件加速 |
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 | 测试字典中的所有矩形是否相交 |
函数在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 | 获取当前支持的数组系统类型。 |
这个模块包含了几个在游戏中使用的简单类。有主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.LayeredUpdates | LayeredUpdate是一个处理层并绘制类似OrderedUpdate的sprite组。 |
pygame.sprite.LayeredDirty | LayeredDirty组用于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 | 简单的测试一个精灵是否与一个组中的任何东西相交。 |
游戏曲面用于表示任何图像。该表面具有固定的分辨率和像素格式。具有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,面)->面
函数来转换游戏表面和阵列之间的像素数据。只有当游戏可以使用外部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 | 获取当前支持的数组系统类型。 |
游戏的时间以毫秒为单位(1/1000秒)。大多数平台的时间分辨率限制在10毫秒左右。此分辨率以毫秒为单位,以
TIMER_RESOLUTION
常量。
用于监测时间的游戏模块
pygame.time.获取滴答声 | 获取以毫秒为单位的时间 |
---|---|
pygame.time.wait | 暂停程序一段时间 |
pygame.time.delay | 暂停程序一段时间 |
pygame.time.set_timer | 在事件队列上重复创建事件 |
pygame.time.Clock | 创建一个对象来帮助跟踪时间 |
曲面变换是移动像素或调整像素大小的操作。所有这些函数都需要一个曲面来操作,并返回一个新的曲面。
有些转换被认为是破坏性的。这意味着,每次执行它们时,它们都会丢失像素数据。常见的例子是调整大小和旋转。因此,与其继续多次变换图像,不如对原始表面进行再变换。(例如,假设您正在动画一个弹跳弹簧,它扩展并收缩。如果将大小更改逐步应用于前面的图像,则会丢失详细信息。相反,始终从原始图像开始,并且缩放到所需的大小。)
可转换曲面的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”的阈值范围内。 |
欢迎关注公众号,原创不易,转载请注明来源哦声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。