Cesium 中的时钟类,其可用于控制和监控时间相关操作。
Cesium 的 Clock 对象管理时间,它在多个场合被使用,如在动画更新中,动态时钟等场景。Clock 对象使用系统级时间,而非应用本身的时间。
创建 Clock 对象通过以下构造函数:
let clock = new Cesium.Clock({
startTime: Cesium.JulianDate.fromIso8601('2013-12-25'),
currentTime: Cesium.JulianDate.fromIso8601('2013-12-25T12:00:00Z'),
stopTime: Cesium.JulianDate.fromIso8601('2013-12-25T23:59:59Z'),
clockRange: Cesium.ClockRange.LOOP_STOP,
clockStep: Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER,
multiplier: 60,
shouldAnimate: true
});
构造参数如下:
startTime:开始时间;currentTime:当前时间;stopTime:结束时间;clockRange:时钟的操作范围;clockStep:时钟如何流动;multiplier:改变时间流速;shouldAnimate:时钟是否在动画。startTime:得到开始时间;stopTime:得到结束时间;currentTime:获取或者设置当前时间;multiplier:改变当前时间的流速,比如值为 2 时,时间流逝速度将加倍;shouldAnimate:时钟是否在动画;clockRange:时钟的操作范围;clockStep:时钟如何流动;tick:事件。时钟的 currentTime 属性可被程序修改。
// 当前时间增加5秒
let now = Cesium.JulianDate.addSeconds(clock.currentTime, 5, new Cesium.JulianDate());
clock.currentTime = now;
设置 clock 的循环属性为 LOOP_STOP 或 LOOP_STOP:
clock.clockRange = Cesium.ClockRange.LOOP_STOP;
此时,当时间流逝到 stopTime 时,时钟自动重置到 startTime 时刻重新开始。
设置 clock 的循环属性为 CLAMPED:
clock.clockRange = Cesium.ClockRange.CLAMPED;
此时,时间流逝到 stopTime 后,将不再进一步前进。
时钟的 clockStep 属性控制如何过渡到下一个时间。
clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER;
SYSTEM_CLOCK 表示使用系统时间改变时钟时间,即每次调用道理会触发推进时间,SYSTEM_CLOCK_MULTIPLIER 表示以指定的倍数自动推进时间,在需要快速运动时非常有用。还可以使用 TICK_DEPENDENT 方式。
let clock = viewer.clock;
let handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function() {
console.log('当前时间:' + clock.currentTime.toString());
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
此时当左键被单击时,控制台将 log 当前时间。