首页 > 编程语言 >Python学习笔记38:进阶篇(二十七)pygame的使用之时间与帧数控制

Python学习笔记38:进阶篇(二十七)pygame的使用之时间与帧数控制

时间:2024-07-20 21:25:24浏览次数:14  
标签:38 游戏 clock Python show 进阶篇 pygame tick 255

前言

基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。

我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。

私信我发送消息python资料,领取python crash course中文版PDF。

pygame

Pygame是一个开源的Python多媒体开发库,专门用于开发2D游戏。它是Python编程语言的一个扩展,基于 SDL (Simple DirectMedia Layer) 库,提供了丰富的功能来处理图形、声音、事件处理等游戏开发所需的基本要素,使得创建游戏变得更加简单直接。

时间与帧率控制

在Pygame中,时间和帧率控制对于游戏的流畅性和响应性至关重要。Pygame提供了pygame.time模块来处理时间相关的功能,其中最常用的是Clock类,用于控制游戏的帧率并提供时间测量。

Clock

pygame.time.Clock类在Pygame中用于管理游戏的帧率和执行定时操作。它提供了一种机制来限制游戏的循环速度,确保游戏不会运行得太快,同时也允许开发者精确地控制每一帧之间的延迟时间。

常用函数
  1. tick([fps])

    • 功能: 控制每秒最大帧数。如果游戏循环执行得比指定的fps快,tick()会暂停足够长的时间以达到目标帧率。
    • 参数:
      • fps: 可选参数,整数类型,表示每秒的最大帧数。如果不提供,默认为不设置上限。
    • 返回值: 上次调用tick()到本次调用之间经过的毫秒数。
    import pygame
    
    pygame.init()
    
    screen = pygame.display.set_mode((800, 600))
    clock = pygame.time.Clock()
    
    show = True
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
    
        # 清除屏幕
        screen.fill((255, 255, 255))
    
        if show:
            # 绘制一个填充的红色圆
            pygame.draw.circle(screen, (255, 0, 0), (200, 100), 50)
            show = False
        else:
            # 绘制一个未填充的绿色圆
            pygame.draw.circle(screen, (0, 255, 0), (200, 200), 50, 5)
            show = True
    
        # 更新屏幕
        pygame.display.flip()
    
        # 控制帧率为1
        clock.tick(1)
        # clock.tick(10)
        # clock.tick(100)
    
        # 输出每帧的时间间隔
        print(f"Time since last frame: {clock.get_time()}ms")
    
        # 输出当前帧率
        print(f"Current FPS: {clock.get_fps():.2f}")
    

    代码中填充了两个图形来回切换,设置不同的帧率,可以明显看到切换速度的差距。

  2. tick_busy_loop([fps])

    • 功能: 类似于tick(),控制帧数
    • 参数: 同tick().
    • 返回值: 同tick().
    import pygame
    
    pygame.init()
    
    screen = pygame.display.set_mode((800, 600))
    clock = pygame.time.Clock()
    
    show = True
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
    
        # 清除屏幕
        screen.fill((255, 255, 255))
    
        if show:
            # 绘制一个填充的红色圆
            pygame.draw.circle(screen, (255, 0, 0), (200, 100), 50)
            show = False
        else:
            # 绘制一个未填充的绿色圆
            pygame.draw.circle(screen, (0, 255, 0), (200, 200), 50, 5)
            show = True
    
        # 更新屏幕
        pygame.display.flip()
    
        # 控制帧率为1
        # clock.tick(1)
        # clock.tick(10)
        # clock.tick(100)
        clock.tick_busy_loop(1)
    
        # 输出每帧的时间间隔
        print(f"Time since last frame: {clock.get_time()}ms")
    
        # 输出当前帧率
        print(f"Current FPS: {clock.get_fps():.2f}")
    

    这个函数和tick函数是一个作用,区别在于这个函数使用CPU忙等待来实现目标帧率,这通常不推荐,因为它消耗更多CPU资源。

  3. get_time()

    • 功能: 返回自上次调用tick()以来经过的时间,单位是毫秒。
    • 参数: 无
    • 返回值: 自上次tick()调用到本次调用之间经过的毫秒数。
  4. get_fps()

    • 功能: 返回从上一次调用tick()到本次调用期间的平均帧率。
    • 参数: 无
    • 返回值: 平均帧率,如果tick()从未被调用则返回0。

