当前位置:   article > 正文

Python -- 利用pygame库进行游戏开发基础(二)

pygame库

一、基本画面操作使用方法

1、pygame的窗口创建

  1. import sys # 导入sys模块,用于访问与Python解释器相关的命令和函数
  2. import pygame # 导入pygame模块,用于游戏开发
  3. pygame.init() # 初始化pygame,为使用pygame库做好准备
  4. size = width, height = 320, 240 # 设置窗口大小,宽320像素,高240像素
  5. screen = pygame.display.set_mode(size) # 创建一个窗口或屏幕,其尺寸为之前设置的size
  6. # 执行死循环,确保窗口一直显示
  7. while True: # 无限循环,确保窗口持续显示
  8. for event in pygame.event.get(): # 获取所有pygame事件
  9. if event.type == pygame.QUIT: # 如果事件是pygame的退出事件
  10. sys.exit() # 调用sys.exit()退出程序
  11. pygame.quit() # 退出pygame,清理pygame使用的资源

        这段代码生成了一个窗口导入pygame模块和sys模块,这两个模块准备后续开发所需的命令以及作用,进行pygame的初始化,而后上设置窗口大小,创建窗口,而后进入循环确保窗口持续显示,再判断是否有退出事件,有则退出程序,再退出pygame,清空pygame的使用资源。

2、pygame文本代码

  1. #导入所需的模块
  2. import sys
  3. import pygame
  4. # 使用pygame之前必须初始化
  5. pygame.init()
  6. # 设置主屏窗口
  7. screen = pygame.display.set_mode((400,400))
  8. # 设置窗口的标题,即游戏名称
  9. pygame.display.set_caption('hello world')
  10. # 引入字体类型
  11. f = pygame.font.Font('C:/Windows/Fonts/simhei.ttf',50)
  12. # 生成文本信息,第一个参数文本内容;第二个参数,字体是否平滑;
  13. # 第三个参数,RGB模式的字体颜色;第四个参数,RGB模式字体背景颜色;
  14. text = f.render("pygame画面",True,(255,0,0),(0,0,0))
  15. #获得显示对象的rect区域坐标
  16. textRect =text.get_rect()
  17. # 设置显示对象居中
  18. textRect.center = (200,200)
  19. # 将准备好的文本信息,绘制到主屏幕 Screen 上。
  20. screen.blit(text,textRect)
  21. # 固定代码段,实现点击"X"号退出界面的功能,几乎所有的pygame都会使用该段代码
  22. while True:
  23. # 循环获取事件,监听事件状态
  24. for event in pygame.event.get():
  25. # 判断用户是否点了"X"关闭按钮,并执行if代码段
  26. if event.type == pygame.QUIT:
  27. #卸载所有模块
  28. pygame.quit()
  29. #终止程序,确保退出程序
  30. sys.exit()
  31. pygame.display.flip() #更新屏幕内容

        我的思路是首先,我们导入了必要的模块,这是为了让Pygame正常工作;然后,我们初始化了Pygame,表示我们准备好使用它来制作一个小程序;接着,我们创建了一个400x400像素大小的窗口,并设置了窗口的标题为"hello world",这就是我们程序的窗口;我们还引入了一个字体文件,用来设置文字的样式和大小;接下来,我们生成了一段文字信息,包括文本内容、文字是否平滑、文字颜色和背景颜色;我们获取了这段文字的矩形区域坐标,并将它设置在窗口中央;然后,我们把这段准备好的文字信息绘制到了主屏幕上,这样就在窗口中显示了这段文字;最后,我们进入一个循环,不断监听事件。如果用户点击窗口右上角的"X"按钮,就会触发退出事件,在退出事件发生时,我们卸载了Pygame模块,然后终止了程序,确保程序能够正常退出;在循环中,我们使用pygame.display.flip()来不断刷新屏幕内容,以确保文字信息被显示在窗口中,同时保持程序一直运行。

 3、pygame图像代码

