从新对象中运行requestAnimationFrame

时间:2013-10-18 21:39:09

标签: javascript three.js requestanimationframe

我在运行动画时遇到了麻烦。这是在var ob1 = function() {};内。调用时,它运行一段时间然后我得到错误Uncaught RangeError: Maximum call stack size exceeded。但是,同样的结构在对象之外运行没有问题。

/////////////// 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("!");
}

1 个答案:

答案 0 :(得分:17)

您应该将函数引用传递给requestAnimationFrame,而不是调用函数:

requestAnimationFrame(this.render);

由于您在this内使用render,因此您可能需要bind

requestAnimationFrame(this.render.bind(this));

您的版本导致堆栈溢出(该函数同步调用自身,直到调用堆栈已满)。