1

次のjsFiddleをセットアップしましたhttp://jsfiddle.net/ZbhQY/4/

私は小さな requestAnimationFrame ポリフィルを使用し、結果を window.reqeuestAnimFrame に返します。これはすべて正常に機能し、この関数へのすべての呼び出しは期待どおりに機能します。

これを変更して game.reqeuestAnimFrame に戻し、window.reqeuestAnimFrame へのすべての呼び出しを新しい game.reqeuestAnimFrame に置き換えると、機能しなくなります。

なぜこれが当てはまるのか、これを機能させるために何ができるのかを誰かが説明してもらえますか? ありがとう。

4

1 に答える 1

1

requestAnimationFramewindow正しく機能するには、のコンテキストが必要です。

呼び出しを次のように書き直すことができます。

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

期待どおりに機能します。

あなたが遭遇したエラーは、そのコンテキスト( )がであるとrequestAnimationFrame期待しているためですが、代わりにそのコンテキストはでした。thiswindowgame

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 に答える