'超出最大呼叫堆栈大小' AnimationFrame

时间:2015-12-14 09:02:31

标签: javascript

我正在尝试创建一个类,可以启动这个游戏,作为我的类游戏的方法。正如您所看到的,我将请求动画帧添加为方法中的函数,但它给出了一个错误:'超出最大调用堆栈大小'

function Game(){
    this.player = null;
    this.anim = null;
}

Game.prototype.start = function () {
    this.anim = requestAnimFrame( this.start() );
    //code
}

Game.prototype.end = function() {
    cancelAnimFrame ( this.anim );
}

//create game
var game = new Game();

//start game
game.start();

如果我使用它,这项工作:

function render(){ 
    requestAnimFrame(render);
};
//start anim
render();

所以我不知道如果在方法内部它不起作用。

这是我使用的动画帧的代码:

window.requestAnimFrame = (function(){
return  window.requestAnimationFrame       || 
        window.webkitRequestAnimationFrame || 
        window.mozRequestAnimationFrame    || 
        window.oRequestAnimationFrame      || 
        window.msRequestAnimationFrame     || 
        function(callback,element){
            window.setTimeout(callback, 1000 / 60);
        };
})();

window.cancelAnimFrame = (function(){  
return  window.cancelAnimationFrame       || 
        window.mozCancelAnimationFrame ||
        function(callback,element){
            window.setTimeout(callback, 1000 / 60);
        };
})();

如果你知道我想要做什么,我就不会用,谢谢。

2 个答案:

答案 0 :(得分:1)

我找到了答案,问题是当我打电话:'this.start'我将'window'称为'this',所以如果我把它保存为'那个'或'窗口'就会出问题,感谢大家,感谢他们。

var Game = function () {
    this.anim = null;

}

Game.prototype.startAnimation = function(){
    window.requestAnimFrame(this.startAnimation.bind(this));
}

var game = new Game();
game.startAnimation();

答案 1 :(得分:0)

Game.prototype.start = function () {
    this.anim = requestAnimFrame( this.start() );
    //code
}

对于requestAnimFrame( this.start() );,您正在调用自身内部的开头,这会导致无限循环。

你应该尝试requestAnimFrame(this.start);,即使它仍然看起来很奇怪:(。