0
我是新来的TypeScript,来自Java并具有JavaScript的一些知识。我正在通过制作一个很好的老蛇游戏来学习TS!对象在setInterval函数之前声明时未定义
我有这个班应该画画布的桂。在我的构造器中,我开始创建我的Snake对象。后来我开始游戏循环,其中蛇应该被移动...
但是循环功能不起作用,因为这个错误。 “未捕获类型错误:无法读取未定义的属性”移动“。”
我怀疑它与setInterval函数有关,它可以“异步地”工作,但我不确定......这似乎是一种基本的JavaScript问题。
任何帮助,高度赞赏!
module gui {
export class Gui {
snake:model.Snake;
loop:any;
constructor() {
// get snake
this.snake = new model.Snake();
// Attach key event
document.addEventListener("keydown", KeyListener.handleEvt);
// activate game loop
this.loop = setInterval(this.gameLoop, 50);
}
gameLoop() {
if (this.snake) {
console.log("loop");
this.snake.move();
this.drawSnake()
}
}
drawPart(part:model.Part) { ... }
drawSnake() { ... }
}
class KeyListener {
static handleEvt(e) {
if (e) {
switch (e.keyCode) {
case 37:
console.log("left");
break;
case 38:
console.log("up");
break;
case 39:
console.log("right");
break;
case 40:
console.log("down");
break;
}
}
}
}
}
哦,可怕的“这在回调”问题.....!我在setInterval Mozilla文档中找到了这个描述:https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval。 我结束了使用箭头语法(ES6)。它做到了! this.loop = setInterval(()=> this.gameLoop(),this.loopSpeed); – olefrank 2015-04-01 15:45:52