【问题标题】:Keeping track of time跟踪时间
【发布时间】:2011-02-24 20:36:59
【问题描述】:

我需要我的函数每秒更新新的时间值,有没有比设置 t1 检查 t2 - t1 = 1 更好的跟踪方法?

希望编辑更清楚: 轨道代码:

def orbit(center, radius, speed, t):
    theta = math.fmod(t * speed, math.pi * 2)
    c = math.cos(theta)
    s = math.sin(theta)
    x = int(round(center[0] + radius * c))
    y = int(round(center[1] + radius * s))
    coords=[x, y]
    return coords

我需要的是在从绘图函数调用它时更改 t,我需要的是限制 fps 并为每一帧计算 t。我只在 pygame 中看到一个 get_fps 函数,它返回未设置的 fps 还是我错了?

【问题讨论】:

  • 您似乎已经有了解决方案,但您还没有具体说明您认为可能存在的问题。你能提供更多细节吗?
  • 他似乎无法在此处执行上一个问题的答案:stackoverflow.com/questions/5058591/…。这是关于 pygame 中的圆形轨道。
  • Pygame 将为您实现一个游戏循环,在这种情况下,它应该为您提供每帧的 delta-t(或全局所需的 FPS,您可以从中轻松计算出 delta-t) ,或者它需要你自己实现它。我之前没用过pygame,不过我会尽快看一下,看看能不能给你一个更具体的答案。

标签: python time


【解决方案1】:

你可以使用线程的定时器对象:

http://docs.python.org/library/threading.html#timer-objects

【讨论】:

  • 此解决方案的问题是:“计时器在执行其操作之前将等待的时间间隔可能与用户指定的时间间隔不完全相同。”也许这对 Gj​​orgji 来说已经足够了,也许不是。
  • 我需要一个全局计时器,以便所有函数都可以轻松查找时间(我需要知道时间作为函数参数)
【解决方案2】:

您没有指定任何有关代码需求的内容,因此我们无法判断您的方案中什么是“更好”的。例如。您的应用程序如何处理时间?为什么您会认为有比使用 delta 更好的方法?您是否需要不同的代码相互同步等?

既然你没有具体说明,那我就给个包罗万象的答案吧:)

无论您使用什么解决方案,如果您的代码需要同步,那么您应该集中提供时间的代码。

在实时视频游戏中,这通常在顶级游戏循环内完成,时间增量(来自上一次调用)被传递给较低级别​​的代码,而不是时间索引。这样,您可以将相同的 delta 传递给所有代码,并期望它们都能正常运行。

如果不需要同步(您不是根据经过的时间进行模拟),那么只需在整个代码中获取当前时间,并像现在一样采用本地增量。这是一个很好的做法,因为大多数编程语言中的时钟代码都足够高级,不会有大量的代码重复。您可以在业务应用程序中执行此操作(例如,不允许某人在某个日期或时间之后执行某些操作),或者在任何其他应用程序的进度对话框中执行此操作。

如果您不需要同步,并且实际上并不关心当前时间是多少,而只是需要以半固定的时间间隔启动一些​​代码,那么只需使用计时器(请参阅 utdmr 的答案)。

准确度:

如果您对精确计时没有强烈需求,那么您可以简单地使用相当于计时器或线程睡眠的功能(请参阅 utdmr 的答案)。

如果您对计时精度有关键任务需求(例如发射火箭),那么您的硬件、操作系统、其他应用程序、编程语言等都需要支持实时计算。这可能超出了您的预期。

如果您对准确性有某种强烈的需求(例如,在游戏中,时间的抖动或跳跃会使您的模拟明显抖动,但不会终结世界),那么您将需要更复杂的设置。此处提供了此类设置的示例:

http://gafferongames.com/game-physics/fix-your-timestep/

该代码可能无法完全按照您的需要进行排列,但它可以根据您的应用程序布局进行调整。基本前提是制作时间的生产者/消费者模型,并以固定的增量进行分配。

【讨论】:

  • @Gjorgji:我不完全理解这个问题。请根据您的程序要求、到目前为止所做的工作、一些代码示例以及您遇到的具体问题来扩展您的问题。没有这些,回答是疯狂的猜测工作:)
  • @Gjorgji:你在哪里“设置 t1 然后检查 t2 - t1 = 1”?您粘贴的代码没有说明谨慎的时间,只有增量(t)。另外,请编辑您的问题以添加代码。这在 stackoverflow.com 上受到鼓励,而且非常棒,IMO :)
  • 编辑了问题中的代码并添加了我希望的更精确的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
相关资源
最近更新 更多