pygame中的特殊对象与模块

目录

 

pygame模块概览

一、Surface对象

二、Rect对象

三、Color对象

四、pygame模块

五、locals模块

六、display模块

七、event模块

八、sprite模块

九、draw模块

十、image模块

十一、font模块

十二、time模块


pygame模块概览

pygame中的特殊对象与模块_第1张图片

pygame中的对象:Surface、Rect、Color、BufferProxy、Overlay、PixelArray

pygame中的模块:pygame、display、draw、event、font、image、key、locals、mixer、mouse、time、music、cursors、joystick、mask、sprite、transform、freetype、gfxdraw、midi、pixelcopy、sndarray、surfarray、math、camera、cdrom、examples、fastevent、scrap、tests、touch、version

一、Surface对象

功能:在Pygame中窗口和图片都称为Surface,所谓Surface对象在Pygame中就是用来表示图像的对象。Surface 对象具有固定的分辨率和像素格式。Surface 对象通过 8 位索引调色板的 24 位色彩。

属性:

  • 尺寸参数、flags参数、depth参数、masks参数【Surface((width, height), flags=0, depth=0, masks=None) -> Surface】
  • 尺寸参数、flags参数、surface对象【Surface((width, height), flags=0, Surface) -> Surface】

调用pygame.Surface()可以创建新的图像对象。只需要指定尺寸参数,就能调用 pygame.Surface() 创建一个新的图像对象,创建出来的 Surface 默认是全黑色。如果没有指定其他参数,将创建出最适合当前显示器的 Surface 对象。flags 参数是 Surface 对象额外功能的掩码(HWSURFACE:将创建出来的 Surface 对象存放于显存中/SRCALPHA:每个像素包含一个 alpha 通道)。像素格式可以通过传递 depth 参数或一个已存在的 Surface 对象来控制。高级用法可以结合 masks 和 depth 参数,masks 是由 4 个整数组(R, G, B, A),将于每个像素的颜色进行按位与计算。通常,Surface 对象不需要 masks 参数。

其他:

  1. Surface 对象可以拥有许多其他额外的属性,例如 alpha 通道(控制透明度),colorkeys,源矩形剪切等。这些功能主要在一个 Surface 对象上绘制另一个 Surface 对象时发挥作用。
  2. Pygame 支持三种透明度类型:colorkeys,surface alphas 和 pixel alphas。surface alphas 可以和 colorkeys 混合使用,而 pixel alphas 不能和其他两个混合。【colorkeys 是指设置图像中的某个颜色值为透明(任何像素的颜色值只要跟 colorkeys 的值相同即被设置为透明)】【surface alphas 是调整整个图像的透明度,范围是 0 ~ 255(0 表示完全透明,255 表示完全不透明)】【pixel alphas是为图像中的每个像素设置一个独立的值,用于存放该像素的透明度。这是最精确的透明度设置,但也是最慢的。】
  3. Pygame 在绘制时将会尽可能的尝试硬件加速,否则采用高度优化的绘制方式实现。
  4. Surface 对象支持像素访问。可以使用 get_at() 和 set_at() 方法获取和设置像素。简单的使用它们来访问某些像素是可以的,但如果用它们来进行所有的像素访问操作就会变得相当缓慢。
  5. 任何函数如果需要访问 Surface 对象,需要将 Surface 先 lock()。这些函数可以独立 lock() 和 unlock() Surface 对象。但如果这些函数多次调用,就会有很多额外的上锁和解锁操作。最好的方法是在调用前先手动上锁,然后再完成所有调用后再手动解锁。所有需要锁定 Surface 对象的函数都在它们的文档中有仔细说明。一般情况下,完成函数的调用后要记得解锁。
  6. Surface 对象内部会将像素的所有颜色重新编码为单一的数字。使用 map_rgb() 和 unmap_rgb() 方法可以手动地进行转换。
  7. Surface 对象也可以引用部分其他 Surface 对象的内容。使用 subsurface() 方法创建即可创建子对象,其中任何 Surface 对象的改变均会影响到其他子对象。
  8. 每个 Surface 对象含有一个剪切区域,默认的剪切区域是整个对象表面。如果修改剪切区域,那么所有的绘制操作将只在剪切区域中生效。

方法详解:https://blog.csdn.net/Rita_Aloha/article/details/106188615

二、Rect对象

功能:用来存储和操作矩形区域的对象。

