在 cesiumjs 中,ClockStep 是控制每一帧时间步进大小的属性。它决定了时间如何在场景中流逝,这对于进行动画和模拟非常重要。
ClockStep 属性有以下几种值:
使用 TICK_DEPENDENT 时,当前时间步长将根据框架率动态设置。例如,如果每秒呈现60帧,则每秒的时间步长将是约0.016秒,以使每帧之间流逝的时间相同,从而实现流畅的运动。
在 SYSTEM_CLOCK_MULTIPLIER 中,Cesium 时钟由外部时钟(例如浏览器系统时钟)驱动,时间步长是当前系统时间与前一帧的时间差乘以 SYSTEM_CLOCK_MULTIPLIER 值。此选项适用于需要与现实时间同步的应用程序,例如航空飞行。
当您想要完全按照实际时间流逝进行动画时,可以使用 SYSTEM_CLOCK。时间步长将对当前系统时钟的时间差一直增加以模拟时间流逝。
有时您希望模拟一个不同于实际时间的时间流逝速度。在 SIMULATED 中,时间步长将为设定的值,并且每一步都会逐渐逼近该值(如果未设置加速或减速),或以设置的速度加速或减速。
可以像下面这样设置 ClockStep 值:
viewer.timeline.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER;
viewer.timeline.clock.multiplier = 10;
这将使时钟按照比实际时间流逝快10倍进行模拟。
使用 SYSTEM_CLOCK_MULTIPLIER 和 SYSTEM_CLOCK 时,必须在启用此选项之前调用“clock.shouldAnimate = true”,因为此选项需要启用 animation loop。
使用 SYSTEM_CLOCK 或 SYSTEM_CLOCK_MULTIPLIER 时,Cesium 会与浏览器的 setInterval 一起使用 requestAnimationframe,从而导致一些略微的不同步。
对于实时时间应用,建议使用 SYSTEM_CLOCK_MULTIPLIER,在这种情况下,使用外部时间不会影响应用程序的帧速率和性能。
可以使用 viewer.clock.canAnimate 检查 clock 是否可用于动画。
如果将 clock.canAnimate 设置为 false,将不会动画 clock,即使 clockStep 设置为 TICK_DEPENDENT。