2012-12-06 12 views
6

मुझे ईवेंट सीमाओं के बाहर ऑब्जेक्ट तक पहुंचने में कोई समस्या है। यदि मैं ऑब्जेक्ट को एक सरणी में डालता हूं और चेकआउट जो सरणी सरणी भी खाली है, लेकिन घटना के दायरे में यह पूर्ण है। मुझे यह जानने की ज़रूरत है कि मैं ईवेंट स्कोप के बाहर ऑब्जेक्ट को कैसे एक्सेस कर सकता हूं।THREE.js ओबीजे लोडर ऑब्जेक्ट्स

for (var i = 0; i < 19; i++){ 
    var loader = new THREE.OBJMTLLoader(); 

    loader.addEventListener('load', function (event) { 
     var tree = event.content; 
     myWorld.setWorldTreePosition(multiplier); 

     tree.position.y = 0; 
     tree.position.x = myWorld.myTreePosition.position.x; 
     tree.position.z = myWorld.myTreePosition.position.z; 
     tree.rotation.x = -(Math.PI/2); 
     tree.scale.set(10,5,5); 
     scene.add(tree); 
     collidableMeshList2.push(tree); 

     tree.castShadow = true; 
     //collidableMeshList.push(tree); 
     multiplier += 500; 

     console.log(collidableMeshList2); // here it is full of trees. 
    } 
); 

loader.load('obj/Palm_Tree.obj', 'obj/Palm_Tree.mtl'); 
//outside this all becomes empty. 

console.log(collidableMeshList2); // here is list is empty but I don't know why. 
+0

आपको कम से कम लूप की फ़ाइल लाइन को इसके बाहर ले जाना चाहिए। आप कई श्रोताओं को एक लोडर में जोड़ सकते हैं जो मुझे लगता है लेकिन यदि आप लूप में ऑब्जेक्ट को फिर से परिभाषित करते हैं, तो यह हर बार बदल जाएगा। इस के साथ सवाल अपडेट करें ताकि आपको बेहतर प्रतिक्रिया मिल सके। – recluze

उत्तर

2

यह दायरे के बारे में नहीं है; यह खाली है क्योंकि लोडर को ऑब्जेक्ट लोड करने की प्रतीक्षा करने की आवश्यकता है इससे पहले कि आप वहां पेड़ देखेंगे - जो ऐडवेन्ट लिस्टनर ("लोड") करता है। आपके कोड स्निपेट की अंतिम पंक्ति आपके लोड फ़ंक्शन से पहले निष्पादित होती है।

आपका कोड स्निपेट उलझन में है, यह तुरंत स्पष्ट नहीं है कि आप लूप के साथ क्या करने का प्रयास कर रहे हैं। आप कई लोडर बना रहे हैं और उन्हें लोड इवेंट श्रोता संलग्न कर रहे हैं। लेकिन आपका loader.load() कॉल लूप के बाद है, इसलिए यह अंतिम लोडर पर लागू होगा। आप संभवतः लूप के अंदर अपने लोडर ऑब्जेक्ट सृजन को ऊपर ले जाना चाहते हैं, या लूप के अंदर loader.load कॉल को ले जाना चाहते हैं।

+0

** loader.load() ** लूप में है, इसलिए यह प्रत्येक लोडर पर लागू होता है। दूसरी बात मैंने लूप के बिना यह कोशिश की लेकिन वह भी काम नहीं किया। मैंने लूप बनाया क्योंकि मैं बार-बार ऑब्जेक्ट लोड करना चाहता हूं क्योंकि मुझे अलग-अलग स्थानों पर पेड़ ऑब्जेक्ट को अपने गेम में रखना था। –

संबंधित मुद्दे