Python之Pygame游戏编程详解

一、介绍

1.1  定义

Pygame是一种流行的Python游戏开发库,它提供了许多功能,使开发人员可以轻松创建2D游戏。它具有良好的跨平台支持,可以在多个操作系统上运行,例如Windows,MacOS和Linux。在本文中,我们将介绍Pygame库的特点和用法,帮助您了解如何使用Pygame库进行游戏开发。它提供了诸多操作模块,比如图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏)模块等。

官方地址:https://www.pygame.org/

1.2 相关函数

1) pygame.sprite 代表游戏图像的更高级别的对象

pygame.sprite.Sprite:可见游戏对象的简单基类。
pygame.sprite.WeakSprite:Sprite 的子类,弱引用其组。这意味着它所属的任何组如果在其他地方没有被引用,都会被自动垃圾收集。
pygame.sprite.DirtySprite:Sprite 的子类,具有更多的属性和功能。
pygame.sprite.Group:用于保存和管理多个 Sprite 对象的容器类。
pygame.sprite.WeakDirtySprite:WeakSprite 和 DirtySprite 的子类,结合了这两个类的优点。
pygame.sprite.RenderPlain:与 pygame.sprite.Group 相同
pygame.sprite.RenderClear:与 pygame.sprite.Group 相同
pygame.sprite.RenderUpdates:跟踪脏更新的组子类。
pygame.sprite.OrderedUpdates:RenderUpdates 子类,按添加顺序绘制 Sprite。
pygame.sprite.LayeredUpdates:LayeredUpdates 是一个精灵组,它像 OrderedUpdates 一样处理图层和绘制。
pygame.sprite.LayeredDirty:LayeredDirty 组适用于 DirtySprite 对象。子类 LayeredUpdates。
pygame.sprite.GroupSingle:容纳单个精灵的组容器。
pygame.sprite.spritecollide:查找组中与另一个精灵相交的精灵。
pygame.sprite.collide_rect:使用矩形检测两个精灵之间的碰撞。
pygame.sprite.collide_rect_ratio:使用按比例缩放的矩形来检测两个精灵之间的碰撞。
pygame.sprite.collide_circle:使用圆圈检测两个精灵之间的碰撞。
pygame.sprite.collide_circle_system:使用按比例缩放的圆圈来检测两个精灵之间的碰撞。
pygame.sprite.collide_mask:使用遮罩检测两个精灵之间的碰撞。
pygame.sprite.groupcollide:找到两组之间发生碰撞的所有精灵。
pygame.sprite.spritecollideany:简单测试精灵是否与组中的任何内容相交。

2)pygame.Surface 图像和屏幕的对象

pygame.Surface.blit:将一幅图像绘制到另一幅图像上
pygame.Surface.blitz:将许多图像绘制到另一个图像上
pygame.Surface.convert:更改图像的像素格式
pygame.Surface.convert_alpha:更改图像的像素格式,包括每个像素 alpha
pygame.Surface.copy:创建 Surface 的新副本
pygame.Surface.fill:用纯色填充表面
pygame.Surface.scroll:将表面图像移动到位
pygame.Surface.set_colorkey:设置透明色键
pygame.Surface.get_colorkey:获取当前透明色键
pygame.Surface.set_alpha:设置完整 Surface 图像的 alpha 值
pygame.Surface.get_alpha:获取当前Surface透明度值
pygame.Surface.lock:锁定 Surface 内存以进行像素访问
pygame.Surface.unlock:从像素访问中解锁 Surface 内存
pygame.Surface.mustlock:测试 Surface 是否需要锁定
pygame.Surface.get_locked:测试 Surface 当前是否已锁定
pygame.Surface.get_locks:获取 Surface 的锁
pygame.Surface.get_at:获取单个像素的颜色值
pygame.Surface.set_at:设置单个像素的颜色值
pygame.Surface.get_at_mapped:获取单个像素处的映射颜色值
pygame.Surface.get_palette:获取 8 位 Surface 的颜色索引调色板
pygame.Surface.get_palette_at:获取调色板中单个条目的颜色
pygame.Surface.set_palette:设置 8 位 Surface 的调色板
pygame.Surface.set_palette_at:设置 8 位 Surface 调色板中单个索引的颜色
pygame.Surface.map_rgb:将颜色转换为映射颜色值
pygame.Surface.unmap_rgb:将映射的整数颜色值转换为 Color
pygame.Surface.set_clip:设置Surface的当前剪切区域
pygame.Surface.get_clip:获取Surface当前的裁剪区域
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:获取 Surface 的尺寸
pygame.Surface.get_width:获取 Surface 的宽度
pygame.Surface.get_height:获取 Surface 的高度
pygame.Surface.get_rect:获取 Surface 的矩形面积
pygame.Surface.get_bitsize:获取 Surface 像素格式的位深度
pygame.Surface.get_bytesize:获取每个 Surface 像素使用的字节数
pygame.Surface.get_flags:获取用于 Surface 的附加标志
pygame.Surface.get_pitch:获取每个 Surface 行使用的字节数
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:找到包含数据的最小矩形
pygame.Surface.get_view:返回 Surface 像素的缓冲区视图。
pygame.Surface.get_buffer:获取 Surface 像素的缓冲区对象。
pygame.Surface._pixels_address:像素缓冲区地址
pygame.Surface.premul_alpha:返回表面的副本,其中 RGB 通道预先乘以 alpha 通道。