在这里插入图片描述
两个函数的返回信息通常用于判断与计算,可以更准确地计算游戏逻辑中的时间依赖部分。

结尾

时间与帧数控制是游戏开发中至关重要的部分,它们直接影响游戏的流畅度、响应性和整体性能。但是我们目前来说不过过于关注这方面得到内容,了解会用就可以进入下一个阶段了。

下个阶段就是开始书籍资料的中的大战外星人游戏了。其实就是类似雷霆战机那种飞船打飞船或者外星人的小游戏。

标签:38,游戏,clock,Python,show,进阶篇,pygame,tick,255
From: https://blog.csdn.net/weixin_48668564/article/details/140447865

相关文章

  • 音频文件降噪及python示例
    操作系统:Windows10_x64Python版本:3.9.2noisereduce版本:3.0.2从事音频相关工作,大概率会碰到降噪问题,今天整理下之前学习音频文件降噪的笔记,并提供Audacity和python示例。我将从以下几个方面展开:noisereduce库介绍使用Audacity进行降噪使用fft滤波降噪使用noisereduce进......
  • Python; Django 添加字符到路径名导致操作系统错误 22
    我一直在尝试让django渲染我创建的模板。起初它说模板不存在,但是一旦我修复了错误,它现在就会向路径添加字符,并且因此找不到模板。路径应该是:C:\\Users\\ABC\\Desktop\\science_crowd\\Lightweight_Django\\placeholder\\home.html但是错误说:它找不到:C:\\Us......
  • 如何在 IPython 控制台中显示 conda 环境名称?
    上下文我想在Spyder的IPython控制台中显示conda环境名称,这样我就知道我正在运行哪个环境。虽然此信息在状态栏中可用,但有时只是显示|||而不是实际的环境名称:conda我尝试过的在启动时打印它Spyder允许在控制台启动时运行代码。但是,似乎......
  • Python 中更快的套接字
    我有一个用Python编写的服务器客户端,它通过LAN运行。该算法的某些部分密集使用套接字读取,其执行速度比用C++编写的几乎相同的慢3-6倍。有哪些解决方案可以使Python套接字读取速度更快?我实现了一些简单的缓冲,我的用于处理套接字的类如下所示:P.S.:分析还显示......
  • .py文件是python脚本吗
    .py文件是python的脚本文件。Python在执行时,首先会将.py文件中的源代码编译成Python的bytecode(字节码),然后再由PythonVirtualMachine(Python虚拟机)来执行这些编译好的bytecode。这种机制的基本思想跟Java,.NET是一致的。然而,PythonVirtualMachine与Java或.NET的Virtual......
  • anaconda与python是什么关系
    Anaconda是Python的一个发行版,里面内置了很多工具,不用单独安装,因为做了优化也免去了单独安装带来的一些麻烦。Anaconda是一种Python语言的免费增值开源发行版,用于进行大规模数据处理、预测分析,和科学计算,致力于简化包的管理和部署。Anaconda使用软件包管理系统Conda进行包管......
  • 用于检查 Google Gemini 支持的所有 GenerativeAI 模型的 Python 代码是什么?
    作为GenerativeAI世界的新手,我正在尝试加载预先训练的文本生成模型并做一些不起作用的事情。这就是我加载GenerativeAI模型的方式。fromvertexai.generative_modelsimportGenerativeModelgeneration_model=GenerativeModel("gemini-pro")由于它不......
  • 想让字典操作更优雅?自定义Python字典类型,简化你的代码库!
    目录1、继承dict类......
  • Vispy,一个专门用于创建交互式可视化的python库
    目录什么是Vispy?为什么选择Vispy?安装Vispy基础概念创建第一个Vispy可视化2D图形的进阶使用3D图形的绘制交互性结论什么是Vispy?Vispy是一个高性能的Python库,专门用于创建交互式可视化。它支持2D和3D数据的可视化,并且可以轻松地集成到各种应用程序中。Vispy的核心优......
  • python 复制 excel 保留文档中完全相同的参数(样式、单元格大小和融合、边框...)
    我正在寻找一种在其他文件中复制和excel的方法。我有一个“file_1.xlsx”,但我想要一个不存在的“file_1_copy.xlsx”。副本必须与原始文件完全相同,这意味着单元格大小、它们的融合、单元格中文本的颜色、背景、如果有边框,就好像我用右键单击。我有:importopenpyxlfromope......