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 当前时间。