3)pygame.surfarray 操作图像像素数据 

pygame.surfarray.array2d:将像素复制到二维数组中
pygame.surfarray.pixels2d:将参考像素放入二维数组中
pygame.surfarray.array3d:将像素复制到 3d 数组中
pygame.surfarray.pixels3d:将参考像素放入 3d 数组中
pygame.surfarray.array_alpha:将像素 alpha 复制到二维数组中
pygame.surfarray.pixels_alpha:将像素 alpha 参考到二维数组中
pygame.surfarray.array_red:将红色像素复制到二维数组中
pygame.surfarray.pixels_red:将红色参考像素放入二维数组中。
pygame.surfarray.array_green:将绿色像素复制到二维数组中
pygame.surfarray.pixels_green:将绿色参考像素放入二维数组中。
pygame.surfarray.array_blue:将蓝色像素复制到二维数组中
pygame.surfarray.pixels_blue:将蓝色参考像素放入二维数组中。
pygame.surfarray.array_colorkey:将 colorkey 值复制到二维数组中
pygame.surfarray.make_surface:将数组复制到新表面
pygame.surfarray.blit_array:直接从数组值进行 Blit
pygame.surfarray.map_array:将 3d 数组映射到 2d 数组
pygame.surfarray.use_arraytype:设置用于表面阵列的阵列系统
pygame.surfarray.get_arraytype:获取当前活动的数组类型。
pygame.surfarray.get_arraytypes:获取当前支持的阵列系统类型。

4)python 管理pygame的顶级功能

pygame.init:初始化所有导入的 pygame 模块
pygame.quit:取消初始化所有 pygame 模块
pygame.get_init:如果 pygame 当前已初始化,则返回 True
pygame.error:标准 pygame 异常
pygame.get_error:获取当前错误信息
pygame.set_error:设置当前错误信息
pygame.get_sdl_version:获取SDL的版本号
pygame.get_sdl_byteorder:获取SDL的字节顺序
pygame.register_quit:注册一个在 pygame 退出时调用的函数
pygame.encode_string:对 Unicode 或 bytes 对象进行编码
pygame.encode_file_path:将 Unicode 或 bytes 对象编码为文件系统路径

 5)pygame.BufferProxy 表面像素的阵列协议视图

该类是 Surface 对象通过数组协议导出的一个缓冲对象

pygame.BufferProxy.parent:返回该 BufferProxy 的 Surface 对象, 或者调用 BufferProxy 的对象
pygame.BufferProxy.length:返回缓冲区的长度,单位是字节。类似于len字段
pygame.BufferProxy.length:将缓冲区的数据拷贝并返回,为str或bytes对象
pygame.BufferProxy.write:将字节写入缓冲区

