pyxen.time

从引擎访问基于帧的时间信息。

另见:游戏循环

time = pyxen.time

time 模块提供:

  • 当前帧号
  • 每秒帧数
  • 增量时间
  • 经过的时间

所有属性均为只读


属性

属性类型描述
frameint自启动以来的当前帧号
fpsint目标每秒帧数
dtfloat增量时间(每帧秒数)
tfloat经过的时间(秒)

frame

current_frame = pyxen.time.frame
  • 0 开始
  • 每帧递增
  • 用于基于帧的逻辑

示例:

if pyxen.time.frame % 60 == 0:
    print("One second passed (at 60 FPS)")

fps

fps = pyxen.time.fps

返回引擎的每秒帧数。

示例:

print("Running at", pyxen.time.fps, "FPS")

dt(增量时间)

delta = pyxen.time.dt

等同于:

1.0 / pyxen.time.fps

表示单帧的持续时间(秒)。

用于帧率无关的移动:

player.x += speed * pyxen.time.dt

t(经过的时间)

elapsed = pyxen.time.t

等同于:

pyxen.time.frame / pyxen.time.fps

表示自游戏启动以来的总时间(秒)。

示例:

if pyxen.time.t > 10:
    spawn_boss()

基于帧 vs 基于时间的逻辑

基于帧

if pyxen.time.frame % 30 == 0:
    blink()

可预测且确定性。


基于时间

player.x += velocity * pyxen.time.dt

不受 FPS 变化影响。


常见模式


动画定时器

if pyxen.time.t % 1.0 < 0.5:
    sprite.visible = True
else:
    sprite.visible = False

冷却定时器

if pyxen.time.t - last_shot_time > 0.25:
    shoot()
    last_shot_time = pyxen.time.t

延迟动作(基于帧)

if pyxen.time.frame == 120:
    start_level()

只读安全

所有属性均为只读:

pyxen.time.frame = 10  # Raises ValueError

引擎内部管理时间状态。

有关游戏循环的更多信息,请参见游戏循环