(1)直接导入图像
  1. import pygame # 导入pygame库,用于游戏开发
  2. import sys # 导入sys库,用于访问与Python解释器紧密相关的函数和变量
  3. # 初始化Pygame
  4. pygame.init() # 初始化Pygame,准备资源,以便后续创建窗口和处理事件
  5. # 设置窗口大小
  6. screen_width = 1000 # 设置游戏窗口的宽度为800像素
  7. screen_height = 600 # 设置游戏窗口的高度为600像素
  8. # 创建一个窗口,尺寸为上面定义的宽度和高度
  9. screen = pygame.display.set_mode((screen_width, screen_height))
  10. # 设置窗口标题
  11. pygame.display.set_caption('超级玛丽') # 为游戏窗口设置标题
  12. # 加载图像
  13. image_path = 'C:\\Users\\lsz\\Desktop\\OIP.jpg' # 指定图像文件的路径
  14. image = pygame.image.load(image_path) # 加载图像文件,并创建一个Surface对象
  15. # 主游戏循环
  16. running = True # 设置一个变量来控制游戏循环的运行
  17. while running: # 当running为True时,持续运行游戏循环
  18. for event in pygame.event.get(): # 获取所有事件
  19. if event.type == pygame.QUIT: # 检查是否有退出事件(如窗口关闭)
  20. running = False # 如果有退出事件,则将running设置为False,退出循环
  21. # 绘制图像到窗口上
  22. screen.blit(image, (0, 0)) # 将加载的图像绘制到窗口的左上角
  23. # 更新屏幕显示
  24. pygame.display.flip() # 刷新整个屏幕的显示,更新为最新内容
  25. # 退出Pygame
  26. pygame.quit() # 关闭Pygame,释放资源
  27. sys.exit() # 退出程序

 运行结果:


        这段代码是用于创建一个窗口并在窗口中显示一张图像。我的思路是首先我们导入了Pygame库和sys库,Pygame用于游戏开发,sys用于访问与Python解释器相关的函数和变量。接着,初始化Pygame,这一步是为了准备资源,以便后续创建窗口和处理事件。设置了游戏窗口的宽度和高度,然后创建了一个窗口,标题设置为"超级玛丽"。加载了一张图像文件,这个图像将用于在窗口中显示。图像的路径在image_path变量中指定。进入主游戏循环,其中的while running表示只要running变量为True,就一直执行循环。在循环中,我们监听所有事件,包括窗口关闭事件(QUIT事件)。如果检测到窗口关闭事件,就将running变量设为False,退出循环。在游戏循环中,我们使用screen.blit(image, (0, 0))将加载的图像绘制到窗口的左上角(坐标为(0, 0))。最后,使用pygame.display.flip()来刷新整个屏幕的显示,以更新为最新的内容。当running变量变为False时,退出游戏循环,然后关闭Pygame并退出程序。

(2)代码进行改进,将图像全屏显示
  1. import pygame # 导入pygame库,用于创建游戏和图形界面
  2. import sys # 导入sys库,用于处理系统相关的操作,如退出程序
  3. # 初始化Pygame
  4. pygame.init() # 初始化Pygame,为使用其功能(如创建窗口)做准备
  5. # 设置窗口大小
  6. screen_width = 1000 # 定义窗口的宽度为1000像素
  7. screen_height = 600 # 定义窗口的高度为600像素
  8. # 创建窗口
  9. screen = pygame.display.set_mode((screen_width, screen_height)) # 创建一个宽1000像素、高600像素的窗口
  10. # 设置窗口标题
  11. pygame.display.set_caption('超级玛丽') # 设置窗口的标题为'超级玛丽'
  12. # 加载图像
  13. image_path = 'C:\\Users\\lsz\\Desktop\\OIP.jpg' # 定义图像的文件路径
  14. image = pygame.image.load(image_path) # 加载图像文件
  15. # 将图片缩放到窗口大小
  16. image = pygame.transform.scale(image, (screen_width, screen_height)) # 将图像缩放到与窗口大小相同
  17. # 主游戏循环
  18. running = True # 设置一个标志,用于控制游戏循环是否继续
  19. while running: # 当running为True时,不断执行循环
  20. for event in pygame.event.get(): # 获取所有的事件
  21. if event.type == pygame.QUIT: # 检查是否有退出事件(如点击窗口关闭按钮)
  22. running = False # 如果有退出事件,设置running为False,从而退出循环
  23. # 绘制图像到窗口上
  24. screen.blit(image, (0, 0)) # 将缩放后的图像绘制到窗口左上角
  25. # 更新屏幕显示
  26. pygame.display.flip() # 刷新整个屏幕,显示最新绘制的图像
  27. # 退出Pygame
  28. pygame.quit() # 结束Pygame,释放资源
  29. sys.exit() # 退出整个程序

