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会主动等待;如果超过,那就没办法了——你的游戏会变卡。

核心概念:FPS(Frames Per Second,每秒帧数)。60FPS意味着每秒刷新60次画面,人眼看起来就是流畅的动画。低于30FPS就会感觉卡顿。

我建议你一开始就养成加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环境搭建的核心流程:

Pygame环境搭建核心流程 1. 安装Pygame 2. 初始化窗口 3. 事件循环 4. 设置FPS 关键点 • pip install pygame • pygame.init() • set_mode() • event.get() • clock.tick(FPS) • pygame.display.flip()

这张图把咱们这节课的四个核心步骤串起来了。从安装到跑起来,每一步都不可或缺。你照着这个流程走,基本不会出大问题。

我的经验:刚开始学Pygame时,别急着写复杂逻辑。先把窗口跑起来,确认环境没问题,再一步步加功能。我见过太多人一上来就写几百行代码,结果环境没配好,全白费。