Python pygame 动画游戏循环游戏时钟实现原理

作者:ZacheryZHANG 时间:2022-07-02 06:27:27 

1. 游戏循环和游戏时钟

之前几篇文章中,飞机大战游戏中的英雄飞机已经被绘制到屏幕上了,怎么能够让飞机移动呢?

1.1 游戏中的动画实现原理

电影的原理类似,游戏中的动画效果,本质上是快速的在屏幕上绘制图像

电影是将多张静止的电影胶片连接、快速的播放,产生连贯的视觉效果!

一般在电影上每秒绘制60次,就能够达到非常连续高品质的动画效果(相当于要每秒钟调用60次update效果)

每次绘制的结果被称为帧Frame(静止画面)

2. 游戏循环

游戏的两个组成部分:

  • 游戏的初始化:创建游戏窗口,绘制图像初始位置,设置游戏时钟

  • 游戏循环:设置刷新帧率,检测用户交互,更新所有图像位置,更新屏幕显示

游戏循环的开始就意味着游戏的正式开始

游戏循环的作用:

  • 保证游戏不会直接退出

  • 变化图像位置--动画效果

    • 每隔1/60秒移动一下所有图像位置

    • 调用pygame.display.update()更新屏幕显示

  • 检测用户交互--按键、鼠标等

3. 游戏时钟

pygame专门提供了一个类pygame.time.Clock可以非常方便的设置屏幕绘制速度--刷新帧率

要使用时钟对象需要两步骤:

在游戏初始化创建一个时钟对象

在游戏循环中让时钟对象调用tick(帧率)方法

tick方法会根据上次被调用的时间,自动设置游戏循环中的延时

案例演示:本案例将在游戏循环外部创建时钟对象,在游戏循环内部创建tick方法,就可以来指定循环内部的代码执行的频率。

具体代码演示如下所示:游戏循环内部的代码,每秒重复循环60次就可以,就在游戏初始化的时候,创建游戏时钟对象。

然后,在游戏循环中,通过时钟对象调用tick的方法,就可以轻松的指定,游戏循环内部的代码每秒钟执行的次数。

import pygame
pygame.init()
# 创建游戏的窗口 640*642
screen = pygame.display.set_mode((640, 642))
# 绘制背景图像
bg = pygame.image.load("./飞机大战资料包/images/background1.jpg")
screen.blit(bg, (0, 0))
# 绘制英雄的飞机
hero = pygame.image.load("./飞机大战资料包/images/me1.png")
screen.blit(hero, (300, 500))
# 可以在所有绘制工作完成之后,统一调用update方法
pygame.display.update()
# 创建时钟对象
clock = pygame.time.Clock()
# 游戏循环->意味着游戏的正式开始
i = 0
while True:
   # 希望无限循环内部的代码每秒钟重复循环60次
   # 可以指定循环体内部的代码执行的频率
   clock.tick(60)
   print(i)
   i = i + 1
   pass
pygame.quit()

来源:https://juejin.cn/post/7130266390895788039

标签:Python,pygame,动画
0
投稿

猜你喜欢

  • form 元素内的字段 name 不要跟 form 属性名称一致

    2008-10-22 13:25:00
  • ASP进阶学习之认识数学函数

    2007-10-08 13:15:00
  • 详解Go语言变量作用域

    2023-08-05 03:25:43
  • 详细介绍Python中的偏函数

    2022-12-28 08:40:53
  • 如何利用python给图片添加半透明水印

    2022-08-16 09:34:28
  • python编写简易聊天室实现局域网内聊天功能

    2023-08-30 07:45:52
  • Python itertools.product方法代码实例

    2023-01-19 03:18:31
  • Python实现计算文件MD5和SHA1的方法示例

    2023-12-07 06:55:46
  • Python实现动态给类和对象添加属性和方法操作示例

    2022-05-22 10:58:36
  • Golang实现单元测试中的接口层

    2024-04-26 17:17:29
  • 关于ASP eof与bof 区别分析

    2011-03-11 11:14:00
  • Python中函数参数设置及使用的学习笔记

    2022-10-15 08:09:31
  • Vue前端判断数据对象是否为空的实例

    2024-05-02 16:53:14
  • python pandas 数据排序的几种常用方法

    2021-10-02 06:25:01
  • python的内存管理和垃圾回收机制详解

    2021-07-30 14:18:05
  • Win10下mysql 8.0.20 安装配置方法图文教程

    2024-01-26 21:23:18
  • 如何实现文件上传并自动归类功能?

    2010-05-24 18:37:00
  • 聚焦 DreamWeaver MX 2004

    2010-03-25 12:22:00
  • Python实现的手机号归属地相关信息查询功能示例

    2021-02-05 23:10:05
  • Mysql服务器的安装配置与启动关闭方法详解

    2024-01-28 05:10:26
  • asp之家 网络编程 m.aspxhome.com