I'm having trouble running an animation. This is inside var ob1 = function() {};
. When called, it runs for a while and then I get the error Uncaught RangeError: Maximum call stack size exceeded
. However, this same structure has no problems running outside of the object.
/////////////// 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("!");
}
Any requests registered before the execution of the next repaint gets added to the frame; there's no limit on how many requests can be included in each frame. The handle returned by requestAnimationFrame is a request ID, unique to that particular request, not a frame ID unique to the frame.
requestAnimationFrame() is 1 shot. You should call this method whenever you're ready to update your animation onscreen. This will request that your animation function be called before the browser performs the next repaint.
With requestAnimationFrame, your frame rate is typically around 60 frames per second (FPS). To repeat that differently, this means your requestAnimationFrame function and related code have the potential to refresh your screen 60 times every second.
The reason for this is because you must re-call requestAnimationFrame inside your function to queue up the next time the function will be called. Unlike setInterval , requestAnimationFrame will only continue to call the same function if you tell it to.
You should pass a function reference to requestAnimationFrame
, not invoke the function:
requestAnimationFrame(this.render);
Since you're using this
inside render
, you'll probably need bind
:
requestAnimationFrame(this.render.bind(this));
Your version is causing a Stack Overflow (the function is calling itself synchronously, until the call stack is full).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With