运行结果:

 改进之后可以将图片放大至全屏,以下是实现图片的全屏显示的关键性函数:

  1. # 将图片缩放到窗口大小
  2. image = pygame.transform.scale(image, (screen_width, screen_height)) # 将图像缩放到与窗口大小相同

利用tansform中的pygame.transform.scale()这个函数可针对性的对图像进行缩放操作

(3)代码再改进,将图像进行旋转

可以再次改进,再次利用transform中的另一个函数pygame.transform.rotate()这个函数可将图片进行旋转处理

  1. import pygame # 导入pygame库,用于创建游戏和图形界面
  2. import sys # 导入sys库,用于处理系统相关的操作,如退出程序
  3. # 初始化Pygame
  4. pygame.init() # 初始化Pygame,为使用其功能(如创建窗口)做准备
  5. # 设置窗口大小
  6. screen_width = 1000 # 定义窗口的宽度为1000像素
  7. screen_height = 600 # 定义窗口的高度为600像素
  8. # 创建窗口
  9. screen = pygame.display.set_mode((screen_width, screen_height)) # 创建一个宽1000像素、高600像素的窗口
  10. # 设置窗口标题
  11. pygame.display.set_caption('超级玛丽') # 设置窗口的标题为'超级玛丽'
  12. # 加载图像
  13. image_path = 'C:\\Users\\lsz\\Desktop\\OIP.jpg' # 定义图像的文件路径
  14. image = pygame.image.load(image_path) # 加载图像文件
  15. # 将图片缩放到窗口大小
  16. image = pygame.transform.scale(image, (500, 300)) # 将图像缩放到相应大小
  17. image = pygame.transform.rotate(image,45) # 将图像逆时针旋转45
  18. # 主游戏循环
  19. running = True # 设置一个标志,用于控制游戏循环是否继续
  20. while running: # 当running为True时,不断执行循环
  21. for event in pygame.event.get(): # 获取所有的事件
  22. if event.type == pygame.QUIT: # 检查是否有退出事件(如点击窗口关闭按钮)
  23. running = False # 如果有退出事件,设置running为False,从而退出循环
  24. # 绘制图像到窗口上
  25. screen.blit(image, (0, 0)) # 将缩放后的图像绘制到窗口左上角
  26. # 更新屏幕显示
  27. pygame.display.flip() # 刷新整个屏幕,显示最新绘制的图像
  28. # 退出Pygame
  29. pygame.quit() # 结束Pygame,释放资源
  30. sys.exit() # 退出整个程序

 改进之后可以将图片旋转45度,以下是实现图片的全屏显示的关键性函数:

image = pygame.transform.rotate(image,45)  # 将图像逆时针旋转45

运行结果:

 4、pygame进行时间控制

  1. import pygame # 导入pygame库,用于创建游戏和图形界面
  2. import sys # 导入sys库,用于处理系统相关的操作,如退出程序
  3. # 初始化Pygame
  4. pygame.init() # 初始化Pygame,为使用其功能(如创建窗口)做准备
  5. # 设置窗口大小
  6. screen_width = 1000 # 定义窗口的宽度为1000像素
  7. screen_height = 600 # 定义窗口的高度为600像素
  8. # 创建窗口
  9. screen = pygame.display.set_mode((screen_width, screen_height)) # 创建一个宽1000像素、高600像素的窗口
  10. # 设置窗口标题
  11. pygame.display.set_caption('超级玛丽') # 设置窗口的标题为'超级玛丽'
  12. t = pygame.time.get_ticks() #该时间指的从pygame初始化后开始计算,到调用该函数为止
  13. t1 =pygame.time.wait(3000) #暂停游戏3000毫秒
  14. # 加载图像
  15. image_path = 'C:\\Users\\lsz\\Desktop\\OIP.jpg' # 定义图像的文件路径
  16. image = pygame.image.load(image_path) # 加载图像文件
  17. # 将图片缩放到窗口大小
  18. image = pygame.transform.scale(image, (500, 300)) # 将图像缩放到与窗口大小相同
  19. image = pygame.transform.rotate(image,45) # 将图像逆时针旋转45
  20. # 主游戏循环
  21. running = True # 设置一个标志,用于控制游戏循环是否继续
  22. while running: # 当running为True时,不断执行循环
  23. for event in pygame.event.get(): # 获取所有的事件
  24. if event.type == pygame.QUIT: # 检查是否有退出事件(如点击窗口关闭按钮)
  25. running = False # 如果有退出事件,设置running为False,从而退出循环
  26. # 绘制图像到窗口上
  27. screen.blit(image, (0, 0)) # 将缩放后的图像绘制到窗口左上角
  28. # 更新屏幕显示
  29. pygame.display.flip() # 刷新整个屏幕,显示最新绘制的图像
  30. # 退出Pygame
  31. pygame.quit() # 结束Pygame,释放资源
  32. sys.exit() # 退出整个程序

