我想要做的是控制非实时 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/

10-09 17:31