window.GetAnimationFrame()不调用回调函数

时间:2015-12-16 17:59:43

标签: javascript canvas typescript requestanimationframe

我在TypeScript中这样做,但如果有帮助的话,我也会发布已编译的Javascript。以下是我的loop()函数:

TypeScript

private loop() {
    if(this._running) {
        // input, updating, and rendering
        // ...

        window.requestAnimationFrame(() => this.loop);
    }
}

JavaScript

PotatoEngine.prototype.loop = function () {
    var _this = this;
    if (this._running) {
        // input, updating, and rendering
        // ...

        window.requestAnimationFrame(function () { return _this.loop; });
    }
};

此代码从以下init()函数调用:

TypeScript

private init() {
    this._lastTime = Date.now();
    this._running = true;

    window.requestAnimationFrame(() => this.loop);
}

JavaScript

PotatoEngine.prototype.init = function () {
    var _this = this;
    this._lastTime = Date.now();
    this._running = true;
    window.requestAnimationFrame(function () { return _this.loop; });
};

当我调试并进入requestAnimationFrame()时,它永远不会进入loop()函数。它只是退出init()。为什么呢?

1 个答案:

答案 0 :(得分:2)

变化:

window.requestAnimationFrame(() => this.loop);

要:

window.requestAnimationFrame(this.loop.bind(this));

这实际上会调用this.loop。由于绑定,您还可以保留上下文。