我在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()
。为什么呢?
答案 0 :(得分:2)
变化:
window.requestAnimationFrame(() => this.loop);
要:
window.requestAnimationFrame(this.loop.bind(this));
这实际上会调用this.loop
。由于绑定,您还可以保留上下文。