Pygame 核心
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/pygame-core-m8f0。
技能介绍
要解决的问题
import pygame 之后,你能很快写出一个能跑的窗口,却很难写出一个行为稳定的游戏。典型症状包括:换台机器速度就变了,按住方向键时快时慢,精灵偶尔凭空消失,窗口标题栏直接变成「未响应」。这些问题大多不是逻辑写错了,而是主循环、时间步和渲染顺序这类底层约定没被遵守。该技能把这几个约定固化成一套最小骨架,让你不必每次从零回忆。
技能如何工作
核心是一条确定的流水线:
- 选对发行版:项目应建立在
pygame-ce 2.5+上——仍在维护的社区分支,导入名同样是import pygame。同一个环境里不要同时装pygame和pygame-ce,导入冲突很难排查。 - 初始化与开窗:
pygame.init()、pygame.display.set_mode((w, h)),再挂一个pygame.time.Clock()。 - 单循环四步:
events → update → draw → flip。每帧必须泵一次事件队列,更新状态,重绘,最后pygame.display.flip()。 - 时间步解耦:取
dt = clock.tick(60) / 1000(秒),所有位移按dt缩放。位置存成浮点数,只在blit时转成整数Rect。 - 两种输入并行:离散动作走事件(
KEYDOWN、MOUSEBUTTONDOWN),持续移动走轮询(pygame.key.get_pressed())。 - 对象交给 Sprite + Group:子类化
pygame.sprite.Sprite,以image与rect为核心属性,之后由group.update(dt)和group.draw(screen)负责批量更新与绘制。
配套的还有碰撞检测、最小主循环骨架,以及一份踩坑清单:忘了泵事件队列会让窗口假死;按固定量每帧位移会让速度快慢随机器而变;没有调用 .convert() 或 .convert_alpha() 的 Surface 会让 blit 慢到掉帧;斜向移动要先归一化方向向量,否则它天然比单轴移动快。
适用边界
它只覆盖 2D。3D 渲染请另选引擎,与 pygame 无关的 Python 语言问题也不在范围内。跨引擎的存档读写、可重绑的输入架构,应交给专门的 save-systems 与 input-systems。若项目规模超出了 pygame 的表达力,可考虑 Bevy 这类 ECS 引擎;LÖVE/Lua 下的同类骨架见 love2d-core。分组变体、像素级掩码碰撞、精灵图切片、动画与音效等进阶内容,收录在随附的 references/sprites-and-collision.md 中。
使用场景
- 第一次用 pygame-ce 做 2D 游戏,需要先搭出事件、更新、绘制、flip 的主循环骨架
- 不同机器上角色移动速度不一致,要把固定每帧位移改成按 dt 缩放的每秒像素数
- 窗口经常卡死或标题栏显示未响应,需要确认是否每帧调用了 pygame.event.get() 或 pump()
- 想用 Sprite 与 Group 管理同屏多个角色,并对它们做批量更新、绘制与碰撞检测
适合人员
- 刚转向 pygame-ce 的游戏开发者,想按社区约定搭好主循环和精灵管理,而不是凭记忆反复试错
- 用 pygame 写课程作业或 2D 原型的 Python 开发者,需要帧率无关的移动与可靠的事件处理
- 业余做过小动画但被窗口假死、精灵消失困扰的爱好者,想先修好循环、时间步和绘制顺序再继续加玩法
- 想评估 pygame-ce 能否承载当前项目的开发者,需要对照适用边界决定是否转向 ECS 引擎