Python Pygame (游戏开发库)2025年3月8日 | 阅读 16 分钟 ![]() Python 是最流行的编程语言,或者说它是下一代编程语言也不为过。在计算机科学的每个新兴领域,Python 都积极地展现着它的存在。Python 拥有各种领域的庞大库,例如机器学习(Numpy、Pandas、Matplotlib)、人工智能(Pytorch、TensorFlow)和游戏开发(Pygame、Pyglet)。 在本教程中,我们将学习如何使用Pygame(Python 库)进行游戏开发。 Pygame
Pygame 的先决条件在学习 Pygame 之前,我们需要了解我们想要开发什么样的游戏。
Pygame 安装在 Windows 上安装 Pygame在安装 Pygame 之前,系统中应已安装 Python,建议使用 3.6.1 或更高版本,因为它对初学者更友好,而且运行速度更快。安装 Pygame 主要有两种方法,如下所示: 1. 通过 pip 安装:通过 pip 工具安装 Pygame 是个好方法(Python 使用它来安装包)。命令如下: 2. 通过 IDE 安装:第二种方法是通过 IDE 进行安装,这里我们使用 Pycharm IDE。在 pycharm 中安装 pygame 非常简单。可以通过运行上面的命令在终端中安装,或者使用以下步骤:
![]()
![]()
![]() 要检查 pygame 是否已正确安装,请在 IDLE 解释器中,键入以下命令并按 Enter 键: 如果命令成功运行且没有出现任何错误,则表示我们已成功安装 Pygame 并找到了适合 pygame 编程的 IDLE 版本。 ![]() 在 Mac 上安装 Pygame以下是在 Mac 上安装 Pygame 的步骤:
![]() 注意:如果您使用的是不同版本的 Python,请下载最后一个链接。
简单的 Pygame 示例这是 Pygame 的一个简单程序,可以提供语法基本概念。 输出 成功执行后,它将显示如下输出窗口: ![]() 让我们逐行理解上面程序的语法: import pygame - 这提供了对 pygame 框架的访问,并导入 pygame 的所有函数。 pygame.init() - 用于初始化 pygame 的所有必需模块。 pygame.display.set_mode((width, height)) - 用于显示所需大小的窗口。返回值是一个 Surface 对象,我们将在其中执行图形操作。 pygame.event.get()- 用于清空事件队列。如果我们不调用此函数,窗口消息将开始堆积,并且操作系统会认为游戏变得无响应。 pygame.QUIT - 用于在单击窗口角落的关闭按钮时终止事件。 pygame.display.flip() - Pygame 是双缓冲的,所以这会切换缓冲区。调用此函数以使您对游戏屏幕进行的任何更新都可见,这是至关重要的。 Pygame SurfacePygame Surface 用于显示任何图像。Surface 具有预定义的解析度和像素格式。Surface 颜色默认为黑色。其大小通过传递size参数来定义。 Surface 可以具有许多额外的属性,例如alpha 平面、颜色键、源矩形剪辑等。blit 例程将尝试使用硬件加速,如果可能的话;否则,它们将使用高度增强的软件 blitting 方法。 Pygame Clock在 Pygame 中,时间以毫秒(1/1000 秒)表示。Pygame Clock 用于跟踪时间。时间对于创建动画、播放声音或响应任何事件至关重要。通常,我们不按秒计算时间。我们按毫秒计算。Clock 还提供各种函数来帮助控制游戏的帧率。以下是一些函数: tick() 此函数用于更新时钟。语法如下: 此方法应每帧调用一次。它将计算自上次调用以来经过了多少毫秒。framerate参数是可选的,如果将其作为参数传递,则该函数将延迟以使游戏运行速度低于给定的每秒帧数。 tick_busy_loop() tick_busy_loop() 与 tick() 相同。通过每帧调用Clock.tick_busy_loop(20)一次,程序永远不会超过每秒 20 帧。语法如下: get_time() get_time() 用于获取上一个 tick。在 Clock.tick() 的最后两次调用之间经过的毫秒数。 Pygame BlitPygame blit 是将游戏对象渲染到 Surface 的过程,这个过程称为blitting。当我们创建游戏对象时,我们需要渲染它。如果我们不渲染游戏对象而运行程序,它将输出一个黑色窗口。 Blitting 是任何游戏中较慢的操作之一,因此我们需要小心,不要在每一帧中过度 blit 到屏幕上。用于 blitting 的主要函数是 blit(),如下所示: blit() 此函数用于将一个图像绘制到另一个图像上。绘制可以放在 dest 参数处。dest 参数可以是表示源左上角的坐标对。 Pygame 添加图像要在窗口上添加图像,首先我们需要通过调用 Surface 构造函数并传递宽度和高度元组来实例化一个空白 Surface。 上面一行创建了一个 100*100 像素的空白 24 位 RGB 图像,默认颜色为黑色。 要实现 Surface 的透明初始化,请传递 SRCALPHA 参数。 考虑以下在 Surface 上显示图像的示例: 输出 ![]() Pygame RectRect 用于在 Pygame 中绘制矩形。Pygame 使用 Rect 对象来存储和操作矩形区域。Rect 可以由 left、top、width 和 height 值组合而成。它也可以由已经是 Rect 的 Python 对象或具有名为 "rect" 的属性的对象创建。 rect() 函数用于执行矩形的位置或大小的更改。它返回具有受影响更改的 Rect 的新副本。原始矩形不会发生任何修改。 Rect 对象具有各种虚拟属性,可用于移动和对齐 Rect: 可以通过分配大小、宽度或高度来更改矩形的尺寸。所有其他赋值都会移动矩形而不调整其大小。 如果 Rect 的宽度或高度为非零值,则对于非零测试,它将返回 True。某些方法返回大小为 0 的 Rect 来表示无效矩形。 让我们使用 Rect 在 pygame 窗口上创建一个矩形: 执行上述代码后,它将在 pygame 窗口上显示一个矩形。 ![]() Pygame KeydownPygame KEYDOWN 和 KEYUP 检测按键物理按下和释放的事件。KEYDOWN 检测按键,KEYUP 检测按键释放。这两个事件(按键按下和按键释放)都有两个属性,如下所示:
考虑以下按键按下和释放的示例: 输出 ![]() 让我们看另一个例子: 在上面的代码中,矩形将被显示在 pygame 窗口上。 ![]() 当我们按下向下键时,矩形会向下移动。输出如下: ![]() Pygame DrawPygame 提供了几何函数来在 Surface 上绘制简单的形状。这些函数可用于渲染到任何格式的 Surface。大多数函数都接受一个 width 参数来指定形状边缘的厚度。如果 width 传递为 0,则形状将是实心的(填充的)。 所有绘图函数都接受 color 参数,该参数可以是以下格式之一:
绘制矩形以下函数用于在给定 Surface 上绘制矩形: 参数
绘制多边形以下函数用于在给定 Surface 上绘制多边形:
参数
注意:- 如果 len(points) < 3 或 points 不是序列或 points 不包含数字对,则会引发 ValueError。绘制椭圆以下函数用于在给定 Surface 上绘制椭圆: 参数
绘制直线此方法用于在给定 Surface 上绘制直线。没有端点。 参数
绘制圆形以下函数用于在给定 Surface 上绘制圆形:
参数
绘制椭圆弧以下函数用于在给定 Surface 上绘制椭圆弧: 参数
start_angle 和 stop_angle 参数有三个条件:
让我们看一个例子 输出 ![]() Pygame 文本和字体Pygame 还提供了渲染字体和文本的功能。我们可以使用pygame.font.SysFont()函数从系统中加载字体。Pygame 自带内置的默认字体,可以通过传递字体名称或 None 来访问。有许多函数有助于处理字体。 字体对象使用pygame.font.Font()创建。实际的字体对象完成了大多数与字体相关的工作。字体对象通常用于将文本渲染到新的 Surface 对象。一些重要的字体函数如下: render() 此函数用于在新 Surface 上绘制文本。Pygame 没有在现有 Surface 上绘制文本的功能。它创建一个新的 Surface 并将其渲染为指定的文本。语法如下: size() 此函数用于确定渲染文本所需的空格或定位。它还可以用于自动换行和其他布局效果。语法如下: set_bold() 此函数用于粗体渲染文本。语法如下: 让我们看下面的例子 输出 ![]() 注意 - 必须记住,某些字体必须安装在用户的计算机上。如果您不知道字体是否已安装,pygame 有以下函数可以枚举计算机上所有可用的字体:还有另一个函数可以实例化默认系统字体: 使用以上任何函数,我们都可以处理游戏中的精美字体。 Pygame Sprite 和碰撞检测pygame sprite 是一个二维图像,它是大型图形场景的一部分。通常,sprite 将是场景中的某个对象。 使用 sprite 的最大优势之一是能够将它们组合使用。如果精灵在组中,我们可以用一个命令轻松地移动和绘制所有精灵。 Sprite 模块包含用于游戏内的各种简单类。在使用 pygame 时,可以选择使用 Sprite 类和不同的组类。 Pygame 提供精灵和精灵组,用于碰撞检测。碰撞检测是屏幕上的两个对象相互碰撞的过程。例如,如果玩家被敌人的子弹击中,它可能会失去一条命,或者程序需要知道玩家何时碰到硬币,以便它们被自动拾取。 让我们看下面的例子 输出 ![]() 按下箭头键后,一个矩形将与另一个矩形碰撞,输出如下: ![]() PygletPython 还提供了一个名为 pyglet 的游戏库,它是一个跨平台的窗口和多媒体库,用于 Python。它用于开发游戏和其他视觉丰富的应用程序。它支持用户界面事件处理、窗口管理、OpenGL 图形、加载图像和视频以及播放声音和音乐。 Pyglet 的一些特点如下:
Pyglet 的安装很简单;可以通过键入以下命令来安装: 请看以下示例。 输出 ![]() Pygame 与 Pyglet 的比较
在本教程中,我们通过在 Python 3 编程环境中安装开源模块 pygame,讨论了简单的游戏开发编程方法。 |
我们请求您订阅我们的新闻通讯以获取最新更新。