当前位置:   article > 正文

Python -- 利用pygame库进行游戏开发基础_python pygame库

python pygame库

一、什么是pygame

        Pygame是一个基于Python的游戏开发库,它提供了一系列的工具和接口,使开发人员能够轻松地创建各种类型的游戏,包括2D游戏和简单的3D游戏,主要是为了开发2D游戏而生。具有免费、开源,支持多种操作系统,具有良好的跨平台性等优点。

在开始学习Pygame之前,您需要先安装Pygame库。您可以通过以下命令在命令行中安装

pip install pygame

 输入以下代码检测pygame是否安装成功

  1. import pygame
  2. pygame.ver

二、基本屏幕设置使用方法

        pygame基本使用模块
模块名功能
pygame.cdrom访问光驱
pygame.cursors加载光标
pygame.display访问显示设备
pygame.draw绘制形状、线和点
pygame.event管理事件
pygame.font使用字体
pygame.image加载和存储图片
pygame.joystick使用游戏手柄或类似的东西
pygame.key读取键盘按键
pygame.mixer声音
pygame.mouse鼠标
pygame.movie播放视频
pygame.music播放音乐
pygame.overlay访问高级视频叠加
pygame.rect管理矩形区域
pygame.sndarray操作声音数据
pygame.sprite操作移动图像
pygame.surface管理图像和屏幕
pygame.surfarray管理点阵图像数据
pygame.time管理时间和帧信息
pygame.transform缩放和移动图像

        模块的具体使用方法
         1、pygame概括化使用流程
      (1)pygame.init()初始化

                pygame.init() 是 Pygame 库中的初始化函数,它用于初始化 Pygame 的各种子模块和设置,以准备创建游戏或图形应用程序。调用 pygame.init() 的目的是确保 Pygame 环境正确准备好,以便在程序中使用 Pygame 的各种功能。

这个函数通常在程序的开始处调用,以确保 Pygame 能够正常工作。在调用 pygame.init() 之后,你可以使用 Pygame 的各种模块来处理图形、音频、事件等。例如,你可以创建游戏窗口、加载图像、播放音频等操作。

一旦初始化完成,你可以开始使用 Pygame 编写游戏逻辑并启动游戏循环。请注意,一旦初始化完成,你也可以通过 pygame.quit() 来清理 Pygame 环境和资源,通常是在程序结束时使用,以确保资源被正确释放。

                初始化时显示

pygame.init()

                pygame.init():该代码是整个程序的第一句代码,它的作用是自动检测Pygame软件包是否正常,并完成包括display(显卡模块),font(字体模块),mixer(声音模块),cursors(光标控制模块)等的模块的初始化
                pygame.display.set_mode():创建一个窗口或屏幕,其大小由(width, height)指定,width表示窗口宽度,height代表屏幕高度。这个函数返回一个Surface对象,代表了整个屏幕。

         (2)创建一个Surface对象

                  Surface是Pygame的编程窗口,像一个画布一样,能在上面进行显示,图像和文本能显示在Surface上

          (1)创建Surface对象
