如何在 Cesium Js 中创建一个单独的时钟并使用自定义控件对其进行控制

How to Create a Separate Clock and control it with Custom control in Cesium Js

我在一个模拟项目中工作,我需要在不同的实体上应用动画。项目要求是为 Play/Pause 动画创建自定义控件。实体使用插值路径在其上移动。如图所示example.

我想应用一个单独的时钟,而不是使用默认值 viewer.clock。因此我试图修改上面的例子。这是 link

我创建了一个单独的时钟:

var start = Cesium.JulianDate.fromDate(new Date(2015, 2, 25, 16));
var stop = Cesium.JulianDate.addSeconds(
  start,
  360,
  new Cesium.JulianDate()
);

//Make sure viewer is at the desired time.
var clock = new Cesium.Clock();
clock.startTime = start.clone();
clock.stopTime = stop.clone();
clock.currentTime = start.clone();
clock.clockRange = Cesium.ClockRange.LOOP_STOP;
clock.multiplier = 10;
clock.shouldAnimate = true;
var clockViewModel = new Cesium.ClockViewModel(clock);
var viewModel = new Cesium.AnimationViewModel(clockViewModel);

并试着这样称呼他们:

Sandcastle.addDefaultToolbarButton("Start", function () {
  viewModel.pauseViewModel.command();
});

Sandcastle.addDefaultToolbarButton("Stop", function () {
  viewModel.pauseViewModel.command();
});

但是动画没有开始。也没有任何例外。请指正。

为什么动画没有开始?

请注意,动画是使用 CesiumJS 中查看器的时钟执行的。
在您的代码查看器中,时钟与您的自定义时钟不同。
我的意思是观众时钟的年份是 2021 年,而您时钟的年份是 2015 年。
因此,您的实体 (Cesium_Air.glb) 的可用性将是错误的,最后,ModelVisualizer 会跳过实体的呈现。

解决方案
您应该将查看器的时钟与您的自定义时钟同步,以便您的实体的可用性变为真实。

这是一个Sandcastle link。 这里有一个source code.