请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

RequestAnimation方法使用

为什么动画方法一定要这么写
let x = 1;

  function animation() {
    x += -0.01;
    gl.vertexAttrib1f(deg, x);
    gl.drawArrays(gl.TRIANGLES, 0, 3);
    requestAnimationFrame(animation);
  }
  animation();

才能生效,而不能这么写
let x = 1;

  function animation() {
    x += -0.01;
    gl.vertexAttrib1f(deg, x);
    gl.drawArrays(gl.TRIANGLES, 0, 3);
  }
  requestAnimationFrame(animation);

第一种写法为什么不会死循环

正在回答 回答被采纳积分+3

2回答

yancy 2023-03-10 12:58:28
https://img1.sycdn.imooc.com//szimg/640ab8ed0957213503910291.jpg            
0 回复 有任何疑惑可以回复我~
  • 提问者 精慕门1158658 #1
    谢谢老师,明白了
    回复 有任何疑惑可以回复我~ 2023-03-10 13:41:58
yancy 2023-03-10 11:12:14

第二种是正常的函数执行,只会执行一次,这个方法和计时器的不同是不会重复的执行回调函数。所以需要通过递归调用的方式来重复执行。

0 回复 有任何疑惑可以回复我~
  • 提问者 精慕门1158658 #1
    这个点明白了, 还有一个问题,
    这样写为什么会内存溢出
     let x = 1;
    
          function animation(x) {
            x += -0.01;
            gl.vertexAttrib1f(deg, x);
            gl.drawArrays(gl.TRIANGLES, 0, 3);
            requestAnimationFrame(animation(x));
          }
    
          animation(x);
    
    报错:Uncaught RangeError: Maximum call stack size exceeded
    回复 有任何疑惑可以回复我~ 2023-03-10 11:19:25
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信