键盘输入

Keyboard Inputs

本文关键字:输入 键盘      更新时间:2023-09-26

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

所以这是我的控制器类:

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",但不返回另一个类。我没有错误,但只显示了一个"假"(我已经尝试过使用控制台.log但没有办法)。

感谢您的帮助!

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

更改行

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

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

它应该可以解决问题。