In the main program I randomly choose an object which I'd like to animate, so I call the function with the object as the argument. The first loop is okay, x
is finely set, but in the next turn it becomes undefined
.
Something like this:
var anim = { mainFunc: function(x) { anim.update(x); anim.redraw(x); window.requestAnimationFrame(anim.mainFunc); }, update: function(x) { }, redraw: function(x) { } }; var n=Math.floor(Math.random() * (ArrayOfAnimObject.length)); anim.mainFunc(ArrayOfAnimObject[n]);
requestAnimationFrame() method tells the browser that you wish to perform an animation and requests that the browser calls a specified function to update an animation before the next repaint. The method takes a callback as an argument to be invoked before the repaint.
You should be using only one requestAnimationFrame call as calls to requestAnimationFrame do stack.
A macrotask queue is a queue for setTimeout and requestAnimationFrame .
You either need to create a reference or wrap the function call in another function like so:
mainFunc: function(x) { anim.update(x); anim.redraw(x); window.requestAnimationFrame(function() { anim.mainFunc(x); }); }
You can also use .bind
.
mainFunc: function(x) { anim.update(x); anim.redraw(x); window.requestAnimationFrame(anim.mainFunc.bind(anim,x)); }
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