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游戏开发教程正式发布(非常详细)

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

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

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

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

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

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

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

    2024年02月07日
    浏览(47)
  • 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日
    浏览(56)
  • 【python】 pygame学习示例 --飞机大战小游戏制作

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

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

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

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

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

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

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

    2024年01月21日
    浏览(65)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包