在这个代码中,调用了pygame.time模块,利用其中的两个个函数pygame.time.get_tick和pygame.time.wait两个函数,先面试使用示例。

  1. t = pygame.time.get_ticks() #该时间指的从pygame初始化后开始计算,到调用该函数为止
  2. t1 =pygame.time.wait(3000) #暂停游戏3000毫秒

t = pygame.time.get_ticks() 的运行结果就是计算从开始到运行到这行代码的时间

t1 =pygame.time.wait(3000) 的运行结果是暂停3000毫秒再进行后续部分

 5、使用pygame的Rect进行图像区域位置控制

在 Pygame 中我们使用 Rect() 方法来创建一个指定位置,大小的矩形区域。函数的使用样例如下:

rect =pygame.Rect(left,top,width,height) 

Rect()方法应该应用于一个Surface对象上,像Screen窗口有四个参数left,top,width,height,他们的表述图如下:

  1. import pygame # 导入pygame库,用于游戏和图形界面的开发
  2. pygame.init() # 初始化pygame,准备使用pygame的各种功能
  3. # 创建一个窗口
  4. screen = pygame.display.set_mode((500, 400)) # 创建一个500x400像素的窗口
  5. # 设置窗口标题
  6. pygame.display.set_caption('超级玛丽') # 设置窗口的标题为“超级玛丽”
  7. # 加载图像
  8. image_surface = pygame.image.load("C:\\Users\\lsz\\Desktop\\OIP.jpg") # 从指定路径加载一张图像
  9. # 创建一个矩形对象
  10. rect1 = pygame.Rect(50, 50, 150, 120) # 创建一个矩形区域,位于(50, 50),大小为150x120像素
  11. # 创建一个子图(surface对象)
  12. image_child = image_surface.subsurface(rect1) # 从原始图像中截取rect1定义的区域,创建一个新的surface对象
  13. # 获取并打印子图的矩形区域的大小
  14. rect2 = image_child.get_rect() # 获取新创建的子图的矩形区域
  15. print(rect2) # 打印这个矩形区域的大小
  16. # 主循环
  17. while True: # 开始一个无限循环,用于保持窗口显示
  18. for event in pygame.event.get(): # 遍历所有事件
  19. if event.type == pygame.QUIT: # 检查是否有退出事件
  20. exit() # 如果有退出事件,退出程序
  21. # 在屏幕上显示子图的区域
  22. screen.blit(image_child, rect1) # 将子图绘制到屏幕上,位置由rect1定义
  23. # 更新屏幕显示
  24. pygame.display.update() # 刷新屏幕显示,确保最新的内容被渲染出来

运行结果:

从运行结果的截图能够得到,在之前的图片截取了一个150*120大小的矩形图片,将截取的图片放在rect1的变量中, 由rect1来进行图片的输出工作,创建一个子图将子图赋给rect2,用print函数将矩形区域的大小进行输出显示。