6)pygame.Color 颜色表示

该类是pygame中用于描述颜色的模块

pygame.Color.r:取或设置 Color 的红色值。
pygame.Color.g:取或设置 Color 的绿色值。
pygame.Color.b:取或设置 Color 的蓝色值。
pygame.Color.a:取或设置 Color 的 alpha 值。
pygame.Color.cmy:取或设置 Color 的 CMY 表示形式。
pygame.Color.white:取或设置 Color 的 HSVA 表示形式。
pygame.Color.hsla:取或设置 Color 的 HSLA 表示形式。
pygame.Color.i1i2i3:取或设置 Color 的 I1I2I3 表示形式。
pygame.Color.normalize:返回颜色的标准化 RGBA 值。
pygame.Color. Correct_gamma:将特定的伽马值应用于颜色。
pygame.Color.set_length:将 Color 中的元素数量设置为 1、2、3 或 4。
pygame.Color.grayscale:返回颜色的灰度
pygame.Color.lerp:返回给定 Color 的线性插值。
pygame.Color.premul_alpha:返回一个 Color,其中 r、g、b 分量已乘以 alpha。
pygame.Color.update:设置颜色元素

7)pygame.cursors 加载和编译光标图像

pygame.cursors.compile:从简单字符串创建二进制游标数据
pygame.cursors.load_xbm:从 XBM 文件加载游标数据
pygame.cursors.Cursor:代表光标的 pygame 对象

8)pygame.display 配置显示表面 

pygame.display.init:初始化显示模块
pygame.display.quit:取消初始化显示模块
pygame.display.get_init:如果显示模块已初始化,则返回 True
pygame.display.set_mode:初始化窗口或屏幕以进行显示
pygame.display.get_surface:获取当前设置的显示表面的引用
pygame.display.flip:将完整显示 Surface 更新到屏幕
pygame.display.update:更新软件显示的部分屏幕
pygame.display.get_driver:获取pygame显示后端的名称
pygame.display.Info:创建视频显示信息对象
pygame.display.get_wm_info:获取有关当前窗口系统的信息
pygame.display.get_desktop_sizes:获取活动桌面的大小
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_displays:返回显示数量
pygame.display.get_window_size:返回窗口或屏幕的大小
pygame.display.get_allow_screensaver:返回是否允许屏幕保护程序运行。
pygame.display.set_allow_screensaver:设置屏保是否可以运行

 9)pygame.draw 在曲面上绘制简单的形状,例如直线和椭圆

pygame.draw.rect:画一个矩形
pygame.draw.polygon:画一个多边形
pygame.draw.circle:画一个圆圈
pygame.draw.ellipse:画一个椭圆
pygame.draw.arc:画一条椭圆弧
pygame.draw.line:画一条直线
pygame.draw.lines:绘制多条连续的直线段
pygame.draw.aline:画一条抗锯齿直线
pygame.draw.aalines:绘制多个连续的抗锯齿直线段

10)pygame.event 管理来自各种输入设备和窗口平台的传入事件

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.set_keyboard_grab:抓取可以捕获系统键盘快捷键,例如 Alt+Tab 或 Meta/Super 键。
pygame.event.get_keyboard_grab:获取当前键盘抓取状态
pygame.event.post:将新事件放入队列中
pygame.event.custom_type:制作自定义用户事件类型
pygame.event.Event:用于表示事件的 pygame 对象

 11)pygame.examples 各种程序演示了各个 pygame 模块的使用

