4、Pygame环境搭建:从安装到跑通第一个窗口
说实话,很多初学者在环境搭建这一步就卡住了。不是装不上,就是装上了跑不起来。我当年第一次搞Pygame,光一个窗口初始化就折腾了半小时——后来发现是Python版本和Pygame版本不匹配。这节课,咱们就把这些坑一个个填平。
4.1 安装Pygame库
安装其实很简单,但有几个细节要注意。
第一步:确认Python环境
打开终端(Windows用cmd或PowerShell,Mac/Linux用终端),输入:
python --version
确保版本在3.6以上。我个人习惯用Python 3.8或3.9,这两个版本对Pygame的兼容性最好。
第二步:用pip安装
pip install pygame
如果你电脑上同时有Python 2和3,可能需要用:
pip3 install pygame
嗯,这里有个坑——我曾经在公司的内网环境装Pygame,结果pip超时了。解决办法是换国内镜像源:
pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple
pip list | grep pygame(Windows用 pip list | findstr pygame)检查是否安装成功。
4.2 初始化窗口——你的第一个Pygame程序
装好了,咱们来写个最简单的窗口。你想想看,动画系统再复杂,起点也就是一个能显示东西的窗口。
import pygame
import sys
# 初始化Pygame
pygame.init()
# 设置窗口尺寸
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
# 设置窗口标题
pygame.display.set_caption("我的第一个Pygame窗口")
# 主循环
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 填充背景色(RGB)
screen.fill((240, 248, 255))
# 刷新显示
pygame.display.flip()
这段代码干了三件事:
- pygame.init()——初始化所有Pygame模块。我建议你每次都写这一句,别偷懒只初始化特定模块,容易出奇怪的问题。
- pygame.display.set_mode()——创建窗口。参数是一个元组,宽和高。
- screen.fill()——填充背景色。RGB值,我用了浅蓝色(240, 248, 255),看着舒服。
pygame.quit() 和 sys.exit()。我曾经见过有人直接关窗口,结果进程还在后台挂着,CPU风扇呼呼转。
4.3 事件循环——让窗口活起来
上面的代码里有个 while True 循环,这就是事件循环。说白了,就是程序一直在那里等着,看用户有没有做什么操作——点关闭、按键盘、动鼠标。
事件循环的基本结构:
running = True
while running:
# 1. 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
# 2. 更新游戏状态(后面章节会讲)
# 3. 绘制画面
screen.fill((240, 248, 255))
pygame.display.flip()
pygame.quit()
sys.exit()
我习惯用 running 变量来控制循环,而不是直接 while True 加 sys.exit()。为什么?因为这样更灵活——你可以在退出前做一些清理工作,比如保存游戏进度。
| 事件类型 | 说明 | 常用场景 |
|---|---|---|
| pygame.QUIT | 用户点击关闭按钮 | 退出程序 |
| pygame.KEYDOWN | 按下键盘按键 | 角色移动、菜单选择 |
| pygame.KEYUP | 松开键盘按键 | 停止移动 |
| pygame.MOUSEBUTTONDOWN | 鼠标按下 | 点击按钮、射击 |
4.4 设置FPS——让动画不再「飞」
你试试上面那个代码,如果不加FPS控制,窗口刷新的速度会快得离谱。CPU直接拉满,风扇起飞。我刚开始做动画时就没加FPS,结果动画像开了加速器一样,根本没法看。
Pygame里控制FPS用的是 pygame.time.Clock:
clock = pygame.time.Clock()
FPS = 60
while running:
# 控制帧率
clock.tick(FPS)
# 事件处理、更新、绘制...
# ...
clock.tick(FPS) 会确保循环每秒最多执行FPS次。比如设置FPS=60,那每帧大约16.67毫秒。如果一帧内的代码执行时间少于16.67ms,clock会主动等待;如果超过,那就没办法了——你的游戏会变卡。
我建议你一开始就养成加Clock的习惯。哪怕现在只是显示一个静态窗口,也把FPS控制加上。后面做动画时,你会发现这个习惯救了你无数次。
4.5 完整代码模板
把上面所有内容整合起来,就是咱们后续所有章节的基础模板:
import pygame
import sys
# 初始化
pygame.init()
SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("动画刷新系统")
# FPS控制
clock = pygame.time.Clock()
FPS = 60
# 主循环
running = True
while running:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 绘制
screen.fill((240, 248, 255))
# 刷新
pygame.display.flip()
clock.tick(FPS)
# 退出
pygame.quit()
sys.exit()
这个模板,你以后每个项目都可以直接复制过去改。我自己的项目文件夹里就存着这个模板,新建项目时直接拿来用。
4.6 本章知识体系
下面这张图帮你理清Pygame环境搭建的核心流程:
这张图把咱们这节课的四个核心步骤串起来了。从安装到跑起来,每一步都不可或缺。你照着这个流程走,基本不会出大问题。