gpt4 book ai didi

javascript - CesiumJS - 如何控制查看器时间和滴答声?

转载 作者:行者123 更新时间:2023-11-29 10:31:17 26 4
gpt4 key购买 nike

我想做的是控制一个非实时 Cesium 应用程序的时钟滴答。想象一下有昂贵的代码在运行,而且我想给查看者时间在继续之前加载图 block 。那么如何禁用自动滴答,然后在我的代码准备好时手动调用 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
}

感谢您的帮助!最大

最佳答案

时钟的 onTick 事件会为渲染的每个动画帧触发,无论时钟是否及时推进,这是 Cesium API 的一个遗留怪癖。

如果你想自己控制 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com