1

我已经设置了以下 jsFiddle http://jsfiddle.net/ZbhQY/4/

我使用了一个小的 requestAnimationFrame polyfill 并将结果返回给 window.reqeuestAnimFrame 这一切工作正常,并且对该函数的所有调用都按预期工作。

如果我将其更改为返回 game.reqeuestAnimFrame 并将所有对 window.reqeuestAnimFrame 的调用替换为新的 game.reqeuestAnimFrame 它不再起作用。

有人可以解释为什么会这样以及我能做些什么来完成这项工作吗?谢谢。

4

1 回答 1

1

requestAnimationFrame必须有一个上下文window才能正常运行。

您可以将调用重写为:

game.requestAnimFrame.call(win, game.run);

它将按预期运行。

您遇到的错误是因为requestAnimationFrame期望它的 context( this) 是window,但它的 context 是game

http://jsfiddle.net/ZbhQY/5/

或者,您可以像这样重写您的requestAnimFrame吸气剂:

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

        return function(callback){
            rAF.call(window, callback);
        };            
    })();

这将允许您按game.requestAnimFrame(game.run)预期调用。

于 2012-09-25T21:46:02.403 回答