我想做的是控制非实时Cesium应用程序的时钟滴答。想象一下,运行着昂贵的代码,再加上我想给观众一些时间来加载切片,然后再继续。那么,如何禁用自动滴答,然后在我的代码准备就绪时手动调用tick()?
Cesium.Clock的文档说:“只有在Clock#canAnimate和Clock#shouldAnimate为true时,时钟才会滴答。” 但这不是我得到的。我目前看到的是:
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句