2013-10-18 7 views
6

मुझे एनीमेशन चलाने में परेशानी हो रही है। यह var ob1 = function() {}; के अंदर है। जब बुलाया जाता है, यह थोड़ी देर के लिए चलता है और फिर मुझे Uncaught RangeError: Maximum call stack size exceeded त्रुटि मिलती है। हालांकि, इस संरचना में वस्तु के बाहर चलने में कोई समस्या नहीं है।चल रहे अनुरोधएनीकरण एक नई वस्तु के भीतर से

requestAnimationFrame(this.render); 

जब से तुम render अंदर this उपयोग कर रहे हैं, तो आप शायद bind की आवश्यकता होगी::

/////////////// Render the scene /////////////// 
this.render = function(){ 

     renderer.render(scene,camera); 
     if(isControls == true) controls.update(clock.getDelta()); 
     this.animate(); 
     //console.log(true); 
     requestAnimationFrame(this.render()); 
} 

/////////////// Update objects /////////////// 
this.animate = function(){ 
     console.log("!"); 
} 
+1

'requestAnimationFrame' कॉलबैक की अपेक्षा करता है, आप बस 'अपरिभाषित' गुजर रहे हैं। – elclanrs

उत्तर

15

आप एक समारोह संदर्भ requestAnimationFrame को, समारोह पारित आह्वान नहीं किया जाना चाहिए

requestAnimationFrame(this.render.bind(this)); 

आपका संस्करण एक स्टैक ओवरफ़्लो उत्पन्न कर रहा है (फ़ंक्शन कॉल सिंक पूर्ण होने तक, सिंक्रनाइज़ रूप से कॉल कर रहा है)।


+0

वास्तव में मैंने पहले कोशिश की, क्योंकि मैं सामान्य रूप से ऐसा करता हूं, लेकिन यह काम नहीं करता है। यह केवल 1 बार चलता है और मुझे यह बताता है। इस (।) को चलाने के बाद, एनिमेट() मौजूद नहीं है। अगर मैं इसे पहली चीज़ के रूप में रखता हूं, तो मुझे 'अनकॉल्ड टाइप एरर मिलता है: टाइप त्रुटि cleanedupmenufunctions.php: 167 रेंडर – JVE999

+0

मैंने अभी अपना जवाब अपडेट किया है, आपको एक निश्चित' यह 'मान के साथ एक बाध्य फ़ंक्शन की आवश्यकता है। – bfavaretto

+0

आह, लाइन 'अनुरोधएनीमेशन फ्रेम (this.render.bind (यह));' महान काम करता है! कई ताज़ा करने के बाद कोई त्रुटि नहीं। – JVE999

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