仅根据系统时间获取循环动画范围的帧数

问题描述 投票:0回答:1

我正在寻找一种仅使用系统时间来制作精灵动画的方法,而无需增加和存储活动帧或作为变量传递的时间。我应该能够通过正确拉伸和循环毫秒以获得一个范围来实现这一点,考虑动画速度、帧总数和我想要获取的范围。我的项目基于 Pygame,除非它有更有用的功能,否则我会尝试使用通用 Python

time.time()
值来实现它。

假设我有一个 30 帧的精灵,目前我想以每秒 2 帧的速度循环第 10 到 20 帧(每 0.5 秒前进一次)。我有“自 1970 年 1 月 1 日以来经过的毫秒数”值:我需要将其转换为 10 到 19 之间的整数以指示当前帧是什么。例如:如果我现在调用该函数,我会得到

18
,如果经过 0.25 秒,我仍然会得到
18
,如果这次再经过 0.25 秒,我会得到
19
,0.5 秒后再次调用该函数,会得到
 10
当它重新启动时,如果我等待一整秒然后再次调用它,我现在会得到
12

如果可能,请建议最便宜的解决方案,我将在计算频繁且昂贵的地方使用它。在正常情况下,我会存储旧时间,然后比较自上次调用以来经过的时间,但我是在线程池中执行此操作,它不会影响外部变量,因此我无法在主线程上存储永久更改。这种技术的唯一缺点是计数可以从任何地方开始,因此动画不会总是从范围的开头播放...这可以通过在线程开始工作之前为我的精灵类提供当前时间然后基于该时间进行偏移来解决,但这没什么大不了的,所以如果太复杂,这部分可以省略。

python python-3.x pygame game-engine game-development
1个回答
0
投票

有人在 Reddit 上提供了解决方案,感谢 @txuby 的数学计算。我尝试了一下,效果完全符合预期。

start_idx = 10
end_idx = 20
ms_per_frame = 500

t = int(time.time() * 1000)
current_idx = start_idx + (t // ms_per_frame) % (end_idx - start_idx)
© www.soinside.com 2019 - 2024. All rights reserved.