我在这里有一些奇怪的行为,在渲染的JS中,update方法中的这个值是window,但它应该是Game(就像onKeyDown方法一样)。你怎么纠正这个?
class Game {
//for the key events
rightDown: bool = false;
constructor() {
}
onKeyDown(evt) {
if (evt.keyCode == 39) this.rightDown = true;
else if (evt.keyCode == 37) this.leftDown = true;
if (evt.keyCode == 32) {
this.space = true;
var bullet = new GameObjects.GameObjects.Bullet(10);
this.addProjectile(bullet);
};
}
update(elapsed: number) {
if (this.rightDown) {
console.log(this.rightDown);
}
}
答案 0 :(得分:3)
你在其他地方写过这样的东西:
setupAnimationTimer(myGame.update); // Maybe window.requestAnimationFrame ?
请注意,您只是从update
的原型传递Game
- 没有指针返回实际的myGame
实例,因此无论谁做任何事情都无法做到使用正确的update
指针正确调用this
方法的回调。
如果您搜索周围有很多关于this
绑定如何丢失或保留的博客文章;这里有两种可能的解决方案:
// Create a new closure
setupAnimationTimer(() => myGame.update());
或
// Create a new function object that always invokes with the given 'this' value
setupAnimationTimer(myGame.update.bind(myGame));