pygame.examples.alien.main:播放完整的外星人示例
pygame.examples.stars.main:运行一个简单的星空示例
pygame.examples.chimp.main:击中移动的黑猩猩
pygame.examples.moveit.main:在屏幕上显示动画对象
pygame.examples.fonty.main:运行字体渲染示例
pygame.examples.freetype_misc.main:运行 FreeType 渲染示例
pygame.examples.vgrade.main:显示垂直渐变
pygame.examples.eventlist.main:显示 pygame 事件
pygame.examples.arraymo.main:显示各种冲浪阵列效果
pygame.examples.sound.main:加载并播放声音
pygame.examples.sound_array_demos.main:播放各种sndarray效果
pygame.examples.liquid.main:显示动画液体效果
pygame.examples.glcube.main:使用 OpenGL 显示动画 3D 立方体
pygame.examples.scrap_clipboard.main:访问剪贴板
pygame.examples.mask.main:使用碰撞检测显示多个图像相互反弹
pygame.examples.testsprite.main:显示大量移动的精灵
pygame.examples.headless_no_windows_needed.main:写入一个图像文件,该图像文件是输入文件的平滑缩放副本
pygame.examples.joystick.main:演示操纵杆功能
pygame.examples.blend_fill.main:演示各种 Surface.fill 方法混合选项
pygame.examples.blit_blends.main:使用 Surface.fill 的替代添加剂填充
pygame.examples.cursors.main:显示两个不同的自定义光标
pygame.examples.pixelarray.main:显示各种像素阵列生成的效果
pygame.examples.scaletest.main:使用 smoothscale 交互缩放图像
pygame.examples.midi.main:运行一个 MIDI 示例
pygame.examples.scroll.main:运行一个显示放大图像的 Surface.scroll 示例
pygame.examples.camera.main:显示从连接的摄像机实时捕获的视频
pygame.examples.playmus.main:播放音频文件

 12)pygame.font 加载和渲染 TrueType 字体

pygame.font.init:初始化字体模块
pygame.font.quit:取消初始化字体模块
pygame.font.get_init:true 如果字体模块已初始化
pygame.font.get_default_font:获取默认字体的文件名
pygame.font.get_sdl_ttf_version:获取SDL_ttf版本
pygame.font.get_fonts:获取所有可用的字体
pygame.font.match_font:在系统上查找特定字体
pygame.font.SysFont:从系统字体创建一个 Font 对象
pygame.font.Font:从文件创建一个新的 Font 对象

 13)pygame.freetype 增强的 pygame 模块用于加载和渲染字体

pygame.freetype.get_error:返回最新的 FreeType 错误
pygame.freetype.get_version:返回 FreeType 版本
pygame.freetype.init:初始化底层 FreeType 库。
pygame.freetype.quit:关闭底层 FreeType 库。
pygame.freetype.get_init:如果 FreeType 模块当前已初始化,则返回 True。
pygame.freetype.was_init:已弃用:使用 get_init() 代替。
pygame.freetype.get_cache_size:返回字形大小写大小
pygame.freetype.get_default_resolution:返回默认像素大小(以每英寸点数为单位)
pygame.freetype.set_default_resolution:设置模块的默认像素大小(以每英寸点数为单位)
pygame.freetype.SysFont:从系统字体创建一个 Font 对象
pygame.freetype.get_default_font:获取默认字体的文件名
pygame.freetype.Font:从支持的字体文件创建新的 Font 实例。

 14)pygame.gfxdraw 抗锯齿绘制函数

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.atrigon:绘制抗锯齿三角形/三角形
pygame.gfxdraw.filled_trigon:绘制实心三角形/三角形
pygame.gfxdraw.polygon:画一个多边形
pygame.gfxdraw.aapolygon:绘制抗锯齿多边形
pygame.gfxdraw.filled_polygon:绘制一个填充多边形
pygame.gfxdraw.textured_polygon:绘制一个有纹理的多边形
pygame.gfxdraw.bezier:绘制贝塞尔曲线

 15)pygame.image 加载、保存和传输表面

