2017-01-03 53 views
0

我的程序有多个场景。当然,只有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与上述和相关的代码。

+1

根据您的jsfiddle示例,您已经使用了一个且仅设置为当前场景。没有动画或其他场景的渲染。 – prisoner849

+0

好吧,我很困惑。那么,如果在很多场景中有很多对象,并且'currentScene'在我的实际程序中只有相对较少的对象,那么如果所有其他场景都设置为'''',那么加载页面需要一段时间,可见= false“,并且这些场景的动画被停止了?还有什么可能是加载时间的原因和/或修复? – Zhyohzhy

回答

2

动画是随时间变化的数字参数。在你的例子中,这意味着在animate()方法中改变spinningRig旋转角度。只要你改变当前场景的旋转 - 你实际上做了 - 其他场景没有被动画。

如果您可能正在寻求渲染而不是动画,那么再次不需要担心,因为Three.JS只渲染了您在renderer.render()中指定的一个场景。

或者你是否正在寻求其他的东西?在这里动画显然不是问题。

+0

在我的真实程序中,我添加到场景中的对象来自数组,每个对象都被赋予纹理。如果我将大量的对象(如1000)推送到场景中,那么页面的加载时间比10个对象大得多。尽管如此,当所有场景中的对象默认设置为不可见时,除'currentScene'之外。我还有一个错误的印象,那就是这些场景的动画仍在运行。但是,如果它不是可见性和动画,那还有什么问题呢? – Zhyohzhy

+0

所以加载是个问题。 Three.js中的加载器不考虑哪些场景可见,哪些不可见。这有很多很好的理由(预加载,模型在场景中共享等)。恐怕你必须自己管理它,例如首先从可见场景加载模型,然后才开始加载其他模型。 – Matey

相关问题