属性:

  • 左、上、宽和高【Rect(left, top, width, height) -> Rect】
  • 左上起始点(位置),尺寸【Rect((left, top), (width, height)) -> Rect】
  • 具有“Rect”属性的python对象【Rect(object) -> Rect】

其他:

  1. 任何需要Rect参数的pygame函数都可以通过这些值来构造Rect,得通过函数的参数动态创建矩形更加容易。
  2. 更改Rect的位置或大小的Rect函数将返回一个更改后新的Rect副本对象。未修改原始Rect对象。部分方法有一个替代的“in-place”版本,该版本方法只返回原始Rect而不返回任何内容。这些“in-place”方法用“ip”后缀表示。
  3. Rect对象有几个虚拟属性,可用于移动和对齐Rect:
    x,y
    top, left, bottom, right
    topleft, bottomleft, topright, bottomright
    midtop, midleft, midbottom, midright
    center, centerx, centery
    size, width, height(会更改矩形的尺寸)
    w,h
  4. 如果Rect的宽度或高度为非零,则对于非零测试,它将返回True。部分方法返回一个0大小的矩形来表示无效的矩形,当使用碰撞检测方法(例如collide point()、collide Rect()等)时,大小为0的矩形不会发生碰撞。

  5. Rect对象的坐标都是整数。可以将大小值编程为负值,但对于大多数操作,这些值都被视为非法矩形。

  6. 几个碰撞测试用于多个矩形之间。大多数python容器都可以进行与单个Rect的碰撞测试。

  7. 矩形覆盖的区域不包括像素的最右边和最下面的边。如果一个Rect的下边框是另一个Rect的上边框(即rect1.bottom = rect2.top),则两个在屏幕上完全相交但不重叠,rect1.colliderect(rect2)返回false。

  8. pygame 1.9.2中的新特性:Rect类可以是子类。copy()和move()等方法将识别此对象并返回子类的实例。但是,子类的__init__()方法不被调用,并且假定__new__()不带参数。因此,如果需要复制任何额外的属性,则应重写这些方法。

方法详解:https://blog.csdn.net/Rita_Aloha/article/details/106191623

三、Color对象

功能:Color类使用0到255(含)的值范围表示RGBA颜色值。

参数:

  • r (int) -- 红色值(0-255)
  • g (int) -- 绿色值(0-255)
  • b (int) -- 蓝色值(0-255)
  • a (int) --(可选)alpha值,范围为0到255,默认值为255
  • color_value (Color/str/int/tuple(int, int, int, [int])/list(int, int, int, [int])) -- 颜色值

支持表示颜色值(color_value)的数据类型:

  1. Color对象:克隆给定的Color对象
  2. 颜色名字字符串:使用的颜色的名称,例如“red”(所有支持的名称字符串都可以在colordict模块中找到)
  3. HTML格式字符串表示颜色:“#rrggbb aa”或“#rr gg bb”,其中rr、gg、bb和aa是0到0xFF(含)范围内的两位十六进制数,如果未提供,则aa(alpha)值默认为0xFF
  4. 十六进制数字:表示颜色符串“0xrrggbbaa”或“0xrrggbb”,其中rr、gg、bb和aa是0x00到0xFF(包括0x00和0xFF)范围内的两位十六进制数,如果未提供,则aa(alpha)值默认为0xFF
  5. int型:要使用的颜色的int值,使用十六进制数可以使此参数更具可读性,例如0xrrggbbaa,其中rr、g g、bb和aa是0x00到0xFF(包括0x00到0xFF)范围内的两位十六进制数,请注意aa(alpha)值对于int格式不是可选的,必须提供
  6. tuple/int颜色值列表:(R、G、B、A)或(R、G、B),其中R、G、B和A是0到255(含)范围内的int值,如果未提供,则A(alpha)值默认为255

参考:http://www.pygame.org/docs/ref/color.html

四、pygame模块

功能:pygame包表示供其他人使用的top-level包。Pygame本身被分解成许多子模块,但这并不影响使用Pygame的程序。为了方便起见,pygame中的大多数顶级变量都放在名为pygame.locals的模块中。除了import pygame之外,此模块还用于from pygame.locals import*命令下。

方法详解:https://blog.csdn.net/Rita_Aloha/article/details/106198268

五、locals模块

