前言
基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。
我们的下一步目标是完成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中用于管理游戏的帧率和执行定时操作。它提供了一种机制来限制游戏的循环速度,确保游戏不会运行得太快,同时也允许开发者精确地控制每一帧之间的延迟时间。
常用函数
-
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}")
代码中填充了两个图形来回切换,设置不同的帧率,可以明显看到切换速度的差距。
-
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资源。
-
get_time()
- 功能: 返回自上次调用tick()以来经过的时间,单位是毫秒。
- 参数: 无
- 返回值: 自上次tick()调用到本次调用之间经过的毫秒数。
-
get_fps()
- 功能: 返回从上一次调用tick()到本次调用期间的平均帧率。
- 参数: 无
- 返回值: 平均帧率,如果tick()从未被调用则返回0。
两个函数的返回信息通常用于判断与计算,可以更准确地计算游戏逻辑中的时间依赖部分。
结尾
时间与帧数控制是游戏开发中至关重要的部分,它们直接影响游戏的流畅度、响应性和整体性能。但是我们目前来说不过过于关注这方面得到内容,了解会用就可以进入下一个阶段了。
下个阶段就是开始书籍资料的中的大战外星人游戏了。其实就是类似雷霆战机那种飞船打飞船或者外星人的小游戏。
标签:38,游戏,clock,Python,show,进阶篇,pygame,tick,255 From: https://blog.csdn.net/weixin_48668564/article/details/140447865