pygame.image.load:从文件(或类似文件的对象)加载新图像
pygame.image.save:将图像保存到文件(或类似文件的对象)
pygame.image.get_sdl_image_version:获取正在使用的 SDL_Image 库的版本号
pygame.image.get_extended:测试是否可以加载扩展图像格式
pygame.image.tostring:将图像传输到字节缓冲区
pygame.image.tobytes:将图像传输到字节缓冲区
pygame.image.fromstring:从字节缓冲区创建新的 Surface
pygame.image.frombytes:从字节缓冲区创建新的 Surface
pygame.image.frombuffer:创建一个新的 Surface,在字节缓冲区内共享数据
pygame.image.load_basic:从文件(或类似文件的对象)加载新的 BMP 图像
pygame.image.load_extended:从文件(或类似文件的对象)加载图像
pygame.image.save_extended:将 png/jpg 图像保存到文件(或类似文件的对象)

 16)pygame.joystick 管理操纵杆设备

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

 17)pygame.key 管理键盘设备

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.key_code:从密钥名称获取密钥标识符
pygame.key.start_text_input:开始处理 Unicode 文本输入事件
pygame.key.stop_text_input:停止处理 Unicode 文本输入事件
pygame.key.set_text_input_rect:控制候选列表的位置

 18)pygame.locals Pygame 常量

该模块包含 pygame 使用的各种常量。其内容自动放置在 pygame 模块命名空间中。

19)pygame.mixer 加载并播放声音

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.get_sdl_mixer_version:获取混音器的 SDL 版本
pygame.mixer.Sound:从文件或缓冲区对象创建新的 Sound 对象
pygame.mixer.Channel:创建一个 Channel 对象来控制播放

20)pygame.mouse 管理鼠标设备和显示

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:获取当前鼠标光标

21)pygame.mixer.music 播放流媒体音乐曲目

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:获取播放停止时通道发送的事件

22)pygame.PixelArray 操作图像像素数据

pygame.PixelArray.surface:获取 PixelArray 使用的 Surface。
pygame.PixelArray.itemsize:返回像素数组项的字节大小
pygame.PixelArray.my:返回维数。
pygame.PixelArray.shape:返回数组大小。
pygame.PixelArray.strides:返回每个数组维度的字节偏移量。
pygame.PixelArray.make_surface:从当前 PixelArray 创建一个新 Surface。
pygame.PixelArray.replace:将 PixelArray 中传递的颜色替换为另一种颜色。
pygame.PixelArray.extract:从 PixelArray 中提取传递的颜色。
pygame.PixelArray.compare:将 PixelArray 与另一个 PixelArray 进行比较。
pygame.PixelArray.transpose:交换 x 轴和 y 轴。
pygame.PixelArray.close:关闭 PixelArray,并释放 Surface 锁。

23)pygame.Rect 矩形的灵活容器


pygame.Rect.copy:复制矩形
pygame.Rect.move:移动矩形
pygame.Rect.move_ip:将矩形移动到位
pygame.Rect.inflate:增大或缩小矩形尺寸
pygame.Rect.inflate_ip:就地增大或缩小矩形尺寸
pygame.Rect.scale_by:按给定的乘数缩放矩形
pygame.Rect.scale_by_ip:就地增大或缩小矩形尺寸
pygame.Rect.update:设置矩形的位置和大小
pygame.Rect.clamp:将矩形移动到另一个矩形内
pygame.Rect.clamp_ip:将矩形移动到另一个矩形内
pygame.Rect.clip:在另一个矩形内裁剪一个矩形
pygame.Rect.clipline:在矩形内裁剪一条线
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.collideobjects:测试列表中的任何对象是否相交
pygame.Rect.collideobjectsall:测试列表中的所有对象是否相交
pygame.Rect.collidedict:测试字典中的一个矩形是否相交
pygame.Rect.collidedictall:测试字典中的所有矩形是否相交

24)pygame.scrap 本机剪贴板访问

pygame.scrap.init:初始化废料模块。
pygame.scrap.get_init:如果 scrap 模块当前已初始化,则返回 True。
pygame.scrap.get:从剪贴板获取指定类型的数据。
pygame.scrap.get_types:获取可用剪贴板类型的列表。
pygame.scrap.put:将数据放入剪贴板。
pygame.scrap.contains:检查剪贴板中给定类型的数据是否可用。
pygame.scrap.lost:指示 pygame 应用程序是否已丢失剪贴板所有权。
pygame.scrap.set_mode:设置剪贴板访问模式。

25)pygame.sndarray 操纵声音样本数据

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