(1)pygame.Rect.copy() 的用法

        复制矩,(rectangle)copy() -> Rect,返回与原始位置和大小相同的新矩形。

  1. import pygame # 导入pygame库,用于游戏和图形界面的开发
  2. pygame.init() # 初始化pygame,准备使用pygame的各种功能
  3. # 创建一个窗口
  4. screen = pygame.display.set_mode((500, 400)) # 创建一个500x400像素的窗口
  5. # 设置窗口标题
  6. pygame.display.set_caption('超级玛丽') # 设置窗口的标题为“超级玛丽”
  7. # 加载图像
  8. image_surface = pygame.image.load("C:\\Users\\lsz\\Desktop\\OIP.jpg") # 从指定路径加载一张图像
  9. # 创建一个矩形对象
  10. rect1 = pygame.Rect(50, 50, 150, 120) # 创建一个矩形区域,位于(50, 50),大小为150x120像素
  11. # 创建一个子图(surface对象)
  12. image_child = image_surface.subsurface(rect1) # 从原始图像中截取rect1定义的区域,创建一个新的surface对象
  13. # 使用pygame.Rect.copy()创建矩形的副本
  14. rect2 = rect1.copy() # 创建rect1的副本rect2
  15. # 修改副本矩形的属性
  16. rect2.move_ip(200, 0) # 将副本矩形向右移动200像素
  17. # 主循环
  18. while True: # 开始一个无限循环,用于保持窗口显示
  19. for event in pygame.event.get(): # 遍历所有事件
  20. if event.type == pygame.QUIT: # 检查是否有退出事件
  21. exit() # 如果有退出事件,退出程序
  22. # 在屏幕上显示子图的区域
  23. screen.blit(image_child, rect1) # 将子图绘制到屏幕上,位置由rect1定义
  24. # 在屏幕上显示副本矩形
  25. pygame.draw.rect(screen, (255, 0, 0), rect2) # 在屏幕上绘制一个红色矩形,位置和大小由rect2定义
  26. # 更新屏幕显示
  27. pygame.display.update()

运行结果:

(2)pygame.Rect.move() 的用法

        移动矩形,move(x, y) -> Rect,返回由给定偏移量移动的新矩形。 x和y参数可以是任何整数值,正数或负数

  1. import pygame # 导入pygame库
  2. import sys
  3. pygame.init() # 初始化pygame
  4. # 创建一个窗口
  5. screen = pygame.display.set_mode((500, 400)) # 创建一个500x400像素的窗口
  6. pygame.display.set_caption('超级玛丽') # 设置窗口标题
  7. # 加载图像
  8. image_surface = pygame.image.load("C:\\Users\\lsz\\Desktop\\OIP.jpg") # 加载图像
  9. # 创建一个矩形对象
  10. rect1 = pygame.Rect(50, 50, 150, 120) # 定义一个矩形区域
  11. # 使用subsurface创建一个子图(surface对象)
  12. image_child = image_surface.subsurface(rect1) # 从原图中截取子部分
  13. # 使用pygame.Rect.copy()创建矩形的副本
  14. rect2 = rect1.copy() # 创建rect1的副本rect2
  15. # 使用pygame.Rect.move()移动矩形
  16. rect3 = rect1.move(250, 0) # 创建rect1的另一个副本并向右移动250像素
  17. # 主循环
  18. while True:
  19. for event in pygame.event.get():
  20. if event.type == pygame.QUIT:
  21. pygame.quit() # 退出pygame
  22. sys.exit() # 退出程序
  23. # 在屏幕上显示两个子图的区域
  24. screen.blit(image_child, rect1) # 显示第一个子图
  25. screen.blit(image_child, rect3) # 显示移动后的第二个子图
  26. # 更新屏幕显示
  27. pygame.display.update()

运行结果:

(3)pygame.Rect.move_ip() 的用法

        就在原地位置移动矩形,move_ip(x, y) -> None,与Rect.move()方法相同,但就在原地位置操作。

