当前位置:首页>python>Python·Pygame游戏从入门到精通 第02课 Pygame简介

Python·Pygame游戏从入门到精通 第02课 Pygame简介

  • 2026-09-10 13:29:28
Python·Pygame游戏从入门到精通 第02课 Pygame简介
本系列课程适合已经掌握Python基本语法、基本数据结构和面向对象编程的学生。如果你还没有相关的技能,推荐参加我们的Python基础班。
本课程的运行环境是我们的编程客户端,客户端中已安装好相关的模块,学生可以直接复制代码到编辑栏后运行。
学编程法宝——手打代码,把代码容器中的有效代码(除了注释和空行)手工打到编辑器中然后运行测试。

作者:Pete Shinners

联系方式:pete@shinners.org

愿景:构建一个真正利用 Python 优势的项目。

目标:让简单的事情变得容易,让困难的事情变得直接。

时间:始于 2000 年 10 月,六个月后,pygame 1.0 版本发布(即2001年)。

项目名称:弹球动画
项目视频:
Python代码:
import sys, pygamepygame.init()size = width, height = 320, 240speed = [2, 2]black = 0, 0, 0screen = pygame.display.set_mode(size)ball = pygame.image.load("intro_ball.gif")ballrect = ball.get_rect()while True:    for event in pygame.event.get():        if event.type == pygame.QUIT: 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("black")    screen.blit(ball, ballrect)    pygame.display.flip()
代码详解:

这是弹跳动画最简单的方式。

第 1 行:import sys, pygame

导入系统(sys)和 包含所有可用 pygame 模块的包。

第 2 行:pygame.init()

初始化pygame中全部模块。

第 4 行:size = width, height = 320, 240

设置显示窗口的大小,为了获得最佳效果,你可以将这些数字更改为匹配您自己显示器的分辨率。

第 5 行:speed = [2, 2]

水平方向速度和竖直方向速度。

第 6 行:black = 0, 0, 0

背景颜色为黑色。

第 8 行:screen = pygame.display.set_mode(size)

创建一个图形窗口,默认情况下,Pygame自动选择最佳图形模式。默认情况是可以被覆盖的。Pygame 将图像表示为 Surface 对象。“display.set_mode()” 函数创建一个新的 Surface 对象,表示实际显示的图形。您在此 Surface 上进行的任何绘图都将显示在显示器上。

第 10 行:ball = pygame.image.load("intro_ball.gif")

加载球图像。Pygame 支持多种图像格式,包括 BMP、JPG、PNG、TGA 和 GIF。“pygame.image.load()”函数返回一个包含球数据的 Surface对象。Surface对象中保留图片文件中颜色和透明度(alpha)的全部数据。另存下面的图片(文件名称:intro_ball.gif)到客户端安装目录下:

或下载链接:

https://5xstar.com/pygame/docs/_images/intro_ball.gif。

第 11 行:ballrect = ball.get_rect()

加载球图像后,创建一个名为 ballrect 的变量。这是Pygame自带的一个方便的工具型对象,类名为 Rect,它表示一个矩形区域。稍后,在动画部分代码中,我们将看到 Rect 对象可以做什么。

第 13 行:while True:

此时,程序已初始化并准备好运行。在一个无限循环中,检查用户输入,移动球,然后绘制球。

第 14 行:for event in pygame.event.get():

pygame.event.get()返回的是pygame.event.Event对象列表(List),该句是枚举全部的事件(pygame.event.Event)。

第 15 行:if event.type == pygame.QUIT: sys.exit()

检查是否发生了 QUIT 事件(点关闭按钮)。如果是,只需退出程序,pygame 将确保一切都干净地关闭。

第 17 行:ballrect = ballrect.move(speed)

更新球的位置。将 ballrect 变量按当前速度(x和y分量)移动。

第 18 行:if ballrect.left < 0 or ballrect.right > width:

如果球的左边(ballrect.left)已出了左边界(0)或右边(ballrect.right)出了右边界(width)。

第 19 行:speed[0] = -speed[0]

水平方向速度取反。

第 20 行:if ballrect.top < 0 or ballrect.bottom > height:

如果球的上边(ballrect.top)已出了上边界(0)或下边(ballrect.bottom)出了下边界(height)。

第 21 行:speed[1] = -speed[1]

竖直方向速度取反。

第 23 行:screen.fill("black")

通过涮黑色来擦除屏幕。如果你从未处理过动画,这可能看起来很奇怪。你可能会问“为什么我们需要擦除任何东西,为什么我们不能只在屏幕上移动球?”事实上,这不是计算机动画的工作方式。动画只不过是一系列单个图像,当按顺序显示时,它们很好地欺骗了人眼,使其看到运动。实际上,我们只是看到一个个图像(帧)。如果不将球从屏幕上擦除,就会看到球的“轨迹”,因为在新位置绘制球后,旧球图像还在。下面是注释掉这行后程序运行的结果视频:

已关注
关注
重播 分享 赞

第 24 行:screen.blit(ball, ballrect)

将球图像绘制到屏幕上。图像的绘制由 Surface.blit() 方法处理(第一个参数:球的Surface对象)。Surface.blit() 方法将球Surface对象中保留的图像复制到图像窗口对象screen中的新位置上。

第 25 行:pygame.display.flip()

首先注释掉这一行会发生什么情况呢?看下面的视频:

已关注
关注
重播 分享 赞

什么也没有!因为前面我们只操作屏幕的后备缓存,所以需要做最后一件事——更新可见屏幕显示。Pygame 使用双缓冲区管理显示。当我们完成绘图后,调用pygame.display.flip()方法使缓存图像可见。这种缓冲机制确保我们只在屏幕上看到完全绘制好的帧,否则可能会看到正在绘制的帧。

报名咨询:

微信:码助教

微信号:www_5xstar_com 13729135043

Python·Pygame游戏从入门到精通系列:

Python·Pygame游戏从入门到精通  第01课 快速入门

资料库:https://5xstar.com

最新文章

随机文章