功能:此模块包含pygame使用的各种常量(例如flags,HWSURFACE)。它的内容会自动放在pygame模块的名称空间中。应用程序可以通过from pygame.locals import *使用pygame.locals带有的pygame常量。

pygame中的特殊对象与模块_第2张图片

六、display模块

功能:生成windows窗口,提供对pygame显示的控制。

  1. Pygame有一个单独的显示Surface,它要么包含在窗口中,要么全屏运行。创建display后,将其视为一个常规的Surface。任何更改不会立即显示在屏幕上,必须在两个翻转功能选择其一才能更新实际的display。
  2. 显示的原点(x=0,y=0),是屏幕的左上角。两个轴沿着屏幕右下角正向增加。
  3. pygame显示实际上可以在几种模式中初始化。默认情况下,显示为基本的软件驱动帧缓冲区。您可以请求特殊模块(如硬件加速和OpenGL)支持。这些由flags传递给pygame.display.set_mode()控制。
  4. Pygame在任何时候只能有一个正在运行的显示。使用pygame.display.set_mode()创建一个新的显示时将关闭前一个显示。如果需要对像素格式或显示分辨率进行精确控制,请使用以下函数查询有关显示的信息:pygame.display.mode_ok(),pygame.display.list_nodes()以及pygame.display.Info()。
  5. 创建显示Surface后,此模块中的函数将只影响现存显示。若未初始化模块,则surface将变为无效。如果设置了新的显示模式,则现有Surface将自动切换至操作新显示。
  6. 当设置显示模式时,pygame事件队列中会放置多个事件。当用户请求程序关闭时,将自动发送pygame.QUIT。窗口将接收pygame.ACTIVEEVENT事件作为显示器的输入重点。如果使用pygame.RESIZABLE flags设置显示,则当用户调整窗口尺寸时,将发送pygame.VIDEORESIZE事件。当窗口的某些部分必须重新绘制时,直接绘制到屏幕的硬件显示将获得pygame.VIDEOEXPOSE事件。
  7. 某些显示环境具有自动拉伸所有窗口的选项。启用此选项后,自动拉伸pygame窗口的外观。在pygame examples目录中,有一个示例代码(prevent_display_stretching.py)显示了如何在Microsoft Windows上禁用pygame显示的自动拉伸(需要Vista或更新版本)。

方法详解:https://blog.csdn.net/Rita_Aloha/article/details/106208691

七、event模块

功能:Pygame通过事件队列处理其所有事件消息。

  1. 输入队列在很大程度上依赖于pygame.display游戏模块。如果显示尚未初始化且未设置视频模式,则事件队列可能无法正常工作。
  2. 事件子系统应该从主线程调用。如果要将事件从其他线程发布到队列中,请使用pygame.fastevent模块。
  3. 事件队列可以容纳的事件数有上限(标准SDL 1.2为128)。当队列变满时,新的事件将被悄悄地丢弃。加快队列处理使用pygame.event.set_blocked()以限制事件进入队列。
  4. 要获取各种输入设备的状态,可以放弃事件队列,直接使用相应的模块访问输入设备:pygame.mouse, pygame.key, and pygame.joystick。如果使用这些方法,pygame需要与系统窗口管理器和平台的其他部分进行某种形式的通信。要使pygame与系统保持同步,您需要每个游戏循环调用一次pygame.event.pump()。【注意:在设备初始化之前,操纵杆不会发送任何事件。】
  5. 事件队列包含pygame.event.EventType事件对象。访问事件队列的方法多种多样,可以简单地检查事件的存在,也可以直接从堆栈中获取。
  6. 事件队列还提供一些简单的过滤,通过阻止队列中的某些事件类型,可以稍微提高性能。使用 pygame.event.set_allowed() 和 pygame.event.set_blocked()更改此筛选。默认情况下,所有事件类型都会被放置在队列中。
  7. 全部pygame.event.EventType类型实例包含一个事件类型标识符和特定于该事件类型的属性。事件类型标识符可以视为pygame.event.EventType.type属性。任何特定于事件的属性都可以通过pygame.event.EventType.__dict_ attribute 或直接通过事件对象的属性访问(作为成员通过对象的字典值查找)。
  8. 事件对象没有方法函数。用户可以通过使用pygame.event.Event()函数建立自己的新事件。
  9. 事件类型标识符介于NOEVENT和NUMEVENTS的值之间。用户定义的事件的值应在USEREVENT到NUMEVENTS-1的包含范围内。
  10. 如果两个事件是同一类型且具有相同的属性值,则它们相等。
  11. 在调试和实验时,可以打印事件对象以快速显示其类型和成员。函数pygame.event.event_name()可用于获取表示事件类型名称的字符串。

