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:

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

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

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

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

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

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

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

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

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

    29. pygame.Rect():创建矩形对象,用于存储和操作矩形区域。
    30. 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

    作者:李昕壑

    物联沃分享整理
    物联沃-IOTWORD物联网 » Pygame:强大的游戏开发引擎详解

    发表回复