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

这篇具有很好参考价值的文章主要介绍了Pygame 教程(5):监测游戏时间。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

导航

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

监测时间

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

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) -> milliseconds pygame.time.Clock.tick方法相似。不同的是该方法将使用pygame.time.delay函数来延迟时间,因此精度更高,但是,这将导致在繁忙的循环中,对 CPU 进行大量的消耗。
get_time() -> milliseconds 获取最近两次调用pygame.time.Clock.tick之间的毫秒数。
get_raw_time() -> milliseconds pygame.time.Clock.get_time方法类似,但是该方法不包括在延迟帧速率时使用的任何时间。
get_fps() -> float 计算该Clock对象的帧率。通过对pygame.time.Clock.tick方法的最后十次调用取平均值来计算。

实例:绘图性能对比

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

完整代码如下:

import sys

import pygame


class 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函数运行结果:

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

aaline函数运行结果:

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

运行结果因设备而异。

结语

以上,就是本章的所有内容。下一章,你将学习如何使用 Pygame 精灵。文章来源地址https://www.toymoban.com/news/detail-495409.html

到了这里,关于Pygame 教程(5):监测游戏时间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Python Pygame游戏开发教程正式发布(非常详细)

    Python Pygame游戏开发教程正式发布(非常详细)

    Pygame 是一款专门为开发和设计 2D 电子游戏而生的、免费开源的 Python 软件包/模块,它支 Windows、Linux、Mac OS 等操作系统,具有良好的跨平台性 Pygame 在 SDL 的基础上开发而成,它提供了诸多操作模块,比如图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏

    2024年04月13日
    浏览(13)
  • Python Pygame 游戏开发基础教程与项目实践(总目录)

    Python Pygame 游戏开发基础教程与项目实践(总目录)

    原文链接:https://xiets.blog.csdn.net/article/details/131368147 版权声明:原创文章禁止转载 Pygame 是一个免费的开源的跨平台库(支持 Windows、MacOS、Linux),用于使用 Python 开发视频游戏等多媒体应用程序。 Pygame 基础教程01: Python (Pygame) 游戏开发模块简介与安装 Pygame 基础教程02: 显示

    2024年02月14日
    浏览(32)
  • 【pygame学习+实战】第一篇:游戏最小系统

    【pygame学习+实战】第一篇:游戏最小系统

    14天学习训练营导师课程: 李宁《Python Pygame游戏开发入门与实战》 李宁《计算机视觉OpenCV Python项目实战》1 李宁《计算机视觉OpenCV Python项目实战》2 李宁《计算机视觉OpenCV Python项目实战》3 “我有一个梦想,那就是有生之年做出一款属于自己的游戏。” 不知道屏幕前的你是

    2023年04月19日
    浏览(38)
  • pygame超详细教程!!做python小游戏必看框架!

    pygame超详细教程!!做python小游戏必看框架!

    # 导入需要的模块 # 定义一个游戏管理总类 # 定义一个check_event 方法用于阻塞事件,并在检测到\\\"QUIT\\\"事件时关闭窗口 # run 方法则是游戏的主循环,不断调用 check_event 方法, 加上flip()  , 每次添加新功能,即可更新画布 # 调用gm实例 到这里,我们就能做出一个空白的黑窗体了,

    2024年02月07日
    浏览(18)
  • python | 基础学习(六)pygame游戏开发:飞机大战

    python | 基础学习(六)pygame游戏开发:飞机大战

    pygame 模块,转为电子游戏设计 $ sudo pip3 install pygame windows: pip install pygame (1)新建项目 飞机大战 (2)新建文件 pygame.py (3)建立游戏窗口: ①pygame的初始化和退出 pygame.init() :导入并初始化所有pygame模块,使用其他模块之前,必须先调用init方法。 pygame.quit() :卸载所有

    2024年02月08日
    浏览(12)
  • 【python】 pygame学习示例 --飞机大战小游戏制作

    【python】 pygame学习示例 --飞机大战小游戏制作

    python版本:3.8.5 所需模块:pygame random os pygame版本:20.1 开发环境:pycharm专业版 硬件环境:win11 8G内存以上 使用python的第三方库–pygame 制作飞机大战小游戏 小游戏的内容包括: 玩家player的移动 子弹的发射 陨石的随机掉落(包括旋转 大小 下落角度) 玩家 子弹 陨石的碰撞交互

    2024年02月04日
    浏览(14)
  • Python “贪吃蛇”游戏,在不断改进中学习pygame编程

    Python “贪吃蛇”游戏,在不断改进中学习pygame编程

    目录 前言 改进过程一 增加提示信息 原版帮助摘要 pygame.draw pygame.font class Rect class Surface 改进过程二 增加显示得分 改进过程三 增加背景景乐 增加提示音效 音乐切换 静音切换 mixer.music.play 注意事项 原版帮助摘要 pygame.mixer pygame.mixer.Sound 改进过程四 增加WASD方向键 增加退出事

    2024年02月12日
    浏览(12)
  • ChatGPT4写贪吃蛇游戏(Notion)[pygame的学习]

    ChatGPT4写贪吃蛇游戏(Notion)[pygame的学习]

    这里我使用的是Notion写出来的贪吃蛇,开始使用百度的文心一言来试下效果,生成了好几次的代码都是有bug,所以生成代码这块还得是ChatGPT。这篇主要就是了解下 pygame 库的一些方法,当然在没有安装这个库的,需要先安装,安装的时候还是一直都推荐的安装方法,带上国内

    2023年04月27日
    浏览(12)
  • 强化学习Agent系列(一)——PyGame游戏编程,Python 贪吃蛇制作实战教学

    强化学习Agent系列(一)——PyGame游戏编程,Python 贪吃蛇制作实战教学

    大家好,未来的开发者们请上座 随着人工智能的发展,强化学习基本会再次来到人们眼前,遂想制作一下相关的教程。强化学习第一步基本离不开虚拟环境的搭建,下面用大家耳熟能详的贪吃蛇游戏为基础,制作一个Agent,完成对这个游戏的绝杀。 万里长城第一步:用pytho

    2024年01月21日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包