pyglet.clock

精确的帧速率计算功能调度。

这个 clock 模块允许您安排函数定期运行,或在将来一次性执行。Piglet的默认事件循环 (run() )保存一个 Clock ,它是自动勾选的。

备注

一些内部模块会在时钟上安排项目。如果您使用的是自定义事件循环,请始终记住 tick 时钟!

排程

您可以计划在每次时钟滴答时调用的函数::

def callback(dt):
    print(f"{dt} seconds since last callback")

clock.schedule(callback)

这个 schedule_interval 方法导致每隔“n”秒调用一次函数::

clock.schedule_interval(callback, 0.5)   # called twice a second

这个 schedule_once 方法会导致函数在未来的“n”秒内被调用一次::

clock.schedule_once(callback, 5)        # called in 5 seconds

所有的 schedule 方法将您指定的任何其他参数或关键字参数传递给回调函数::

def move(dt, velocity, sprite):
    sprite.position += dt * velocity

clock.schedule(move, velocity=5.0, sprite=alien)

您可以使用以下任一方法取消安排的活动 unschedule **

clock.unschedule(move)

使用多个时钟

时钟函数都被传递给 Clock 它是用模块初始化的。您可以让此实例直接使用::

clk = pyglet.clock.get_default()

您也可以用您自己的时钟替换默认时钟:

Myclk=pyglet.clock.Clock()pyglet.clock.set_default(Myclk)

每个时钟维护自己的一组预定功能和频率测量。每一个时钟都必须单独“滴答”。

多个和派生的时钟潜在地允许您将“游戏时间”和“挂钟时间”分开,或者使您的时钟与音频或视频流而不是系统时钟同步。

class Clock
__init__(
time_function: ~typing.Callable = <built-in function perf_counter>,
) None

初始化时钟,具有可选的自定义时间功能。

您可以提供自定义时间函数来返回应用程序的经过时间(以秒为单位)。默认为 time.perf_counter ,但可以更换,以实现轻松的时间膨胀效果或游戏暂停。

call_scheduled_functions(dt: float) bool

调用上一次运行的调度函数 update_time

时钟滴答作响时自动调用此方法(请参阅 tick() ),所以在大多数情况下您不需要自己称呼它。

参数:

dt (float) -- 自上次更新以来传递给每个计划功能的时间。这是 not 用于计算哪些函数已过期。

返回类型:

bool

返回: True 如果调用了任何函数,否则 False

get_frequency() float

获取最近历史记录的平均时钟更新频率。

结果是最后“n”个更新的滑动窗口的平均值,其中“n”是设计用于覆盖大约1秒的某个数字。这是时钟频率, not 窗口重绘率(fps)。

返回类型:

float

get_sleep_time(sleep_idle: bool) float | None

获取下一个项目安排之前的时间(如果有的话)。

应用程序可以选择在空闲时间(没有调度任何功能)期间以最大帧速率继续接收更新,或者它们可以在空闲时间休眠,并允许CPU切换到其他进程或在低功率模式下运行。

如果 sleep_idleTrue 选择后一种行为,并且 None 如果没有计划的项目,将返回。

否则,如果 sleep_idleFalse ,或者如果存在任何计划项,则返回值0。

参数:

sleep_idle (bool) -- 如果为True,则应用程序打算在其空闲时间内休眠;否则,它将继续以允许的最大帧速率运行。

返回类型:

float | None

schedule(
func: Callable,
*args: Any,
**kwargs: Any,
) None

计划每个节拍都要调用的函数。

调度函数应该具有一个原型,该原型包括 dt 作为第一个参数,它给出了自上一个时钟滴答开始经过的时间(秒)。提供给此方法的任何附加参数或kwarg都将传递给回调::

def callback(dt, *args, **kwargs):
    pass
返回类型:

None

备注

使用此方法调度的函数将被默认的pyglet事件循环调用,这可能会导致较高的CPU使用率。通常情况下,使用 schedule_interval() 除非这是我们想要的。

schedule_interval(
func: Callable,
interval: float,
*args: Any,
**kwargs: Any,
) None

计划每隔一段时间调用一个函数 interval 几秒钟。