26)pygame.tests 测试pygame

pygame.tests.run:运行 pygame 单元测试套件

27)pygame.time 管理时间和帧率

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

28)pygame.transform 调整图像大小并移动图像

pygame.transform.flip:垂直和水平翻转
pygame.transform.scale:调整大小到新分辨率
pygame.transform.scale_by:使用标量调整大小到新分辨率
pygame.transform.rotate:旋转图像
pygame.transform.rotozoom:过滤缩放和旋转
pygame.transform.scale2x:专门的图像倍增器
pygame.transform.smoothscale:平滑地将表面缩放到任意尺寸
pygame.transform.smoothscale_by:使用标量调整大小到新分辨率
pygame.transform.get_smoothscale_backend:返回正在使用的 smoothscale 滤波器版本:“GENERIC”、“MMX”或“SSE”
pygame.transform.set_smoothscale_backend:将 smoothscale 滤波器版本设置为以下之一:“GENERIC”、“MMX”或“SSE”
pygame.transform.chop:获取已删除内部区域的图像的副本
pygame.transform.laplacian:查找曲面中的边缘
pygame.transform.average_surfaces:从多个曲面中找出平均曲面。
pygame.transform.average_color:求表面的平均颜色
pygame.transform.grayscale:对表面进行灰度化
pygame.transform.threshold:查找表面中的哪些像素以及有多少像素在“search_color”或“search_surf”的阈值内。

二、Pygame的安装和使用

1、安装

pip install pygame

2、应用案例

1)按键(Alt + W/A/S/D)操作小球移动

# -*- coding:utf-8 -*-
import pygame

# 初始化pygame
pygame.init()

# 设置窗口标题
title = "Pygame应用案例-按键移动的小球"
pygame.display.set_caption(title)

screen = pygame.display.set_mode((1280, 720))
clock = pygame.time.Clock()
running = True
dt = 0

player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)

while running:
    # 事件轮询 - pygame.QUIT 事件表示用户单击X关闭您的窗口
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 用一种颜色填充屏幕以擦除上一帧中的任何内容
    screen.fill("purple")

    pygame.draw.circle(screen, "red", player_pos, 40)

    keys = pygame.key.get_pressed()
    if keys[pygame.K_w]:
        player_pos.y -= 300 * dt
    if keys[pygame.K_s]:
        player_pos.y += 300 * dt
    if keys[pygame.K_a]:
        player_pos.x -= 300 * dt
    if keys[pygame.K_d]:
        player_pos.x += 300 * dt

    # 更新全部显示 
    pygame.display.flip()

    # 将FPS限制为60
    # dt是自上一帧以来的增量时间(以秒为单位),用于帧速率
    dt = clock.tick(60) / 1000

pygame.quit()

2)规则移动的小球

# -*- coding:utf-8 -*-
import sys
import pygame

# 初始化pygame
pygame.init()

# 设置窗口标题
title = "Pygame应用案例-规则移动的小球"
pygame.display.set_caption(title)

# 显示窗口
width = 800
height = 600
screen = pygame.display.set_mode((width, height))  

ball = pygame.image.load("ball.png")  # 加载图片
ballrect = ball.get_rect()  # 根据图片大小获取矩形区域

speed = [5, 5]  # 设置移动的X轴、Y轴距离
clock = pygame.time.Clock()  # 创建时钟对象
# 执行死循环,确保窗口一直显示
while True:

    # 表示每秒钟60次帧刷新
    clock.tick(60)

    # 检查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果点击关闭窗口,则退出
            pygame.quit()  # 退出pygame
            sys.exit()

    ballrect = ballrect.move(speed)  # 通过再次赋值移动小球
    # 碰到左右边缘
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]  #如果碰到边距则反方向移动
    # 碰到上下边缘
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]

    # 填充颜色
    screen.fill("purple")
    # 此函数是将图片推送到窗口上,第一个参数为图片第二个参数为图片位置
    screen.blit(ball, ballrect) 
    # 更新全部显示 
    pygame.display.flip()  
 
pygame.quit()

