Pygame 教程(5):监测游戏时间

article/2025/10/3 17:44:36

本章,你将学习如何监测游戏时间。

导航

上一章:图像传输和绘制文本
下一章:努力更新中……

文章目录

  • 导航
  • 监测时间
  • 游戏帧速率
  • 实例:绘图性能对比
  • 结语

监测时间

在游戏程序中,时常需要随着时间的流逝而做出不同的动作。例如:倒计时、动画、限制帧率……这就需要对游戏时间进行监测。

Pygame 使用pygame.time模块监测时间, 以毫秒( 1 1000 \frac{1}{1000} 10001秒)作为计时单位。

该模块中的所有函数如下表所示(详见官方文档):

函数定义函数作用
get_ticks() -> milliseconds获取从调用pygame.init函数到现在经过了多少毫秒。当没有调用pygame.init时,该函数始终返回0
wait(milliseconds) -> time暂停程序一定的时间,使程序休眠。该函数对处理器的消耗较少,精度比pygame.time.delay低。返回实际暂停的毫秒数。
delay(milliseconds) -> time暂停程序一定的时间。该函数使用处理器来控制时间,精度比pygame.time.wait高。返回实际暂停的毫秒数。
set_timer(event, millis, loops=0) -> None每隔一定的毫秒,在事件队列中创建给定的事件,事件可以是pygame.Event对象,也可以是代表事件的整数。可选参数loops可用于指定创建的次数,如果使用默认值(0),将持续创建事件,直至明确停止。要明确停止计时器,请使用相同的事件参数再次调用该函数,但是将millis设置为0

游戏帧速率

游戏的运行速度可以通过 FPS(Frames Per Second,每秒刷新的帧数)表示。pygame.time模块中就定义了Clock类,用于帮助跟踪时间以及控制游戏帧速率。

该类的所有方法如下表所示(详见官方文档):

方法定义方法作用
tick(framerate=0) -> milliseconds该方法应该每帧调用一次,它将计算自上一次调用经过了多少毫秒。如果传入了可选的framerate参数,该方法将延迟以限制游戏的帧率。例如,如果每一帧都调用Clock.tick(60),该方法将确保游戏的运行帧率不超过 60 fps。
tick_busy_loop(framerate=0) -> millisecondspygame.time.Clock.tick方法相似。不同的是该方法将使用pygame.time.delay函数来延迟时间,因此精度更高,但是,这将导致在繁忙的循环中,对 CPU 进行大量的消耗。
get_time() -> milliseconds获取最近两次调用pygame.time.Clock.tick之间的毫秒数。
get_raw_time() -> millisecondspygame.time.Clock.get_time方法类似,但是该方法不包括在延迟帧速率时使用的任何时间。
get_fps() -> float计算该Clock对象的帧率。通过对pygame.time.Clock.tick方法的最后十次调用取平均值来计算。

实例:绘图性能对比

本实例比较简单,将通过调用pygame.time.Clock.get_time方法比较pygame.draw.line函数和pygame.draw.aaline函数的性能。

完整代码如下:

import sysimport pygameclass PerformanceComparsion:def __init__(self):pygame.init()self.screen = pygame.display.set_mode((800, 800))pygame.display.set_caption('Performance Comparsion')self.clock = pygame.time.Clock()self.time_list = []def run(self):while True:for event in pygame.event.get():if event.type == pygame.QUIT:print(1000 / (sum(self.time_list) / len(self.time_list)))pygame.quit()sys.exit()self.screen.fill((255, 255, 255))for i in range(100):# 运行后记得切换函数pygame.draw.line(self.screen, (0, 0, 0), (0, i * 5 + 5), (800, i * 5 + 5))pygame.display.update()self.clock.tick()self.time_list.append(self.clock.get_time())if __name__ == '__main__':app = PerformanceComparsion()app.run()

本实例并没有使用get_fps方法,是因为该方法需要计算前10次调用tick方法的间隔时间的平均值,计算会出现误差。本实例将直接使用get_time方法,将每帧的间隔时间添加到time_list当中。在程序的最后计算平均的间隔时间,再用 1000 间隔时间 \frac{1000}{间隔时间} 间隔时间1000 获取平均 fps。

注意:
1. 请在运行后记得切换函数。
2. 不要长时间运行该程序,否则列表中将堆积大量的数,计算量是巨大的。

line函数运行结果:

line 函数运行结果

aaline函数运行结果:

aaline 函数运行结果

运行结果因设备而异。

结语

以上,就是本章的所有内容。下一章,你将学习如何使用 Pygame 精灵。


http://chatgpt.dhexx.cn/article/7sBIGi9v.shtml

相关文章

Pygame教程系列四:播放音频篇

【前言】 pygame播放音频文件这部分相对来说比较简单,主要是用到pygame.mixer模块,不过也有一些地方需要注意的,咱们直接先看看案例 1、案例效果图 2、案例代码 import pygame from mutagen.mp3 import MP3 # 标识是否退出循环 exitFlag Fa…

python3.8安装pygame_Python3.8安装Pygame教程

注:因为最近想用一下Python做一些简单小游戏的开发作为项目练手之用,而Pygame模块里面提供了大量的有用的方法和属性。今天我们就在之前安装过PyCharm的基础上,安装Pygame,下面是安装的步骤,希望能够帮到大家。 第一步…

Pygame 教程(3):绘制图形

本章,你将学习如何在 Pygame 中绘制图形。 导航 上一章:重要的概念及对象 下一章:图像传输和绘制文本 文章目录 导航抗锯齿draw 模块实例:跟随鼠标的图形创建初始窗口添加变量捕捉鼠标事件绘制图形完整代码 结语 抗锯齿 抗锯齿…

