2012-08-17 12 views
5

Three.js में, अगर मैं इस (सरलीकृत उदाहरण) की तरह एक से अधिक ऑब्जेक्ट को लोड करने JSONLoader करने के लिए कई कॉल:Three.js JSONLoader कॉलबैक

function init() {  
    var loader = new THREE.JSONLoader();  
    loader.load("mesh1.js", createScene);  
    loader.load("mesh2.js", createScene); 
}  

function createScene(geometry) {  
    if (geometry.filename == "mesh1.js") {  
    mesh1 = new THREE.Mesh(geometry, material); 
    scene.add(mesh1);  
    } else if (geometry.filename == "mesh2.js") {  
    mesh2 = new THREE.Mesh(geometry, material); 
    scene.add(mesh2); 
    } 
} 

मैं निर्धारित कर सकते हैं कैसे जो जाल कॉलबैक पर लौटा दिया गया है , खासकर जब वे अक्सर आदेश से बाहर आते हैं?

मैं एक सामान्य जेबिक कॉलबैक फ़ंक्शन के साथ कई लौटे मैश को संभालने का प्रयास कर रहा हूं। क्या लौटा ज्यामिति में कुछ संपत्ति है जो मूल फ़ाइल नाम को इंगित करती है जिसका मैं परीक्षण कर सकता हूं?

या शायद एक और शानदार तरीका है? शायद प्रत्येक कॉल के लिए एक नया THREE.JSONLoader ऑब्जेक्ट बनाना कॉलबैक फ़ंक्शन निर्धारित करेगा कि कौन सा जाल आया है?

मैं किसी भी मदद/विचारों की सराहना करता हूं! धन्यवाद!

उत्तर

7

अच्छी तरह से एक और सामान्य तरीका है तो वेस्टलैंगली क्या प्रस्तावित करता है।

loader.load("mesh1.js", meshloader("mesh1.js")); 
loader.load("mesh2.js", meshloader("mesh2.js")); 

तो

function meshloader(fileName){ 
    return function(geometry){ 
     ... 
    } 
} 

इस तरह, आप प्रत्येक भरी हुई फ़ाइल पर एक पहचानकर्ता जोड़ सकते हैं।

+0

शानदार ... मैं यह काम करने में सक्षम था। मैं कभी भी एक समारोह में एक समारोह वापस करने के लिए सोचा नहीं होगा। मैं वास्तव में यहां क्या हो रहा है पर वास्तव में उत्सुक हूं ... क्या आप कृपया कुछ दस्तावेज की दिशा में कैसे काम करते हैं या मुझे इंगित करते हैं, इस बारे में थोड़ा सा समझा सकते हैं? – Dev

+4

@ डेव इसे एक [बंद] कहा जाता है (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures)। जब 'meshloader ("mesh1.js") को तर्क के रूप में पारित किया जाता है, तो इसे सीधे निष्पादित किया जाता है (कोष्ठक की उपस्थिति के कारण)। निष्पादित होने पर, यह एक और कार्य देता है। तो यह ठीक है जैसे आपने अज्ञात फ़ंक्शन 'फ़ंक्शन (ज्यामिति) {...} 'को एक तर्क के रूप में पारित किया है, सिवाय इसके कि यह अज्ञात फ़ंक्शन किसी संदर्भ में कॉलबैक के रूप में निष्पादित किया जाएगा जहां चर' फ़ाइल नाम 'परिभाषित किया गया है और इसमें मान '" mesh1.js "'। – Pioul

0

इस तरह कुछ कैसे?

loader.load("mesh1.js", function(geometry) { createScene(geometry, 1) }); 
loader.load("mesh2.js", function(geometry) { createScene(geometry, 2) }); 

फिर,

function createScene(geometry, id) { 
... 
} 

id अगर आपको लगता है कि पसंद करते हैं जाल नाम हो सकता है।

+0

आह, मैं इस पथ से नीचे गया हूं .. यकीन है कि यह स्थिरता के साथ काम करता है, जैसे "1" या "2" लेकिन समस्या यह प्रतीत होती है कि जब "1" और "2" को एक चर के साथ बदल दिया जाता है, "एक्स" कहें, वैरिएबल का मूल्यांकन केवल * * कॉलबैक रिटर्न के बाद किया जाता है। मुझे लोडर से पहले निर्धारित मान के साथ एक वैरिएबल के साथ पास करने का कोई तरीका नहीं दिख रहा है। लोड कहा जाता है ... समझ में आता है? दायरा समस्या? अस्थायी समस्या? – Dev

+0

यह आपके प्रश्न का उत्तर है। अब आप एक अलग सवाल पूछ रहे हैं। शायद आप एक नया मुद्दा पोस्ट कर सकते हैं। – WestLangley