次のコードでは、addEventListenerによって呼び出される関数で入力変数を設定しようとしました。私が遭遇した問題は、入力変数 'input_left'が決してtrueに設定されないということです。 ifステートメントの下のコードは実行されませんが、変数を設定するコードが実行されます。私はbind()関数を使いこなそうとしましたが、何も変わりませんでした。addEventListenerで変数を設定する
//Player
var Player = function() {
this.input_left = false;
}
Player.prototype.update = function() {
this.input_left = false;
window.addEventListener('keydown', this.keyPressed.bind(this));
if (this.input_left) {
alert('2'); //It doesn't show this
}
}
Player.prototype.keyPressed = function(e) {
switch(e.keyCode) {
case 65:
this.input_left = true;
alert('1'); //It shows this
break;
}
}
//Initialize the object
var player = new Player();
//Game loop
var gameLoop = function() {
player.update();
window.requestAnimationFrame(gameLoop);
}
window.requestAnimationFrame(gameLoop);
私はプレイヤーのthis.input_left変数は、それを設定するコードが実行されていても、適切に設定されることはありませんと思われる、私は(も警告するように、変数が正しく設定されていることを確認する方法を疑問に思って'2');走る
あなたは新しいイベントリスナーにgameloopを実行するたびに追加している実現していますか?また、毎回input_leftをfalseにリセットしています。 –
私はあなたがプレイヤーからの入力を得るために何をお勧めしているのか不思議です。これは実際には非常に非効率的なようです。 – mchl12
あなたはそれを概念化している方法は問題ないと思います。 –