screen = pygame.display.set_mode((800, 600))
            (2)创建一个带文本的页面
  1. # 设置字体
  2. f = pygame.font.Font(None, 36)
  3. # 创建包含文字的Surface对象
  4. text = f.render("简单的Pygame窗口", True, (255, 255, 255), (0, 0, 0))
  5. # 获取文本的大小并创建一个合适的Rect
  6. textRect = text.get_rect()
  7. textRect.topleft = (100, 50) # 设置文本的左上角位置
  8. # 通过blit方法将其绘制出来
  9. screen.blit(text, textRect)
         (3)创建一个带图像的画面
  1. import pygame
  2. pygame.init()
  3. screen = pygame.display.set_mode((800, 600))
  4. image = pygame.image.load('155410.png')
  5. screen.blit(image, (0, 0)) # 图像左上角在窗口的(0, 0)坐标
  6. pygame.display.flip() # 更新整个屏幕的显示
         (4)事件监听
  1. #所有get()获取事件
  2. for event in pygame.event.get():
  3. #判断事件类型
  4. if event.type == pygame.QUIT:
  5. pygame.quit()

                利用 for event in pygame.event.get对上次调用后所有事件进行遍历,其中pygame.envent.get()会获取pygame事件队列里面的所有事件,并返回一个事件列表(这些事件可能包括按键按下、鼠标点击、窗口关闭等用户或系统的交互动作)

                if event.type == pygame.QUIT,此语句是用来检测当前遍历的事件是否属于pygame.QUIT类型(pygame.QUIT类型是一种特殊的事件类型,一般当用户点击窗口关闭按钮是pygame会产生该事件)

                pygame.quit是一个很重要的函数,这个函数用于正确的关闭pygame库,并且释放资源退出程序

         (5)游戏循环

                   游戏循环的作用

  1. while True:
  2. for event in pymage.event.get():
  3. if event.type == pygame.QUIT:
  4. pymage.quit()
  5. sys.exit()
  6. #更新并绘制屏幕内容
  7. pygame.display.flip()

                

                while True: 这是一个无限循环,通常用于创建游戏循环。游戏循环是一个持续运行的循环,用于处理游戏逻辑,更新游戏状态和绘制图形。

                for event in pygame.event.get(): 这是一个事件处理循环。它迭代遍历通过 pygame.event.get() 函数获取的所有事件。Pygame 会将各种事件(例如按键按下、鼠标移动、窗口关闭等)存储在一个事件队列中,通过这个循环可以处理这些事件。

                if event.type == pygame.QUIT:这是一个条件语句,用于检查事件的类型是否为窗口关闭事件。pygame.QUIT 是一个表示窗口关闭事件的常量。

                pygame.quit(): 如果检测到窗口关闭事件,这行代码会调用 pygame.quit() 函数,用于清理 Pygame 环境和资源,以确保程序正确退出。这会关闭 Pygame 窗口并释放游戏资源。

sys.exit():这是一个用于退出程序的函数。它会终止程序的执行,退出游戏循环,从而结束程序的运行。

               pygame.display.flip(): 这行代码用于更新屏幕内容。在游戏循环中,通常会进行游戏状态的更新和图形的绘制,然后使用 pygame.display.flip() 来刷新屏幕,以显示最新的游戏画面。

                2.pygame.display显示模块具体使用方法
              (1)Pygame使用pygame.display显示模块中的方法创建游戏的主窗口:

                函数书写格式

  1. #写法一
  2. window = pygame.display.set_mode(size=(),flags=0)
  3. #size:用来设置窗口的大小
  4. #flags:功能标志位,表示创建的主窗口样式
  5. #写法二
  6. window_size = (800, 600)
  7. # 创建游戏窗口
  8. window = pygame.display.set_mode(window_size)
标志位功能
pygame.FULLSCREEN创建一个全屏窗口
pygame.HWSURFACE创建一个硬件加速窗口,必须和FULLSCREEN同时使用
pygame.OPENGL创建一个OPENGL渲染窗口
pygame.RESIZABLE创建一个可以改变大小的窗口
pygame.DOUBLEBUF创建一个双缓冲窗口,建议在HWSURFACE或者OPENGL时候使用
pygame.NOFRAME创建一个没有边框的窗口
              (2)将Surface对象粘贴至主窗口上:
  1. # 导入Pygame库
  2. import pygame
  3. # 导入sys库,用于退出程序
  4. import sys
  5. # 初始化Pygame
  6. pygame.init()
  7. # 定义窗口大小和标题
  8. screen_width = 1600 # 窗口宽度
  9. screen_height = 1000 # 窗口高度
  10. screen = pygame.display.set_mode((screen_width, screen_height)) # 创建一个游戏窗口
  11. pygame.display.set_caption("简单的Pygame窗口") # 设置窗口标题
  12. # 加载图像
  13. image = pygame.image.load("屏幕截图 2024-01-15 155410.png") # 加载一个图像文件(请替换成你的图像文件路径)
  14. # 进入主循环
  15. while True:
  16. for event in pygame.event.get(): # 获取Pygame事件
  17. if event.type == pygame.QUIT: # 如果事件类型是窗口关闭
  18. pygame.quit() # 退出Pygame
  19. sys.exit() # 退出程序
  20. # 在窗口上绘制图像
  21. screen.blit(image, (0, 0)) # 将加载的图像绘制到窗口左上角(坐标 (0, 0))
  22. # 更新屏幕内容
  23. pygame.display.flip() # 刷新窗口,显示最新的游戏画面

