Did not find a way to manually stop the engine. I have tried to cancelAnimationFrame but the engine is still running. Even engine.enabled = false does not seem to have any effect.
I love matterjs but this is a show stopper.
Solution was to extend the library code:
Engine.run = function(engine) {
...
(function render(time){
engine.reqAnimFrame = _requestAnimationFrame(render);
if (!engine.enabled)
return;
and then by outside (non-library) code:
var cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame
|| window.webkitCancelAnimationFrame || window.msCancelAnimationFrame
|| window.oCancelAnimationFrame;
cancelAnimationFrame(_engine.reqAnimFrame);
Setting engine.enabled = false should stop the engine, do you mean that it specifically does not stop the requestAnimationFrame callbacks?
I'm interested to know why that was causing you problems, since it means that nothing is being executed( even though the callbacks are called)?
Either way, my suggestion is also to do as you said, create your own runner.
The included Engine.run is just an optional utility game loop to get people started.
Are you still having issues here?
Hi liabru, thx for your interest :)
Setting engine.enabled = false should stop the engine, do you mean that it specifically does not stop the requestAnimationFrame callbacks?
thats what I got with Firefox 30.0.
I experienced a CPU usage of approx. 25% even with Engine.enabled = false and Engine.clear(). I also don't understand why it still utilizes the CPU. I am using your library in an angular context - when the directive is destroyed, I also wanted to stop matter-js completely. Maybe you can provide a public function, e.g. Engine.destroy() / Engine.stop() which also kills the animationFrame requests?
Keep up your very nice piece of work :+1:
Ah, interesting I wasn't aware of this issue. I'll look into getting this sorted, thank you for the info.
I've resolved this by refactoring the engine runner out into a new module Matter.Runner.
The new method is Runner.stop(engine) which will cancel the frame request.
It's available in the latest edge build if you want to try it!
It works like a charm! Thank you - now I can delete the custom cancelling code here :-)
Most helpful comment
I've resolved this by refactoring the engine runner out into a new module Matter.Runner.
The new method is
Runner.stop(engine)which will cancel the frame request.It's available in the latest edge build if you want to try it!