2015-05-20 12 views
5

कैसे साफ़ कर सकता हूं, मैं दृश्य को नष्ट किए बिना दृश्य में सभी वस्तुओं को साफ़ करने के तरीकों को खोजने का प्रयास कर रहा हूं। मुझे पता है कि वस्तु का नामकरण एक तरीका है और फिर जब हम वस्तु को हटाना चाहते हैं, तो हम इसे इसके नाम से "प्राप्त" करते हैं। हालांकि, मैं उनके नामों के बावजूद, इसमें सभी वस्तुओं के दृश्य को साफ़ करने का एक त्वरित तरीका ढूंढना चाहता हूं। क्या ऐसा करने का कोई आसान तरीका है? धन्यवाद!मैं तीन .JS दृश्य

उत्तर

5

आप दृश्य की बाल वस्तुओं को पार कर सकते हैं और उन्हें एक-एक करके हटा सकते हैं।

 scene.children.forEach(function(object){ scene.remove(object); }); 

संपादित करें:

टिप्पणी में सुझाव के रूप में, इसके बाद के संस्करण जवाब गलत है। दृश्य से सभी ऑब्जेक्ट्स को हटाने का सही तरीका एक/लूप के लिए उपयोग कर रहा है।

while(scene.children.length > 0){ 
    scene.remove(scene.children[0]); 
} 

नोट: यह ऑब्जेक्ट पदानुक्रम की एक त्वरित और गंदे समाशोधन है। यदि आप इसे करने के लिए बहुत कुछ करने की योजना बना रहे हैं तो आप ऊपर दिए गए कोड के साथ मेमोरी लीक में चलने का जोखिम उठाते हैं क्योंकि रेंडरर ऑब्जेक्ट्स सामग्री, बनावट और ज्यामिति के संदर्भ में है। दृश्य का एक पूरा साफ अधिक जटिल है और बहुत सारे अन्य प्रश्न है कि और अधिक विस्तार में चला जाता है देखते हैं: मैं एक अधिक संक्षिप्त है

+3

इस समाधान, वह सही नहीं है क्योंकि आप सरणी जो पाश में संशोधित अधिक पुनरावृत्ति कर रहे हैं, तो कुछ तत्वों को छोड़ दिया जा सकता है (उदाहरण के लिए आप बच्चों में दो तत्व है जब), के साथ बदलें करें: '' 'जबकि (दृश्य .children.length> 0) { scene.remove (scene.children [0]); } '' ' – Alleo

0

ऐसा करने का तरीका। मैंने देखा कि ऑब्जेक्ट 3 डी की remove विधि ऑब्जेक्ट हटाने के लिए एक से अधिक पैरामीटर स्वीकार करती है। यह हमें अंतर्निहित apply फ़ंक्शन के लिए विधि का लाभ उठाकर व्यक्तिगत पैरामीटर के रूप में प्रत्येक तत्व का उपयोग करने के लिए कॉल को संशोधित करके संपूर्ण children सरणी का उपयोग करने की अनुमति देता है।

scene.remove.apply(scene, scene.children); 
0

सभी बच्चों Traversing और उनके ज्यामिति, सामग्री और बनावट पर निपटाने फोन: यह बहुत की तरह काम करता है। नीचे दिया गया कोड मेरा समाधान है।

function clearThree(obj){ 
    while(obj.children.length > 0){ 
    clearThree(obj.children[0]) 
    obj.remove(obj.children[0]); 
    } 
    if(obj.geometry) obj.geometry.dispose() 
    if(obj.material) obj.material.dispose() 
    if(obj.texture) obj.texture.dispose() 
} 

clearThree(scene)