要安排以60 Hz(60帧/秒)调用函数,您需要使用 1/60 对于间隔等等。如果pyglet无法按时调用该函数,则会跳过(而不是累积)该计划。如果主线程过载或发生其他硬阻止调用,可能会发生这种情况。

The callback function prototype is the same as for schedule(). :rtype: None

备注

时间间隔 0 将防止该函数再次被调用。如果您想安排尽可能频繁地调用函数,请参阅 schedule()

schedule_interval_for_duration(
func: Callable,
interval: float,
duration: float,
*args: Any,
**kwargs: Any,
) None

临时安排每隔一段时间调用的函数 interval 几秒钟。

此方法将安排一个函数,以便每隔一段时间调用 interval 秒(请参见 schedule_interval() ),但会在之后自动取消计划 duration 几秒钟。

回调函数原型与的相同 schedule()

Args:
功能:

计时器超时时要调用的函数。

间隔:

每次呼叫之间等待的秒数。

持续时间:

计划函数的秒数。

返回类型:

None

schedule_interval_soft(
func: Callable,
interval: float,
*args: Any,
**kwargs: Any,
) None

安排大约每隔一年调用一个功能 interval 几秒钟。

此方法类似于 schedule_interval() 除了时钟会将间隔与其他调度功能异相移动,以便更均匀地分配CPU负载。

这对于需要定期调用但与初始启动时间无关的函数很有用。 pyglet.media 这样做是为了计划音频缓冲区更新,这需要定期进行--如果同时计划所有音频更新(例如,混合几个曲目的乐谱,或者同时播放多个视频),那么在这些间隔内,CPU上的负载会很大,但在外面却是空闲的。采用软间隔调度,使负载分布更加均匀。

软间隔调度也可以用作调度异相图形动画的一种简单方法;例如,多个旗帜在风中飘扬。

返回类型:

None

schedule_once(
func: Callable,
delay: float,
*args: Any,
**kwargs: Any,
) None

将函数安排为在之后调用一次 delay 几秒钟。

回调函数原型与的相同 schedule()

返回类型:

None

static sleep(microseconds: float) None
返回类型:

None

tick(poll: bool = False) float

表示已经过了一帧。

这将调用所有已过的调度函数,并返回自上次调用此方法以来的秒数。第一次调用此方法时,返回0。

参数:

poll (bool) -- 如果为True,则该函数将调用任何计划的函数,但不会因为任何原因而休眠或忙碌-等待。仅推荐高级应用程序管理其自己的休眠计时器。

返回类型:

float

unschedule(func: Callable) None

从明细表中删除功能。

如果该函数多次出现在明细表中,则会删除所有匹配项。如果未调度该函数,则不会引发错误。

返回类型:

None

update_time() float

获取自上次调用以来经过的时间 update_time

这会更新时钟的内部时间度量,并返回自上次调用以来的差值(以秒为单位)。此方法的第一次调用始终返回0。

返回类型:

float

get_default() Clock

获取pyglet默认时钟。

返回 Clock 实例,该实例由所有模块级别的时钟函数使用。

返回类型:

Clock

get_frequency() float
看见:

get_frequency()

返回类型:

float

get_sleep_time(sleep_idle: bool) float | None
看见:

get_sleep_time()

返回类型:

float | None

schedule(func: Callable, *args: Any, **kwargs: Any) None
看见:

schedule()

返回类型:

None

schedule_interval(
func: Callable,
interval: float,
*args: Any,
**kwargs: Any,
) None
看见:

schedule_interval()

返回类型:

None

schedule_interval_for_duration(
func: Callable,
interval: float,
duration: float,
*args,
**kwargs,
) None
看见:

schedule_interval_for_duration()

返回类型:

None

schedule_interval_soft(
func: Callable,
interval: float,
*args,
**kwargs,
) None
看见:

schedule_interval_soft()

返回类型:

None

schedule_once(func: Callable, delay: float, *args, **kwargs) None
看见:

schedule_once()

返回类型:

None

set_default(default: Clock) None

设置用于所有模块级别功能的默认时钟。

默认情况下, Clock 使用的是。

返回类型:

None

tick(poll: bool = False) float
看见:

tick()

返回类型:

float

unschedule(func: Callable) None
看见:

unschedule()

返回类型:

None