这是一个完整的代码窗口创建流程,其中

  1. # 在窗口上绘制图像
  2. screen.blit(image, (0, 0)) # 将加载的图像绘制到窗口左上角(坐标 (0, 0))

这行代码是在游戏窗口上绘制一个图像,且图像的坐标为(0,0),而image是需要导入的Surface对象

              (3)设置窗口主窗口,以及主窗口的命名:
  1. # 定义窗口大小和标题
  2. screen_width = 1600 # 窗口宽度
  3. screen_height = 1000 # 窗口高度
  4. screen = pygame.display.set_mode((screen_width, screen_height)) # 创建一个游戏窗口
  5. pygame.display.set_caption("简单的Pygame窗口") # 设置窗口标题

                通过定义两个参数screen_width = 1600,screen_height = 1000对窗口的大小进行限定;利用screen = pygame.display.set_mode((screen_width, screen_height))来创建窗口;pygame.display.set_caption("简单的Pygame窗口")来对窗口进行命名

              (4)填充主窗口的背景,并用RGB参数值的颜色进行填充:
  1. # 填充窗口背景为灰色
  2. screen.fill((156, 156, 156))
              (5)更新屏幕的内容:
  1. # 更新屏幕内容
  2. pygame.display.flip() # 刷新窗口,显示最新的游戏画面

                通过pygame中的display.flip方法来对窗口的内容进行更新,以显示最新的画面

              (6)pygame.display的其他方法:
方法名称说明
pygame.display.get_surface()获取当前显示的Surface对象
pygame.display.flip()更新整个待显示的Surface对象到屏幕上
pygame.display.update()更新部分软件界面显示
pygame.display.lnfo()产生一个VideInfo对象,包含了显示界面的相关信息
pygame.display.set_icon()设置左上角的游戏图标,图标尺寸大小为32*32
pygame.display.iconify()将显示的主窗口即Surface对象最小化,或者隐藏
pygame.display.get_active()当前显示界面显示在屏幕上时返回True,如果窗口被隐藏和最小化时则返回False
                3.利用pygame的Surface来创建图像
  1. import pygame
  2. import sys
  3. # 初始化Pygame
  4. pygame.init()
  5. # 定义窗口大小和标题
  6. screen_width = 1600
  7. screen_height = 1000
  8. screen = pygame.display.set_mode((screen_width, screen_height))
  9. pygame.display.set_caption("简单的Pygame窗口")
  10. # 创建一个新的Surface对象
  11. width = 200 # 新Surface的宽度
  12. height = 200 # 新Surface的高度
  13. flags = pygame.SRCALPHA # 使用SRCALPHA标志以支持Alpha透明度
  14. depth = 32 # 32位颜色深度
  15. new_surface = pygame.Surface((width, height), flags, depth)
  16. # 加载图像
  17. image = pygame.image.load("屏幕截图 2024-01-15 155410.png") # 加载一个图像文件(请替换成你的图像文件路径)
  18. # 进入主循环
  19. while True:
  20. for event in pygame.event.get(): # 获取Pygame事件
  21. if event.type == pygame.QUIT: # 如果事件类型是窗口关闭
  22. pygame.quit() # 退出Pygame
  23. sys.exit() # 退出程序
  24. # 在新Surface上绘制图像
  25. new_surface.fill((255, 0, 0)) # 填充新Surface为红色背景
  26. new_surface.blit(image, (0, 0)) # 将加载的图像绘制到新Surface的左上角
  27. # 填充窗口背景为灰色
  28. screen.fill((156, 156, 156))
  29. # 在窗口上绘制新Surface
  30. screen.blit(new_surface, (100, 100)) # 将新Surface绘制到窗口的(100, 100)位置
  31. # 更新屏幕内容
  32. pygame.display.flip() # 刷新窗口,显示最新的游戏画面
                (1)Surface模块创建图像
  1. # 创建一个新的Surface对象
  2. width = 50 # 新Surface的宽度
  3. height = 50 # 新Surface的高度
  4. flags = pygame.SRCALPHA # 使用SRCALPHA标志以支持Alpha透明度
  5. depth = 32 # 32位颜色深度
  6. new_surface = pygame.Surface((width, height), flags, depth)
  7. # 格式 Surface=pygame.Surface(size=(width,height),flags,depth)
  8. # size:表示Surface对象的矩形区域大小
  9. # flage:功能标志位,有两个可选参数值HWSURFACE和SPCALPHA,前者代表将创建的Surface对象存放于显存中,后者表示让图像的每一个像素包含一个alpha通道
  10. # depth:指定像素的颜色深度,默认为自适应模式,由Pygame自动调节

               pygame.SRCALPHA 是Pygame库中的一个特殊标志,用于在创建新的Surface对象时指示该Surface具有Alpha透明度支持。具体来说,SRCALPHA表示要为新的Surface分配一个Alpha通道,以便你可以控制每个像素的透明度。

        Alpha透明度是指图像的每个像素的透明程度或不透明程度。Alpha通道是图像中存储每个像素Alpha透明度值的一种方式。它通常是一个独立的颜色通道,与红、绿和蓝通道一起组成了一个像素的颜色。每个像素都有一个与之关联的Alpha通道值,用于表示该像素的透明度。

