400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > python > 【Python基础知识】Pygame的基本使用——游戏循环和模板

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

  • 来源:优就业
  • 2021-09-28 09:44:34
  • 阅读()
  • 分享
  • 手机端入口

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

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

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

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

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

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

(1)创建Pygame模版

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

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

  1. import pygame 
  2.  
  3. WIDTH = 300   # 游戏窗口的宽度 
  4. HEIGHT = 420   # 游戏窗口的高度 
  5. 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 = (000)   # 黑色 
  2. WHITE = (255255255)   # 白色 
  3. RED = (25500)   # 红色 
  4. GREEN = (02550)   # 绿色 
  5. BLUE = (00255)   # 蓝色 

以上颜色由一个元组定义,元组中的项按照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.  
  3. WIDTH = 300 
  4. HEIGHT = 420 
  5. FPS = 30 
  6.  
  7. # 定义颜色 
  8. WHITE = (255255255
  9. BLACK = (000
  10. RED = (25500
  11. GREEN = (02550
  12. BLUE = (00255
  13.  
  14. # 初始化pygame并创建游戏窗口 
  15. pygame.init() 
  16. pygame.mixer.init() 
  17. screen = pygame.display.set_mode((WIDTH, HEIGHT)) 
  18. pygame.display.set_caption('Demo Game'
  19. clock = pygame.time.Clock() 
  20.  
  21. # 游戏循环 
  22. running = True 
  23. while running: 
  24.     clock.tick(FPS) 
  25.     for event in pygame.event.get(): 
  26.         if event.type == pygame.QUIT: 
  27.             running = False 
  28.  
  29.     screen.fill(WHITE) 
  30.     pygame.display.flip() 
  31.  
  32. pygame.quit() 

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

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

图1 Pygame模板运行结果

学习疑问申请解答
您的姓名
您的电话
意向课程
 

中公优就业

IT小助手

扫描上方二维码添加好友,请备注:599,享学习福利。

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

优就业:ujiuye

关注中公优就业官方微信

  • 关注微信回复关键词“大礼包”,享学习福利
QQ交流群
在线疑问解答
(加群备注“网站”)
IT培训交流群 加入群聊 +
软件测试 加入群聊 +
全链路UI/UE设计 加入群聊 +
Python+人工智能 加入群聊 +
互联网营销 加入群聊 +
Java开发 加入群聊 +
PHP开发 加入群聊 +
VR/AR游戏开发 加入群聊 +
大前端 加入群聊 +
大数据 加入群聊 +
Linux云计算 加入群聊 +
优就业官方微信
扫码回复关键词“大礼包”
享学习福利

测一测
你适合学哪门IT技术?

1 您的年龄

2 您的学历

3 您更想做哪个方向的工作?

获取测试结果
 
课程资料、活动优惠 领取通道