Mac Pycharm导入Pygame教程(超细)

首先先新建一个想要使用Pygame的项目 进入项目后,点击文件(File)——新项目设置(settings) 点击新项目的偏好设置(Preferences for new project ) 随后可以看到 点击Python 编译器&#xff0…

mac python3.8上怎么安装pygame 第三方库_Python3.8安装Pygame教程步骤详解

注:因为最近想用一下python做一些简单小游戏的开发作为项目练手之用,而Pygame模块里面提供了大量的有用的方法和属性。今天我们就在之前安装过PyCharm的基础上,安装Pygame,下面是安装的步骤,希望能够帮到大家。 第一步 安装Python和pip 如果已安装,使用python --version …

Pygame教程系列一:快速入门篇

【简介】 Pygame 是python用来开发视频游戏的游戏引擎,底层主要是SDL库实现,算是目前利用python开发小游戏的一个性能比较高的一个游戏框架 一、安装pygame 使用pip下载安装 pip install pygame二、入门案例详析 1、示例效果 2、示例代码 import os …

pygame教程3

目录 做个小游戏精灵类精灵类介绍使用精灵类 做个小游戏 这个小游戏使用了pygame教程2的知识。 #↓初始化 import pygame,sys from pygame.locals import * pygame.init()#初始化pygame。 screen pygame.display.set_mode((800,600)) pygame.display.set_caption("Hell…

pygame教程2

目录 响应键盘上的事件让画面动起来了解x轴和y轴画圆形圆形动起来 响应键盘上的事件 import pygame#导入pygame。 import sys#导入sys from pygame.locals import *#导入pygame所有的常量,方便以后使用。 pygame.init()#初始化pygame。 screen pygame.display.set…

pygame教程笔记

pygame教程 安装pygameGame Development 1-1: Getting Started with PygameGame Development 1-2: Working with SpritesGame Development 1-3: More About SpritesPygame Shmup Part 1: Player Sprite and ControlsPygame Shmup Part 2: Enemy SpritesPygame Shmup Part 3: Co…

pygame基础教程

pygame简介 pygame可以实现python游戏的一个基础包。 pygame实现窗口 初始化pygame,init()类似于java类的初始化方法,用于pygame初始化。 pygame.init() 设置屏幕,(500,400)设置屏幕初始大小为500 * 400的大小, 0和32 是比较高…

Python pygame(GUI编程)模块最完整教程(1)

提示:下滑文章左侧可以查看目录!本教程分为多篇,总目录如下。 总目录: README.md Python-ZZY/Python-Pygame最完整教程 - Gitee.com 1 初识pygame 1.1 简介 pygame是python中一个流行的GUI编程模块,是专门为了开发游…

Pygame教程(非常详细)

文章目录 教程特点阅读条件 Pygame是什么扩展知识 Pygame下载和安装1) pip包管理器安装2) 二进制安装包安装 第一个Pygame程序初始化程序创建Surface对象事件监听游戏循环 Pygame Display显示模块详解Pygame Surface创建图像Pygame Transform图像变形Pygame Time时间控制详解1)…

GeoWave0.9.8开发人员指南

GeoWave0.9.8开发人员指南 官方英文地址:http://s3.amazonaws.com/geowave/0.9.8/docs/devguide.html 介绍 什么是GeoWave GeoWave是一个开源库,用于在排序的键值数据存储和流行的大数据框架之上存储,索引和搜索多维数据。GeoWave包含特定的…

行人检测之DPM

基于可识别训练的部件模型的目标检测 Object Detection with Discriminatively Trained Part Based Models 摘要 基于多尺度可变形的部件模型我们来描述一个目标检测系统。我们的系统能够表示高度可变的对象类并在PASCAL目标检测挑战达到最先进的结果。虽然可变形部件模型变…

Xuxiang Qi--Deep Learning based Semantic Labelling of 3D Point Cloud in Visual SLAM

元学习论文总结||小样本学习论文总结 2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019 提出了一种建立三维密集语义地图的方法,采用GPU,ROS消息通信无法支持。 摘要 三维(3D)点云…

古老的DPM

基于可识别训练的部件模型的目标检测 Object Detection with Discriminatively Trained Part Based Models 摘要 基于多尺度可变形的部件模型我们来描述一个目标检测系统。我们的系统能够表示高度可变的对象类并在PASCAL目标检测挑战达到最先进的结果。虽然可变形部件模型变得…

OpenCV-Python (官方)中文教程(部分一)

官网链接(英文版):https://docs.opencv.org/4.1.1/d6/d00/tutorial_py_root.html 第一章. OpenCV简介 了解如何在计算机上设置OpenCV-Python! 1.OpenCV-Python教程简介 1.1 OpenCV OpenCV是由Gary Bradsky于1999年在Intel公司创建的,第一次发布是在…

【视觉SLAM十四讲】视觉里程计—特征点法

本文为视觉 SLAM 学习笔记,讲解视觉里程计中的特征点法。 本讲内容概要 图像特征的意义,在单幅及多幅图像中提取特征点。对极几何的原理,利用对极几何的约束恢复图像间相机的三维运动PnP 问题,利用已知三维结构与图像的对应关系…

【记录】一个深度学习算法工程师的成长之路( 思考和方法以及计划 )

原文链接:https://blog.csdn.net/TeFuirnever/article/details/100999282 声明: 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的…

面向动态环境基于面元的RGB-D SLAM系统

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 作者:robot L https://zhuanlan.zhihu.com/p/142175916 本文仅做学术分享,如有侵权,请联系删除。 主要内容 面向动态环境基于面元的RGB-D SLAM系统,主要内容如下…