📜  PyGame 教程(1)

📅  最后修改于: 2023-12-03 14:45:43.658000             🧑  作者: Mango

PyGame 教程

PyGame 是一个 Python 实现的 2D 游戏开发框架,可以在 Windows、MacOS 和 Linux 平台上运行。它使用了 SDL 图形库来实现游戏的交互和图形渲染,具有易于学习、轻量级和丰富的文档资源等特点,已被广泛应用于游戏开发、计算机图形学等领域。

安装 PyGame

在使用 PyGame 开发游戏之前,需要先安装 PyGame 包。PyGame 依赖于 NumPy 和 SDL 库,我们可以使用 pip 命令直接安装:

pip install pygame

如果出现安装错误,可以参考 PyGame 文档中的安装指南。

PyGame 基础

下面我们来看一个简单的 PyGame 程序:

import pygame

pygame.init()

width = 640
height = 480

screen = pygame.display.set_mode((width, height))

pygame.display.set_caption("PyGame Demo")

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((255, 255, 255))
    pygame.draw.circle(screen, (255, 0, 0), (320, 240), 50)
    pygame.display.flip()

pygame.quit()

这个程序会创建一个窗口,然后在窗口中绘制一个红色的圆形。我们来逐行解释一下:

  • import pygame 导入 PyGame 模块。
  • pygame.init() 初始化 PyGame。
  • width = 640height = 480 定义窗口的大小。
  • screen = pygame.display.set_mode((width, height)) 创建窗口对象。
  • pygame.display.set_caption("PyGame Demo") 设置窗口标题。
  • running = True 定义一个变量,用来表示程序是否继续运行。
  • while running: 进入主循环,直到用户关闭窗口为止。
  • for event in pygame.event.get(): 处理事件队列中的事件,例如键盘输入、鼠标点击等。
  • if event.type == pygame.QUIT: 判断用户是否关闭了窗口。
  • screen.fill((255, 255, 255)) 用白色清空窗口。
  • pygame.draw.circle(screen, (255, 0, 0), (320, 240), 50) 绘制一个半径为 50 的红色圆形。
  • pygame.display.flip() 更新窗口显示。
  • pygame.quit() 关闭 PyGame。
PyGame 图形绘制

PyGame 提供了多种图形绘制函数,例如绘制线条、矩形、圆形等。这些函数通常会接受一个 Surface 对象作为参数,表示绘制要显示的目标窗口。

例如,我们可以使用 pygame.draw.line() 函数来绘制一条线:

import pygame

pygame.init()

width = 640
height = 480

screen = pygame.display.set_mode((width, height))

pygame.display.set_caption("PyGame Demo")

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((255, 255, 255))
    pygame.draw.line(screen, (255, 0, 0), (0, 0), (width, height))
    pygame.display.flip()

pygame.quit()

这个程序会绘制一条从窗口左上角到右下角的红色线段。

除了 pygame.draw.line() 函数外,还有许多其他图形绘制函数可供使用,例如:

  • pygame.draw.rect() 绘制矩形。
  • pygame.draw.circle() 绘制圆形。
  • pygame.draw.ellipse() 绘制椭圆。
  • pygame.draw.polygon() 绘制多边形。
PyGame 键盘事件处理

PyGame 可以捕捉键盘事件,例如按键和释放按键。可以使用 pygame.event.get() 函数从事件队列中获取事件,并使用事件的类型和属性来处理事件数据。

例如,我们可以编写一个程序,当用户按下空格键时,在窗口中心显示一个文本框:

import pygame
import pygame.freetype

pygame.init()

width = 640
height = 480

screen = pygame.display.set_mode((width, height))

pygame.display.set_caption("PyGame Demo")

font = pygame.freetype.SysFont('Arial', 24)
text = font.render('Hello, PyGame!', (0, 0, 0))[0]
text_rect = text.get_rect(center=(width//2, height//2))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                screen.blit(text, text_rect)

    pygame.display.flip()

pygame.quit()

这个程序会在窗口中心绘制一段文本,当用户按下空格键时,绘制的文本会出现在窗口中。pygame.freetype 模块提供了更高级的文本渲染函数,可以自定义字体、字号、颜色等属性。

PyGame 音频处理

PyGame 还提供了音频播放和录音的支持。可以使用 pygame.mixer 模块来播放或录制音频文件。

例如,我们可以编写一个简单的音乐播放器,当用户按下空格键时,播放一首音乐:

import pygame

pygame.init()

width = 640
height = 480

screen = pygame.display.set_mode((width, height))

pygame.display.set_caption("PyGame Demo")

pygame.mixer.music.load('audio.mp3')

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                pygame.mixer.music.play()

    pygame.display.flip()

pygame.quit()

这个程序会在打开窗口时加载音乐文件,并在用户按下空格键时播放音乐。pygame.mixer 模块还提供了其他音频处理函数,例如设置音量、暂停和恢复播放等。