pygame 是 Python 的 2D 游戏开发库,本资料给出使用该库构建 2D 游戏时的工程实践与性能要点。安装命令为 pip install pygame-ce(社区版,持续维护)。官方 API 参考见 https://www.pygame.org/docs/ref/。
用途与循环架构:游戏循环分三阶段——处理事件、更新模拟、渲染。运动必须基于增量时间 dt,不可用原始帧计数。dt = clock.tick(FPS) / 1000,直接使用会在卡顿帧(如系统挂起)产生过大 dt,导致实体穿透;需将 max_dt 钳制(如 1/10 秒)。更稳健的是固定时间步加渲染插值:物理恒定按 60 Hz 更新,累加器控制步数,渲染用插值因子使画面平滑,避免“死亡螺旋”。
精灵与组:组是常见开销点,Group.update() 会逐帧调用每个精灵的 update()。可选择 Group、GroupSingle(单实体 O(1) 访问)、LayeredUpdates(层排序)。静态瓦片无需 update() 时可手动绘制;自定义层级可先排序再绘制。
碰撞检测:从低成本到高成本依次为 AABB(rect.colliderect)、spritecollide、groupcollide、mask、circle。应始终以 AABB 作为第一层过滤,mask 约慢 10-100 倍。高速物体会穿透,可用扫掠 AABB 或把更新细分为子步。大量对象需空间划分避免 O(n²)。
Surface 与 blit:不要在游戏循环内分配 Surface,文本等应缓存并在内容变化时重建。图像应在加载时立即 convert()(不透明)或 convert_alpha()(带透明)。大量精灵可用 blits() 批量绘制,比逐个 blit 快 10-30%。
不适用场景:浏览器游戏(pygbag 有体积与延迟限制)、硬件加速 3D 或海量精灵、需要保留模式场景图的复杂 UI、必须发布移动端原生应用。可按需参考 drawing-surfaces、performance、sprites-camera-ui 等深入文档。