three.js - 使用setTimeout时如何停止threejs动画?
问题描述
为了设置每秒帧速率 (fps),我使用了通用模式:
function animate() {
setTimeout( function() {
id = requestAnimationFrame( animate );
}, 1000 / fps );
renderer.render();
}
我的问题是停止这个循环的最佳方法是什么?运行cancelAnimationFrame(id);
不起作用,因为这会杀死一个瞬间帧,但是一旦 setTimeout 回调触发,它就会再次启动。
我发现使用额外的标志似乎不需要显式调用cancelAnimationFrame
:
let isAnimating = false;
function animate() {
if(!isAnimating) return;
setTimeout( () => requestAnimationFrame(animate), 1000/fps )
renderer.render();
}
function startAnimating(){
isAnimating = true;
animate();
}
function stopAnimating(){
isAnimating = false;
}
...但我想知道是否有更好/更清洁的方法(我想确保不会导致任何内存泄漏!)?谢谢!
解决方案
推荐阅读
- angular - 模板内的 ngOnInit()
- c++ - 是否可以将类的对象声明为同一类的成员变量?
- git - 使用 Github Actions 推送到带有访问令牌的 Gitlab
- javascript - 创建多个目录并异步写入多个文件
- excel - Excel VBA根据另一个单元格的值逐行更改单元格的值
- python - 从 cmd 行中运行的 python 恢复日志
- r - 未检测到 NA
- ios - 如何将我的可发布密钥传递给 stripe_payment Flutter 插件?
- amazon-cognito - AWS Cognito 代替 Keycloak
- javascript - 触发 Javascript 验证,然后触发 ASP.NET 控件 Submit_Click1