事件类型及其属性列表:

  • QUIT              none
    ACTIVEEVENT       gain, state
    KEYDOWN           key, mod, unicode, scancode
    KEYUP             key, mod
    MOUSEMOTION       pos, rel, buttons
    MOUSEBUTTONUP     pos, button
    MOUSEBUTTONDOWN   pos, button
    JOYAXISMOTION     joy, axis, value
    JOYBALLMOTION     joy, ball, rel
    JOYHATMOTION      joy, hat, value
    JOYBUTTONUP       joy, button
    JOYBUTTONDOWN     joy, button
    VIDEORESIZE       size, w, h
    VIDEOEXPOSE       none
    USEREVENT         code
  • New in pygame 1.9.2.

    在MacOSX上,当使用pygame应用程序打开文件时,将生成一个USEREVENT 其代码属性被设置为pygame.USEREVENT_DROPFILE 文件。还有一个名为 filename 的附加属性,用于存储要访问的文件的名称。

    USEREVENT         code=pygame.USEREVENT_DROPFILE, filename
    
  • New in pygame 1.9.5.

    使用SDL2编译时,pygame具有这些附加事件及其属性。

    AUDIODEVICEADDED   which, iscapture
    AUDIODEVICEREMOVED which, iscapture
    FINGERMOTION       touch_id, finger_id, x, y, dx, dy
    FINGERDOWN         touch_id, finger_id, x, y, dx, dy
    FINGERUP           touch_id, finger_id, x, y, dx, dy
    MULTIGESTURE       touch_id, x, y, pinched, rotated, num_fingers
    TEXTEDITING        text, start, length
    TEXTINPUT          text
  • New in pygame 2.0.0.

    pygame可以识别掉在窗口中的文本或文件。如果文件被删除,文件将是其路径。DROPTEXT事件仅支持X11。

    DROPBEGIN
    DROPCOMPLETE
    DROPFILE        file
    DROPTEXT        text
  • New in pygame 2.0.0.

    事件仅在pygame.midi中使用。

    MIDIIN
    MIDIOUT

方法详解:https://blog.csdn.net/Rita_Aloha/article/details/106233187

八、sprite模块

说明:这个模块包含几个简单的类,有主Sprite类和几个包含sprite的组类。这些类相当轻量级,只为大多数游戏通用的代码提供了一个起点。

功能:“sprite”,中文翻译“精灵”,在游戏动画一般是指一个独立运动的画面元素,在pygame中,就可以是一个带有图像(Surface)和大小位置(Rect)的对象。

  1. Sprite类旨在为游戏中不同类型对象提供一个基础类。还有一个基础组类(Group classe),它只存储精灵(sprite)。游戏可以创建新类型的组类,在它们包含的特殊定制的Sprite实例上进行操作。
  2. 基础的Sprite类可以将它包含的精灵绘制到一个Surface上。 Group.draw() 方法要求每个精灵都有一个 Surface.image 属性和一个 Surface.rect属性。 Group.clear() 方法同样需要这些属性,此方法可用于删除所有带背景的精灵。还有更高级的组类: pygame.sprite.RenderUpdates() and pygame.sprite.OrderedUpdates()。
  3. 该模块包含几个冲突函数,用以在具有相交边界矩形的多重组类中查找精灵。为了找到碰撞,精灵必须有一个已分配的 Surface.rect 属性。
  4. 这些组类的设计是为了高效地去除和添加精灵。允许进行简单测试查看一个精灵是否已经存在于一个组类内。给定的精灵可以存在于任意数量的组类中。游戏可以使用一些组类来控制对象渲染,使用一组完全独立的组类来控制交互或玩家移动。取代向派生的Sprite类添加类型属性或布尔量,而是考虑将精灵保持在有组织的组类中,以便在游戏中更容易查找精灵。
  5. 精灵和组类之间使用 add()  remove() 方法管理它们的关系。这些方法可以接受一个或多重的成员身份或目标。这些类的默认初始设定是将单个目标或一个目标列表视为初始成员身份。重复添加和删除组类中的同一个精灵是安全的。
  6. 虽然可以设计不根据Sprite和AbstractGroup类派生的精灵和组类,但强烈建议在添加精灵或组类时扩展这些类。
  7. 精灵不是线程安全的。因此,如果使用线程,请亲自锁定它们。

