毫秒时间精度跑马灯代码
2023-12-21 17:55:55
import pygame
import time
# 初始化Pygame
pygame.init()
# 设置窗口大小
window_width, window_height = 550, 500
screen = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('跑马灯')
# 设置灯光的大小和间距
light_size = 15
light_spacing = 20
lights_per_row = 25 # 每行灯光数量
total_rows = 20 # 总行数
# 设置背景颜色和灯光颜色
background_color = (255, 255, 255) # 将背景颜色设置为黑色
light_color_on = (0, 255, 0)
light_color_off = (255, 255, 0) # 将灭灯状态的颜色设置为深绿色
time_color = (255, 0, 0) # 将时间信息的颜色设置为红色
# 设置帧率,参照显示屏的刷新率进行调整即可,刷新率越高,走马灯的时间精度越高
fps = 240
# 创建一个Clock对象用于控制帧率
clock = pygame.time.Clock()
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 获取当前时间和毫秒
current_time = time.time()
milliseconds = int((current_time - int(current_time)) * 1000)
# 清空屏幕
screen.fill(background_color)
# 显示当前时间信息
font = pygame.font.Font(None, 48)
time_str = time.strftime("Time: %H:%M:%S", time.localtime(current_time))
time_text = font.render(f'{time_str}.{milliseconds:03}', True, time_color)
screen.blit(time_text, (50, 0))
# 更新灯光状态
for i in range(total_rows):
for j in range(lights_per_row):
light_index = i * lights_per_row + j
if light_index < milliseconds % (total_rows * lights_per_row): # 根据毫秒数确定灯的状态
color = light_color_on
else:
color = light_color_off
pygame.draw.rect(screen, color, ((j + 1) * light_spacing, (i + 3) * light_spacing, light_size, light_size))
# 刷新屏幕
pygame.display.flip()
# 控制帧率
clock.tick(fps)
这段代码实现了一个跑马灯效果,具体实现步骤如下:
- 初始化 Pygame,并设置窗口大小。
- 定义灯光的大小、间距以及每行灯光的数量和总行数。
- 设置背景颜色和灯光的亮灭状态颜色。
- 设置帧率,用于控制刷新频率。
- 创建一个 Clock 对象用于控制帧率。
- 进入主循环,处理事件。
- 获取当前时间和毫秒数。
- 清空屏幕并填充背景颜色。
- 显示当前时间信息。
- 更新灯光状态,根据当前毫秒数确定亮灯的数量。
- 绘制灯光矩形,并根据状态设置颜色。
- 刷新屏幕,更新显示内容。
- 控制帧率,使程序按照指定的帧率运行。
?
可以根据显示屏的刷新率进行调整,包含屏幕分辨率的调整,可以用来更加精确的测量视频的视频的端到端的时延测试,再配合高刷显示屏,以及高帧率相机即可实现更加精确的时延测试,若是追求到1毫秒精度的,还是建议购买专门的跑马灯计时设备。此方案的精度会受到显示屏的刷新率限制。
运行效果如下:
转载请备注原文地址即可,非常感谢!根据需要自行修改即可
文章来源:https://blog.csdn.net/huapeng_guo/article/details/135135498
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!