【Python基础知识】Pygame的基本使用——游戏循环和模板

发布 : Python培训      来源:优就业

2021-09-28 09:44:34

每个游戏的核心控制流程都是循环,称为游戏循环。游戏循环不断地反复运行,完成使游戏正常运行所需的工作。每迭代一次游戏循环称为一帧。

Pygame框架游戏循环中发生的事情可以分为三种不同的类别。

①事件:需要游戏做出响应的所有内容。例如,在键盘上按下的键,在鼠标上点击的键等。

②更新游戏:此框架上需要更改的所有内容。例如,如果角色悬空,那么需要使用重力将其拉下来;如果两个对象相遇,那么需要发生爆炸。

③渲染:将所有内容绘制在屏幕上。例如,播放器需要查看的背景、角色、菜单或其他任何内容,都必须在屏幕上正确的位置绘制。

游戏循环的关键是控制整个游戏循环的运行速度,即FPS,它表示每秒的帧数,这意味着游戏循环每秒应该发生多少次。如果控制不好FPS,游戏就会运行得过快或过慢。

(1)创建Pygame模版

编写一个简单的Pygame程序,该程序除了打开游戏窗口并运行游戏循环外什么也不做。

首先导入所需的Pygame库,并设置游戏的全局选项变量:

  1. import pygame
  2. WIDTH = 300 # 游戏窗口的宽度
  3. HEIGHT = 420 # 游戏窗口的高度
  4. FPS = 30 # 每秒的帧数

接下来创建游戏窗口:

  1. # 初始化Pygame并创建游戏窗口
  2. pygame.init()
  3. screen = pygame.display.set_mode((WIDTH, HEIGHT))
  4. pygame.display.set_caption('Demo Game') # 设置游戏标题
  5. clock = pygame.time.Clock()

先调用pygame.init()启动Pygame并将其初始化;再调用pygame.display.set_mode()创建游戏窗口screen,其参数是一个元组,表示该游戏窗口的宽度和高度;最后调用pygame.time.Clock()创建时钟对象clock,以便能够确保游戏按照设定好的FPS运行。

然后开始编写游戏循环:

  1. # 游戏循环
  2. running = True
  3. while running:
  4. pass

这是游戏循环的框架代码,它是由变量running控制是否执行的while循环,如果希望游戏循环结束,那么只需将running设置为False即可。

(2)渲染部分

目前示例代码中仅仅演示的是用纯色填充屏幕。下面先介绍一下计算机对颜色的处理。

计算机屏幕由像素组成,这些像素的颜色由三个颜色混合生成,这三个颜色就是三基色:红色(R),绿色(G)和蓝色(B)。每个颜色的发光强度决定了该像素的颜色,用0到255之间的一个整数来表示发光强度的大小,因此,RGB三个颜色中的每个都有256种亮度等级。可以通过三者的乘积,获得计算机中可以显示的颜色总数:256*256*256=16777216。

在项目中定义一些颜色:

  1. BLACK = (0, 0, 0) # 黑色
  2. WHITE = (255, 255, 255) # 白色
  3. RED = (255, 0, 0) # 红色
  4. GREEN = (0, 255, 0) # 绿色
  5. BLUE = (0, 0, 255) # 蓝色

以上颜色由一个元组定义,元组中的项按照RGB排序,数值为颜色的亮度等级。

给屏幕填充颜色,并使最近绘制的屏幕可见:

  1. screen.fill(WHITE)
  2. pygame.display.flip()

(3)事件部分

此时尝试运行程序,则会发现程序存在问题——无法关闭窗口,单击窗口右上角的“关闭”按钮无效。这是因为“单击窗口右上角的‘关闭’按钮”其实是一个事件,需要监听该事件并做出相应处理——退出游戏。

事件可以随时发生。如果游戏在循环的更新或渲染过程中单击其他按钮怎么办?Pygame要做的是保存自上一帧以来发生的所有事件。这样,如果游戏快速将许多按钮混在一起,那么可以使所有按钮都有效。监听的事件是一个列表,可以使用一个for循环来查看它们:

  1. for event in pygame.event.get():
  2. # 检查窗口是否关闭
  3. if event.type == pygame.QUIT:
  4. running = False

Pygame中有很多可以监听的事件,pygame.QUIT是单击窗口右上角的“关闭”时触发的事件,此时将running设置为False,游戏循环将终止。

(4)控制FPS

使用FPS来控制游戏的运行速度:

  1. while running:
  2. clock.tick(FPS)

tick()方法用于告诉Pygame循环所花的时间。变量FPS已经赋值为30,这意味着游戏循环每秒应该发生30次,即每帧持续1⁄30秒。

(5)组装代码

将上述代码组装起来,并在末尾添加pygame.quit()用于终止游戏:

  1. import pygame
  2. WIDTH = 300
  3. HEIGHT = 420
  4. FPS = 30
  5. # 定义颜色
  6. WHITE = (255, 255, 255)
  7. BLACK = (0, 0, 0)
  8. RED = (255, 0, 0)
  9. GREEN = (0, 255, 0)
  10. BLUE = (0, 0, 255)
  11. # 初始化pygame并创建游戏窗口
  12. pygame.init()
  13. pygame.mixer.init()
  14. screen = pygame.display.set_mode((WIDTH, HEIGHT))
  15. pygame.display.set_caption('Demo Game')
  16. clock = pygame.time.Clock()
  17. # 游戏循环
  18. running = True
  19. while running:
  20. clock.tick(FPS)
  21. for event in pygame.event.get():
  22. if event.type == pygame.QUIT:
  23. running = False
  24. screen.fill(WHITE)
  25. pygame.display.flip()
  26. pygame.quit()

将上述代码进行保存,文件名为template.py,本书后文将使用该Pygame模板作为项目的起点。

运行template.py,运行结果如图1所示。

图1 Pygame模板运行结果

THE END  

声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

领取零基础自学IT资源

涉及方向有Java、Web前端、UI设计、软件测试、python等科目,内容包含学习路线、视频、源码等

点击申请领取资料

点击查看资料详情 

收起 


 相关推荐

问题解答专区
返回顶部