方法详解:https://blog.csdn.net/Rita_Aloha/article/details/106252900

九、draw模块

功能:在一个Surface上画几个简单的形状。这些函数将用于渲染为任何格式的Surface。渲染到硬件surfaces将比常规软件surfaces慢。

  1. 大多数函数采用width参数来表示形状边缘的宽度大小(厚度)。如果宽度为0,则将填充形状(实心)。
  2. 所有的绘图函数都与Surface的剪裁区域相关,并将被约束到该区域。函数返回一个表示更改像素的边界区域大小的矩形。此矩形是包围受影响区域的'minimum'边框。
  3. 所有绘图函数都可以接受以下格式的颜色参数:
    • pygame.Color对象
    • 一个(RGB)三元组(tuple/list)
    • 一个(RGBA)四元组(tuple/list)
    • surface像素格式的整数值(see pygame.Surface.map_rgb() and pygame.Surface.unmap_rgb())
  4. 颜色的alpha值将直接写入Surface(如果包含),但是draw函数不会明显地绘制。
  5. 通过锁定和解锁draw调用周围的surface对象,可以加速许多连续的draw调用(请参见pygame.Surface.lock())

注意:替换draw模块可参见 pygame.gfxdraw模块。

方法详解:https://blog.csdn.net/Rita_Aloha/article/details/106275344

十、image模块

功能:图像模块包含加载和保存图片以及将Surface转换为其他包可用的格式的功能。

  1. 没有image类。图像作为Surface对象加载。Surface类允许操作(绘制线、设置像素、捕获区域等)。
  2. image模块是pygame的一个必需依赖项,但它只能选择性地支持任何扩展文件格式。默认情况下,它只能加载未压缩的BMP图像。当在完整图像支持的情况下构建时pygame.image.load()下载函数可以支持以下格式:
    • JPG
    • PNG
    • GIF (non-animated)
    • BMP PCX TGA (uncompressed)
    • TIF
    • LBM (and PBM)
    • PBM (and PGMPPM)
    • XPM
  3. image模块保存图像只支持有限的格式。您可以保存为以下格式:
    • BMP
    • TGA
    • PNG
    • JPEG

方法详解:https://blog.csdn.net/Rita_Aloha/article/details/106288584

十一、font模块

说明:font模块带有内置的字体,也允许将TrueType字体呈现到新的Surface对象中。它接受任何 UCS-2 字符 ('u0001' to 'uFFFF')。此模块需要 SDL_ttf 作为依赖项。需要在尝试使用 pygame.font 模块之前测试可用并已完成初始化。

功能:

  1. 字体的大部分工作都是通过使用实际的字体对象来完成的。模块本身只能初始化模块并通过pygame.font.Font()创建字体对象。
  2. 可以使用 pygame.font.SysFont() 函数从系统中加载字体。还有一些函数可以帮助查找系统字体。
  3. Pygame带有内置的默认字体,将None作为字体名来访问。
  4. 使用基于 pygame.ftfont 的 pygame.freetype 作为 pygame.font 需在第一次导入 pygame 之前定义环境变量 PYGAME_FREETYPE 。模块 pygame.ftfont 字体是一个 pygame.font 兼容的模块,它通过所有字体模块单元测试(只有一个除外):它没有基于 SDL_ttf 字体模块的 UCS-2 限制,因此无法对大于“uFFFF”的代码点引发异常。如果 pygame.freetype 不可用,则将加载 SDL_ttf 字体模块。

方法详解:https://blog.csdn.net/Rita_Aloha/article/details/106330594

十二、time模块

功能:pygame中的时间以毫秒(1/1000秒)表示。大多数平台的时间分辨率都在10毫秒左右。此分辨率(以毫秒为单位)在 TIMER_RESOLUTION 常数中给定。

方法详解:https://blog.csdn.net/Rita_Aloha/article/details/106353482

 

 

 

 

 

pygame官方文档入口:https://www.pygame.org/docs/

其他参考文档:

  1. https://www.cnblogs.com/huwt/p/10327919.html
  2. https://zhuanlan.zhihu.com/p/136666518
  3. https://eyehere.net/2011/python-pygame-novice-professional-sprite/

 

你可能感兴趣的:(pygame中的特殊对象与模块)