运行结果示例:

                (2)Surface从外部加载图像

                引入外部图像的代码

  1. image_surface = pygame.image.load('E:\超级玛丽\屏幕截图 2024-01-15 155410.png')
  2. # 加载一个图像文件

                  完整代码:

  1. import pygame # 导入Pygame库
  2. import sys # 导入sys库,用于退出程序
  3. pygame.init() # 初始化Pygame
  4. # 设置主窗口
  5. screen = pygame.display.set_mode((800, 600)) # 创建一个800x600像素的游戏窗口
  6. screen.fill('white') # 填充窗口背景为白色
  7. # 设置窗口标题
  8. pygame.display.set_caption('简单的Pygame窗口') # 设置游戏窗口标题为'简单的Pygame窗口'
  9. # 加载图片
  10. image_surface = pygame.image.load('E:\超级玛丽\屏幕截图 2024-01-15 155410.png') # 加载一个图像文件
  11. # 填充图片的指定区域为蓝色
  12. image_surface.fill((0, 0, 255), rect=(100, 100, 100, 50), special_flags=0)
  13. # 上面这行代码的作用是将加载的图像的指定区域(矩形区域,左上角坐标为(100, 100),宽度为100像素,高度为50像素)填充为蓝色。
  14. image_surface.scroll(100, 60) # 移动图片
  15. # 上面这行代码的作用是将加载的图像向右移动100像素,向下移动60像素。
  16. while True:
  17. for event in pygame.event.get(): # 获取Pygame事件
  18. if event.type == pygame.QUIT: # 如果事件类型是窗口关闭
  19. pygame.quit() # 退出Pygame
  20. sys.exit() # 退出程序
  21. # 将图像添加到主屏幕上
  22. screen.blit(image_surface, (0, 0)) # 将加载的图像绘制到主窗口的左上角(0, 0)位置
  23. # 更新屏幕内容
  24. pygame.display.flip() # 刷新窗口,显示最新的游戏画面

                运行结果:

                4.利用pygame的Transform使图像变形 
