Pygame ,一个强大的游戏创作引擎

0.开篇废话(允许跳过)

接下来,系列“游戏制作,但是使用Python,还能离线玩?干!”会为您介绍使用Python完成游戏创作的相关内容,但是,请注意:Python不能用于开发过度精细的3D游戏,如想尝试3D游戏,请移步:虚幻引擎5 - Unreal Engine

请认准系列名称,都在部分0.中,学习前请确认,以免造成内容不连续

今天的内容为 Pygame 游戏 库的简要介绍,后续更新的内容为 Pygame 优秀样例

1.Pygame是个啥?

Pygame是一个基于Python的库,用于创建游戏、图形和音频应用程序。它提供了一个简单易用的接口,使开发者能够轻松地创建游戏,并处理游戏中的图形、动画、声音、碰撞检测等等。

1.1安装它

祖传安装指令(Cmd):

​pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple

1.2 Pygame特性

  • Python最经典的2D游戏开发第三方库,也支持3D游戏开发(不建议使用Python开发3D,详见0.)
  • Pygame适合用于游戏逻辑验证、游戏入门及系统演示验证
  • Pygame是一种游戏开发引擎,基本逻辑具有参考价值
  • 使用Pygame可以开发出优秀的游戏!
  • Pygame游戏可以离线使用

2.基本操作

  1. 初始化和退出 Pygame:

    • pygame.init():初始化所有导入的 Pygame 模块。
    • pygame.quit():卸载所有导入的 Pygame 模块 。
  2. 设置显示模式:

    • pygame.display.set_mode():初始化一个准备显示的窗口或屏幕 。
  3. 事件处理:

    • pygame.event.get():从事件队列中获取事件。
    • pygame.QUIT:当用户点击窗口关闭按钮时产生的事件类型 。
  4. 绘图:

    • pygame.draw.rect():在 Surface 对象上绘制矩形。
    • pygame.draw.circle():根据圆心和半径绘制圆形。
    • pygame.draw.line():绘制线段 。
  5. 图像加载和保存:

    • pygame.image.load():从文件加载新图片。
    • pygame.image.save():将图像保存到磁盘上 。
  6. 字体和文本:

    • pygame.font.Font():从系统字体库创建一个 Font 对象。
    • font.render():将文本渲染为图像,可进行绘制 。
  7. 声音和音乐播放:

    • pygame.mixer.Sound():从文件或缓冲区对象创建新的 Sound 对象。
    • sound.play():开始播放声音。
    • pygame.mixer.music.play():播放音乐流 。
  8. 时钟控制:

    • pygame.time.Clock():创建时钟对象,帮助控制游戏循环的时间 。
  9. 精灵和精灵组:

    • pygame.sprite.Sprite():创建 Sprite 对象,用于游戏中的精灵。
    • pygame.sprite.Group():创建精灵组,方便对多个精灵进行操作 。
  10. 矩形操作:

    • pygame.Rect():创建矩形对象,用于存储和操作矩形区域。
    • rect.colliderect():检测两个矩形是否重叠 。

………………

以上是pygame的基础操作,详见Pygame Front Page — pygame v2.6.0 文档 

3.高级功能

Pygame不仅仅是一个简单的游戏库,它还提供了一些高级功能,使得开发者能够实现更加复杂的游戏机制和视觉效果。

精灵动画

Pygame的pygame.sprite.Sprite类是实现游戏内角色和对象动画的基础。通过继承这个类,开发者可以创建具有独立行为和动画的对象。使用update()方法来改变精灵的状态,并通过blit()方法将精灵绘制到屏幕上,可以实现平滑的动画效果。

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((50, 50))
        self.image.fill((255, 0, 0))  # 红色方块
        self.rect = self.image.get_rect()

    def update(self):
        # 更新精灵的位置或状态
        self.rect.x += 1
碰撞检测

碰撞检测是游戏中一个核心功能,Pygame提供了多种方式来检测游戏中对象之间的碰撞。最基本的是使用colliderect()方法,它检测两个矩形是否重叠。

if player.rect.colliderect(obstacle.rect):
    print("碰撞发生!")

对于更复杂的形状,可以使用pygame.mask模块,它提供了一种基于位掩码的碰撞检测方法,适用于不规则形状。

粒子系统

粒子系统是创建复杂视觉效果的强大工具,如爆炸、烟雾或火焰。通过创建一个粒子类,管理它的生命周期和速度,可以生成令人印象深刻的动画效果。

class Particle(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((3, 3))
        self.image.fill((255, 255, 255))  # 白色粒子
        self.rect = self.image.get_rect()
        self.lifespan = 100  # 粒子的生命周期

    def update(self):
        self.lifespan -= 1
        self.image.set_alpha(self.lifespan)  # 逐渐变透明
        if self.lifespan <= 0:
            self.kill()  # 生命周期结束时销毁粒子
音频播放

Pygame的pygame.mixer模块提供了丰富的音频播放功能。开发者不仅可以播放音效,还可以控制音量、实现音乐的淡入淡出效果。

pygame.mixer.init()
sound = pygame.mixer.Sound('explosion.wav')
sound.play()  # 播放音效

通过这些高级功能,Pygame为开发者提供了创建专业级别游戏的工具。无论是2D平台游戏、角色扮演游戏还是策略游戏,Pygame都能够提供必要的支持。


请注意,以上代码由AI生成,仅作为示例,可能需要根据实际的游戏逻辑进行调整和完善。

4.用户输入处理

用户输入处理是游戏开发中的核心功能之一,它允许玩家通过各种输入设备与游戏进行交互。以下是对不同类型用户输入处理的详细解释和简化的代码示例。

1.键盘输入处理

键盘输入是最常见的用户输入方式之一。在Pygame中,可以通过检测KEYDOWNKEYUP事件来响应玩家的键盘操作。

import pygame

# 初始化pygame
pygame.init()

# 创建窗口
screen = pygame.display.set_mode((640, 480))

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:  # 按下ESC键退出游戏
                running = False

    # 游戏逻辑和渲染更新...

# 退出pygame
pygame.quit()

2.鼠标输入处理

鼠标输入包括检测鼠标的移动、点击等操作。Pygame可以捕获MOUSEBUTTONDOWNMOUSEBUTTONUPMOUSEMOTION事件。

# 在上面键盘输入的基础上添加鼠标事件处理

# 检测鼠标点击
if event.type == pygame.MOUSEBUTTONDOWN:
    if event.button == 1:  # 左键
        print("鼠标左键被按下")

# 检测鼠标移动
if event.type == pygame.MOUSEMOTION:
    print(f"鼠标移动到: {event.pos}")

3.游戏手柄输入处理

游戏手柄提供了更多控制选项,如摇杆和按钮。Pygame可以通过JOYBUTTONDOWNJOYBUTTONUP事件来处理手柄输入。

# 在上面键盘输入的基础上添加游戏手柄事件处理

# 初始化joystick模块
pygame.joystick.init()

# 检测手柄数量
print(f"已连接的手柄数量: {pygame.joystick.get_count()}")

# 遍历所有手柄
for i in range(pygame.joystick.get_count()):
    joystick = pygame.joystick.Joystick(i)
    joystick.init()

# 游戏主循环中添加手柄事件处理
for event in pygame.event.get():
    if event.type == pygame.JOYBUTTONDOWN:
        print(f"手柄按钮 {event.button} 被按下")

以上是本期全部内容,想要了解更多内容?

详见官方文档:Pygame Front Page — pygame v2.6.0 文档

下期更新内容:Pygame 优秀样例


The End

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值