我正在玩JS制作游戏。并打了一个砖墙,无法从主html文件中的事件更改变量。就是说offSetX。为什么不改变?
var game = new Game();
window.addEventListener("keyup", game.input);
game.start('myCanvas');
游戏对象看起来像这样。
function Game() {
this.offSetX = 0;
this.init = function (id) {
this.canvas = document.getElementById(id);
this.context = this.canvas.getContext('2d');
this.blocks = [];
this.blocks.push(new block());
};
this.logic = function () {
for (var i in this.blocks) {
this.blocks[i].update(this.offSetX);
}
};
this.draw = function () {
for (var i in this.blocks) {
this.blocks[i].draw(this.context);
}
};
this.main = function () {
this.logic();
this.draw();
console.log(this.offSetX);
};
this.input = function (key) {
if (key.keyCode == 37) {
this.offSetX--;
console.log(this.offSetX);
}
if (key.keyCode == 39) {
this.offSetX++;
console.log(this.offSetX);
}
};
this.start = function (id) {
var _this = this;
this.init(id);
this.interval = setInterval(function () {
_this.canvas.width = _this.canvas.width;
_this.main();
}, 30);
}
};
答案 0 :(得分:2)
试试这个:
window.addEventListener("keyup", function(key){
game.input.apply(game,[key]);
});
问题出在window.addEventListener("keyup", game.input)
行,您要为window
对象添加处理程序,这就是为什么在input
方法中,"this"
是window
对象(其中)没有任何"offSetX"
方法),而不是game
对象。