我的节目有多个场景。当然只有1个场景可见,所以如何停止除当前场景之外的所有其他场景的动画以提高性能?有10个场景,每个场景中有很多物体会影响性能。
我知道可以用cancelAnimationFrame()
完成,但是如何实现呢?据说,为了提高性能,这是recommended的最佳实践吗?
10个场景是一系列场景。当前场景是传递给scenes[]
数组的用户输入数值。
function changeScene() {
// Set the currentScene to the user selection
var sceneNumber = list.options[list.selectedIndex].value;
currentScene = scenes[sceneNumber-1];
// Hide all scenes by default
for(var j=0;j<10;j++){
scenes[j].visible = false;
}
}
除了currentScene
之外,我已经将所有场景编程为默认隐藏。但我发现在我的案例中没有帮助研究如何使用cancelAnimationFrame()
。另外,一个后续问题:只有在页面加载了包含所有对象的所有场景后才会激活cancelAnimationFrame()
吗?或者它也有助于加载时间?
我的FIDDLE包含上述及相关代码。
答案 0 :(得分:2)
动画是数字参数随时间的变化。在您的示例中,这意味着更改spinningRig
方法中的animate()
旋转角度。只要您更改当前场景的旋转 - 您实际执行的操作 - 其他场景就不会被动画化。
如果您可能正在处理渲染而不是动画,则再次无需担心,因为Three.JS仅渲染您在renderer.render()
中指定的一个场景。
或者你正在解决其他问题吗?动画显然不是问题。