2012-04-15 96 views
1

我當時在玩JS遊戲。並擊中一個磚牆,無法從主html文件中的事件更改變量。就是說關閉SetX。爲什麼它不會改變?不能從外部事件中更改對象變量

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

嘗試添加'console.log(this)'作爲this.input方法的第一行。然後在你編寫'window.addEventListener(「keyup」,game.input)''時檢查'console',然後用我的答案替換該代碼並再次檢查。 – Engineer 2012-04-15 13:32:59

回答

2

試試這個:

window.addEventListener("keyup", function(key){ 
    game.input.apply(game,[key]); 
}); 

問題是由window.addEventListener("keyup", game.input)線,您是window對象添加處理程序,這就是爲什麼在input方法,"this"window對象(其中沒有任何"offSetX"方法),而不是game對象。