(4)pygame.Rect.inflate()的用法

        增大或缩小矩形大小,inflate(x, y) -> Rect,返回一个新的矩形,其大小由给定的偏移量改变。 矩形保持以其当前中心为中心。 负值会缩小矩形。 注意,使用整数,如果给定的偏移量太小(<2> -2),则中心位置将会被关闭。

  1. import pygame # 导入pygame库
  2. import sys
  3. pygame.init() # 初始化pygame
  4. # 创建一个窗口
  5. screen = pygame.display.set_mode((500, 400)) # 创建一个500x400像素的窗口
  6. pygame.display.set_caption('超级玛丽') # 设置窗口标题
  7. # 加载图像
  8. image_surface = pygame.image.load("C:\\Users\\lsz\\Desktop\\OIP.jpg") # 加载图像
  9. # 创建一个矩形对象
  10. rect1 = pygame.Rect(50, 50, 150, 120) # 定义一个矩形区域
  11. # 使用subsurface创建一个子图(surface对象)
  12. image_child = image_surface.subsurface(rect1) # 从原图中截取子部分
  13. # 使用pygame.Rect.copy()创建矩形的副本
  14. rect2 = rect1.copy() # 创建rect1的副本rect2
  15. # 使用pygame.Rect.move()移动矩形
  16. rect3 = rect1.move(250, 0) # 创建rect1的另一个副本并向右移动250像素
  17. # 使用pygame.Rect.inflate()调整矩形大小
  18. rect4 = rect1.inflate(50, 50) # 创建rect1的副本,将其大小增大50像素
  19. # 主循环
  20. while True:
  21. for event in pygame.event.get():
  22. if event.type == pygame.QUIT:
  23. pygame.quit() # 退出pygame
  24. sys.exit() # 退出程序
  25. # 在屏幕上显示两个子图的区域
  26. screen.blit(image_child, rect1) # 显示第一个子图
  27. screen.blit(image_child, rect3) # 显示移动后的第二个子图
  28. # 在屏幕上显示调整大小后的矩形
  29. pygame.draw.rect(screen, (255, 0, 0), rect4, 2) # 绘制一个红色的矩形框
  30. # 更新屏幕显示
  31. pygame.display.update()

运行结果:

(5)pygame.Rect.inflate_ip() 的用法

        就在原地位置增大或缩小矩形大小,inflate_ip(x, y) -> None,与Rect.inflate()方法相同,但就在原地位置操作。

(6)pygame.Rect.clamp() 的用法
  1. import pygame # 导入pygame库,用于创建游戏和图形用户界面
  2. pygame.init() # 初始化pygame,这是开始使用pygame之前必须做的准备工作
  3. # 创建窗口
  4. screen = pygame.display.set_mode((500, 400)) # 创建一个500像素宽、400像素高的窗口
  5. pygame.display.set_caption('超级玛丽') # 设置窗口标题为“超级玛丽”
  6. # 加载图像
  7. image_surface = pygame.image.load("C:\\Users\\lsz\\Desktop\\OIP.jpg") # 从指定路径加载图像
  8. # 创建矩形
  9. rect1 = pygame.Rect(50, 50, 150, 120) # 在位置(50, 50)处创建一个150x120像素的矩形
  10. # 创建子图
  11. image_child = image_surface.subsurface(rect1) # 使用rect1指定的区域从image_surface创建子图
  12. # 创建矩形副本
  13. rect2 = rect1.copy() # 创建rect1的副本,命名为rect2
  14. # 创建边界矩形
  15. boundary_rect = pygame.Rect(0, 0, 500, 400) # 创建一个与屏幕同样大小的边界矩形
  16. # 主循环
  17. while True: # 开始无限循环,用于保持窗口持续显示
  18. for event in pygame.event.get(): # 遍历所有事件
  19. if event.type == pygame.QUIT: # 检测是否有退出事件(例如点击关闭按钮)
  20. pygame.quit() # 退出pygame
  21. exit() # 退出程序
  22. # 使用clamp方法确保rect2在边界内
  23. rect2 = rect2.clamp(boundary_rect) # 使用clamp方法保持rect2在boundary_rect边界内
  24. # 在屏幕上显示图像
  25. screen.blit(image_child, rect1) # 在rect1指定的位置显示image_child图像
  26. screen.blit(image_child, rect2) # 在rect2指定的位置显示相同的图像
  27. # 更新屏幕
  28. pygame.display.update() # 更新屏幕以显示最新的绘制内容

        创建一个Pygame窗口,加载一张图像,并在窗口的不同位置显示这张图像的特定区域。程序使用了Pygame的Rect对象来指定图像的区域,并利用clamp方法确保这个区域始终保持在窗口的边界内。通过无限循环,程序保持窗口的持续显示,并响应退出事件。

(7)pygame.Rect.clamp_ip() 的用法

        将矩形就在原地位置移动到另一个内部,clamp_ip(Rect) -> None,与Rect.clamp()方法相同,但就在原地位置操作。

