我想要做的是控制非实时 Cesium 应用程序的时钟滴答声。想象一下,运行着昂贵的代码,而且我想让查看器有时间在继续之前加载图块。那么 如何禁用自动滴答,然后在我的代码准备好时手动调用 tick() ?
Cesium.Clock 的文档说“只有当 Clock#canAnimate 和 Clock#shouldAnimate 都为真时,时钟才会滴答作响。”但这不是我得到的。
我目前看到的:
viewer.clock.canAnimate = false;
viewer.clock.shouldAnimate = false;
viewer.clock.onTick.addEventListener(function(clock){
console.log("Tick");
});
控制台中的结果显示时钟仍在滴答作响:
Tick
Tick
Tick
Tick
...
我想做什么:
viewer.clock.stopTicking(); // or whatever that command would be...
while (someCondition){
// run expensive code
tick(); // issue manual tick
}
谢谢你的帮助!
最大限度
最佳答案
这是 Cesium API 的一个遗留问题,即时钟的 onTick
事件会为渲染的每个动画帧触发,无论时钟是否及时推进。
如果你想自己控制 Cesium 的渲染循环,你可以这样做:
viewer.useDefaultRenderLoop = false;
function myOwnRenderLoop() {
viewer.resize();
viewer.render();
Cesium.requestAnimationFrame(myOwnRenderLoop);
}
Cesium.requestAnimationFrame(myOwnRenderLoop);
上面,我使用的是
requestAnimationFrame
,所以循环运行得尽可能快。但是我可以用 setTimeout
替换它以获得更慢的循环,模拟糟糕的渲染性能。请注意,当使用更长的时间间隔时,这种方法的交互性和屏幕更新会减慢。viewer.useDefaultRenderLoop = false;
function myOwnRenderLoop() {
viewer.resize();
viewer.render();
window.setTimeout(myOwnRenderLoop, 500);
}
window.setTimeout(myOwnRenderLoop, 500);
关于javascript - CesiumJS - 如何控制查看器时间和刻度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45529004/