键盘输入

时间:2015-01-11 22:45:46

标签: javascript input keyboard

我正在编写一个项目,当我尝试在专用课程中输入键盘输入时,我遇到了问题。

所以这是我的Controller类:

Controller = function() {
// Initialisation clavier 
document.onkeydown = this.onKeyDown;
document.onkeyup = this.onKeyUp;
// Touches 
this.left = false;
this.up = false;
this.down = false;
this.right = false;
}

// Touche appuyée 
Controller.prototype.onKeyDown = function(event) {
    if (event.keyCode == 37) {
        this.left = true;
    }
    else if (event.keyCode == 38) {
        this.up = true;
    }
    else if (event.keyCode == 39) {
        this.down = true;
    }
    else if (event.keyCode == 40) {
        this.right = true;
    }
}

// Touche relâchée 
Controller.prototype.onKeyUp = function(event) {
    if (event.keyCode == 37) {
        this.left = false;
    }
    else if (event.keyCode == 38) {
        this.up = false;
    }
    else if (event.keyCode == 39) {
        this.down = false;
    }
    else if (event.keyCode == 40) {
        this.right = false;
    }
}

...我在初始化期间创建了一个出现的地方。但是当我试图在另一个类中获得布尔状态时:

// Déplacement
Player.prototype.move = function() {

    if (controler.left) {
        this.posHorizontal -= this.speed;
    }
}

这不起作用!当我在控制器类中显示状态时,它返回'true'但不在另一个类中。我没有错误,只显示了'假'(我已经尝试过console.log但没办法)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

当浏览器调用onKeyDownonKeyUp方法时,事件发生后,函数内的this关键字指向文档而不是Controller实例。< / p>

更改行

document.onkeydown = this.onKeyDown;
document.onkeyup = this.onKeyUp;

document.onkeydown = this.onKeyDown.bind(this);
document.onkeyup = this.onKeyUp.bind(this);

它应该解决问题。