(8)pygame.Rect.clip() 的用法
  1. import pygame # 导入pygame库,用于游戏和图形界面的开发
  2. pygame.init() # 初始化pygame,这是开始使用pygame之前必须做的准备工作
  3. # 创建一个窗口
  4. screen = pygame.display.set_mode((500, 400)) # 创建一个500像素宽、400像素高的窗口
  5. pygame.display.set_caption('超级玛丽') # 设置窗口标题为“超级玛丽”
  6. # 加载图像
  7. image_surface = pygame.image.load("C:\\Users\\lsz\\Desktop\\OIP.jpg") # 从指定路径加载图像
  8. # 创建矩形对象
  9. rect1 = pygame.Rect(50, 50, 150, 120) # 在位置(50, 50)处创建一个150x120像素的矩形
  10. # 创建子图
  11. image_child = image_surface.subsurface(rect1) # 从原图中截取rect1指定的区域,创建子图
  12. # 创建rect1的副本rect2
  13. rect2 = rect1.copy() # 创建rect1的副本rect2
  14. rect2.move_ip(200, 0) # 将rect2向右移动200像素
  15. # 创建用于演示clip功能的另一个矩形rect3
  16. rect3 = pygame.Rect(100, 100, 150, 120) # 创建一个新矩形,位置在(100, 100),大小150x120像素
  17. # 主循环
  18. while True:
  19. for event in pygame.event.get():
  20. if event.type == pygame.QUIT:
  21. pygame.quit() # 检测到退出事件后,退出pygame
  22. exit() # 退出程序
  23. # 使用clip()方法找出rect2和rect3的重叠部分
  24. overlap_rect = rect2.clip(rect3) # clip方法计算两个矩形的重叠部分
  25. # 在屏幕上显示图像和矩形
  26. screen.blit(image_child, rect1) # 将子图绘制在rect1指定的位置
  27. pygame.draw.rect(screen, (255, 0, 0), rect2, 2) # 在rect2指定的位置绘制一个红色矩形
  28. pygame.draw.rect(screen, (0, 255, 0), rect3, 2) # 在rect3指定的位置绘制一个绿色矩形
  29. # 如果rect2和rect3有重叠部分,则绘制重叠部分
  30. if overlap_rect.width > 0 and overlap_rect.height > 0:
  31. pygame.draw.rect(screen, (0, 0, 255), overlap_rect, 2) # 绘制重叠部分,蓝色矩形
  32. # 更新屏幕显示
  33. pygame.display.update() # 刷新屏幕,显示最新绘制的内容

运行结果:

(8)pygame.Rect.clip() 的用法
  1. import pygame # 导入pygame库,这是一个用于创建游戏和图形界面的Python模块
  2. pygame.init() # 初始化pygame,这是使用pygame前的必要步骤
  3. # 创建窗口
  4. screen = pygame.display.set_mode((500, 400)) # 创建一个宽500像素、高400像素的窗口
  5. pygame.display.set_caption('超级玛丽') # 为窗口设置标题为“超级玛丽”
  6. # 加载图像
  7. image_surface = pygame.image.load("C:\\Users\\lsz\\Desktop\\OIP.jpg") # 从指定路径加载图像
  8. # 创建矩形对象
  9. rect1 = pygame.Rect(50, 50, 150, 120) # 创建一个位置在(50, 50)、宽150像素、高120像素的矩形
  10. # 创建子图
  11. image_child = image_surface.subsurface(rect1) # 从加载的图像中截取rect1所指定的区域
  12. # 创建rect1的副本rect2
  13. rect2 = rect1.copy() # 复制rect1,创建rect2
  14. rect2.move_ip(200, 0) # 将rect2沿水平方向移动200像素
  15. # 使用union()方法
  16. union_rect = rect1.union(rect2) # 计算rect1和rect2的合并矩形
  17. # 主循环
  18. while True:
  19. for event in pygame.event.get(): # 处理所有从pygame获取的事件
  20. if event.type == pygame.QUIT: # 如果事件类型为退出
  21. pygame.quit() # 退出pygame
  22. exit() # 退出程序
  23. # 在屏幕上显示子图
  24. screen.blit(image_child, rect1) # 将子图显示在rect1所在的位置
  25. pygame.draw.rect(screen, (255, 0, 0), rect2) # 在rect2位置绘制红色矩形框
  26. # 在屏幕上绘制合并后的矩形
  27. pygame.draw.rect(screen, (0, 255, 0), union_rect, 2) # 绘制代表合并区域的绿色矩形框
  28. # 更新屏幕显示
  29. pygame.display.update() # 刷新屏幕显示,呈现最新的绘制内容

运行结果:

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

闽ICP备14008679号