更多游戏案例可前往官网(https://www.pygame.org/tags/all)下载并查看 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/185471.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux后台运行Python的py文件,如何使ssh工具退出后仍能运行

常规运行 python3 mysqlbak.py ssh工具退出后&#xff0c;或ctrlc中断后&#xff0c;程序将不在运行 后台运行 nohup python3 mysqlbak.py > mysqlbak.log & > mysqlbak.log为可选项&#xff0c;输出日志到指定文件&#xff0c;如果不写&#xff0c;输出日志到nohup…

【Seata源码学习 】篇四 TM事务管理器是如何开启全局事务

TM发送 单个或批量 消息 以发送GlobalBeginRequest消息为例 TM在执行拦截器链路前将向TC发送GlobalBeginRequest 消息 io.seata.tm.api.DefaultGlobalTransaction#begin(int, java.lang.String) Overridepublic String begin(String applicationId, String transactionServi…

网络安全工程师究竟是什么?怎么入门?

首先啊骚年们我们必须先了解网络安全这个行业究竟是干啥的。 是打ctf的&#xff1f;一个个都像韩商言吴白那么帅刷刷敲几个代码就能轻易夺旗&#xff1f; 还是像十大黑客之一的米特尼克一样闯入了“北美空中防务指挥系统”的计算机主机内&#xff0c;还在被通缉逃跑期间控制了…

鸿蒙原生应用/元服务开发-AGC分发如何上架HarmonyOS应用

一、上架整体流程 二、上架HarmonyOS应用 获取到HarmonyOS应用软件包后&#xff0c;开发者可将应用提交至AGC申请上架。上架成功后&#xff0c;用户即可在华为应用市场搜索获取开发者的HarmonyOS应用。 配置应用信息 1.登录AppGallery Connect&#xff0c;选择“我的应用”。…

最重要的BI测试-适用于任何BI和分析平台

为什么 BI 测试是答案 相信你的数据可视化是成功执行商业智能 (BI) 和分析项目的关键因素。我敢肯定&#xff0c;你遇到过以下情况&#xff1a;业务主管或业务用户反馈说他们的分析看起来不对&#xff0c;他们的 KPI 看起来有问题&#xff0c;或者速度太慢而无法使用。要问自己…

Spring框架学习 -- Bean的生命周期和作用域

目录 前言 案例 案例分析 作用域的定义 Bean对象的6种作用域 Singleton prototype 设置作用域 ​编辑延迟初始化 Spring的执行流程 Bean的生命周期 前言 我们可以类比一下普通变量的生命周期和作用域, 大多数变量的生命周期和作用域都被限定在了花括号内 {}, 除…

贝锐花生壳:无需公网IP、简单3步,远程访问群晖NAS

面对NAS远程访问难题&#xff0c;贝锐花生壳一招搞定&#xff01;并且无需公网IP、简单3步&#xff0c;即可实现固定域名远程访问NAS。 步骤1&#xff1a; 目前&#xff0c;群晖NAS已在套件中心内置花生壳客户端。 浏览器进入群晖NAS的DSM管理界面&#xff0c;点击【套件中心】…

SSM大学生社团信息管理系统-99953,(免费领取源码)计算机毕业设计选题开题+程序定制+论文书写+答辩ppt书写 包售后 全流程

SSM大学生社团信息管理系统APP 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;高校当然也不能排除在外。大学生社团信息管理系统APP是以实际运用为开发背景&#xff0c…

[Python程序打包: 使用PyInstaller制作单文件exe以及打包GUI程序详解]

文章目录 概要Python 程序打包—使用 Pyinstaller 打包 exePython程序打包—使用Pyinstaller打包GUI程序Python程序打包—使用 Pyinstaller 设置 exe 图标小结 概要 使用PyInstaller工具将Python程序打包成可执行&#xff08;EXE&#xff09;文件。将Python程序打包成EXE的好处…

unittest指南——不拼花哨,只拼实用

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

看完就会,从抓包到接口测试的全过程解析【1500字保姆级教程】

一、为什么抓包 1、从功能测试角度 通过抓包查看隐藏字段 Web 表单中会有很多隐藏的字段&#xff0c;这些隐藏字段一般都有一些特殊的用途&#xff0c;比如收集用户的数据&#xff0c;预防 CRSF 攻击&#xff0c;防网络爬虫&#xff0c;以及一些其他用途。这些隐藏字段在界面…

从裸机启动开始运行一个C++程序(十四)

前序文章请看&#xff1a; 从裸机启动开始运行一个C程序&#xff08;十三&#xff09; 从裸机启动开始运行一个C程序&#xff08;十二&#xff09; 从裸机启动开始运行一个C程序&#xff08;十一&#xff09; 从裸机启动开始运行一个C程序&#xff08;十&#xff09; 从裸机启动…

socket can中是如何根据 结构体can_bittiming_const中的字段 计算bitrate的?

在 SocketCAN 中&#xff0c;can_bittiming_const 结构体用于表示 CAN 总线的定时参数&#xff0c;包括位率&#xff08;bitrate&#xff09;的计算。can_bittiming_const 包含了许多与位率相关的参数&#xff0c;其中一些参数用于计算实际的位率。 下面是一些与位率计算相关的…

js实现数组的上下移动

思路&#xff1a;上移表示index索引位置减去1&#xff0c;下移表示index索引位置增加1。使用数组的splice方法实现。例如上移&#xff1a;splice(元素当前索引位置&#xff0c;1(删除1个元素)&#xff0c;‘元素当前索引位置 - 1’)。

ruoyi 若依框架采用第三方登录

在项目中&#xff0c;前后端分离的若依项目&#xff0c;需要通过统一认证&#xff0c;或者是第三方协带认证信息跳转到本系统的指定页面。需要前后端都做相应的改造&#xff0c;由于第一次实现时已过了很久&#xff0c;再次重写时&#xff0c;发现还是搞了很长时间&#xff0c;…

任意分圆环下的 RLWE:如何产生正确的噪声分布

参考文献&#xff1a; [Con09] Conrad K. The different ideal[J]. Expository papers/Lecture notes. Available at: http://www.math.uconn.edu/∼kconrad/blurbs/gradnumthy/different.pdf, 2009.[LPR10] Lyubashevsky V, Peikert C, Regev O. On ideal lattices and learn…

友思特分享 | Neuro-T:零代码自动深度学习训练平台

来源&#xff1a;友思特 智能感知 友思特分享 | Neuro-T&#xff1a;零代码自动深度学习训练平台 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 工业自动化、智能化浪潮涌进&#xff0c;视觉技术在其中扮演了至关重要的角色。在汽车、制造业、医药、芯片、食品等行业…

日本服务器访问速度和带宽有没有直接关系?

​  对于许多网站和应用程序来说&#xff0c;服务器的访问速度是至关重要的。用户希望能够快速加载页面、上传和下载文件&#xff0c;而这些都与服务器的带宽有关。那么&#xff0c;日本服务器的访问速度和带宽之间是否存在直接关系呢? 我们需要了解什么是带宽。带宽是指网络…

NVMe-oF E-JBOF设计解析:WD RapidFlex网卡、OpenFlex Data24

OpenFlex Data24 NVMe-oF Storage Platform WD的SN840 NVMeSSD新品并没有太吸引我注意&#xff0c;因为它还是PCIe 3.0接口的&#xff0c;要知道Intel的PCIe 4.0 SSD都已经推出了。 但上面这个NVMe-oF&#xff08;NVMe over Fabric&#xff09;EBOF&#xff08;区别于普通JBO…

中国上市公司漂绿程度及其同构指数(多种测算方法,2012-2022年)

数据简介&#xff1a;20 世纪 90 年代开始&#xff0c;国际上关于绿色市场和绿色管理的学术文献日渐丰富&#xff0c;众多企业积极响应碳排放政策的号召&#xff0c;但其中有多少企业是实实在在的进行碳减排技术创新&#xff0c;又有多少企业打着绿色低碳行为的口号来吸引眼球、…