transform方法
方法说明
pygame.transform.scale()将图片缩放至指定的大小,并返回一个新的Surface对象
pygame.transform.rotate()将图片旋转至指定角度
pygame.transform.rotozoom()以角度旋转图像,同时将图像缩小或放大至指定的倍数
                5.利用pygame的time进行时间的控制
                (1)游戏暂停
                   <1>利用pygame.time.get_ticks()来获取时间
  1. import pygame
  2. import sys
  3. pygame.init()
  4. # 设置主窗口
  5. screen = pygame.display.set_mode((800, 600))
  6. screen.fill((255, 255, 255)) # 白色背景
  7. # 设置窗口标题
  8. pygame.display.set_caption('简单的Pygame窗口')
  9. # 加载图片
  10. image_surface = pygame.image.load('E:\超级玛丽\屏幕截图 2024-01-15 155410.png')
  11. # 初始化滚动变量
  12. scroll_x = 0
  13. scroll_y = 0
  14. last_update_time = pygame.time.get_ticks()
  15. while True:
  16. # 检查退出事件
  17. for event in pygame.event.get():
  18. if event.type == pygame.QUIT:
  19. pygame.quit()
  20. sys.exit()
  21. # 获取当前时间
  22. current_time = pygame.time.get_ticks()
  23. # 每隔100毫秒滚动一次图片
  24. if current_time - last_update_time > 100:
  25. last_update_time = current_time
  26. scroll_x += 10 # 每次水平滚动10像素
  27. scroll_y += 5 # 每次垂直滚动5像素
  28. image_surface.fill((0, 0, 255), rect=(100, 100, 100, 50), special_flags=0)
  29. image_surface.scroll(scroll_x, scroll_y)
  30. # 将图像添加到主屏幕上
  31. screen.blit(image_surface, (0, 0))
  32. # 更新屏幕内容
  33. pygame.display.flip()

                在上面的代码中,last_update_time = pygame.time.get_ticks() 的作用是用来记录上一次更新操作的时间点。在游戏循环中,首先获取当前的毫秒数时间戳,使用 pygame.time.get_ticks() 函数得到 current_time 变量。然后,通过计算 current_time - last_update_time 来确定自上一次更新操作以来经过了多少毫秒时间。

                如果经过的时间超过了100毫秒(即 current_time - last_update_time > 100),就执行一次图像的滚动操作。接着,将 last_update_time 更新为当前时间,以便下一次循环中继续计算时间间隔。last_update_time 变量的作用是跟踪上一次图像滚动操作的时间点,以便在控制每次滚动的时间间隔时使用,确保图像以恰当的速度滚动。

                   <2>利用pygame.time.wait()来暂停一段时间和利用pygame.time.set_time()创建一个定时器,即每隔一段时间就去执行一些动作
  1. import pygame # 导入pygame库
  2. pygame.init() # 初始化pygame
  3. # 创建一个窗口,尺寸为500x400像素
  4. screen = pygame.display.set_mode((500, 400))
  5. # 设置窗口的标题为'时间设置'
  6. pygame.display.set_caption('时间设置')
  7. # 获取当前时间(自pygame初始化以来的毫秒数)
  8. t = pygame.time.get_ticks()
  9. # 暂停游戏3000毫秒(3秒)
  10. t1 = pygame.time.wait(3000)
  11. # 打印暂停时间(这里应该是3000,因为pygame.time.wait返回的是暂停的毫秒数)
  12. print(t1)
  13. # 加载一张图片(确保文件路径正确)
  14. image_surface = pygame.image.load('E:\\超级玛丽\\屏幕截图 2024-01-15 155410.png')
  15. # 进入游戏的主循环
  16. while True:
  17. # 遍历所有的事件
  18. for event in pygame.event.get():
  19. # 如果事件类型是QUIT(例如点击了关闭窗口的按钮),则退出程序
  20. if event.type == pygame.QUIT:
  21. exit()
  22. # 将加载的图片绘制到窗口的(0,0)位置
  23. screen.blit(image_surface, (0, 0))
  24. # 更新整个屏幕的显示
  25. pygame.display.update()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/127161
推荐阅读
相关标签
  

闽ICP备14008679号