0

In Javascript, I have the following class:

export class InputHandler {
    constructor() {
        this.keyRight = false;
        this.keyLeft = false;
        this.keyUp = false;
        this.keyDown = false;
    }

    bind() {
        document.addEventListener("keydown", this.keyPush);
        document.addEventListener("keyup", this.keyReleased);
    }

    keyPush(event) {
        if (event.repeat)
            return;
        switch(event.key) {
            case "ArrowRight":
            case "d":
                this.keyRight = true;
            case "ArrowLeft":
            case "a":
                this.keyLeft = true;
            case "ArrowUp":
            case "w":
                this.keyUp = true;
            case "ArrowDown":
            case "s":
                this.keyDown = true;
        }
    }

    keyReleased(event) {
        if (event.repeat)
            return
        switch(event.key) {
            case "ArrowRight":
            case "d":
                this.keyRight = false;
            case "ArrowLeft":
            case "a":
                this.keyLeft = false;
            case "ArrowUp":
            case "w":
                this.keyUp = false;
            case "ArrowDown":
            case "s":
                this.keyDown = false;
        }
    }

    getArrowKey(keyName) {
        switch(keyName) {
            case "right":
                return this.keyRight;
            case "left":
                return this.keyLeft;        
            case "up":
                return this.keyUp;
            case "down":
                return this.keyDown;
        }
    }
}

However, everytime I call the getArrowKey({name like 'right'}) from my main javascript file, it returns false (even if the key is pressed). When I use global variables, everything works as expected:

keyRight = false;
keyLeft = false;
keyUp = false;
keyDown = false;

export class InputHandler {
    constructor() {

    }

    bind() {
        document.addEventListener("keydown", this.keyPush);
        document.addEventListener("keyup", this.keyReleased);
    }

    keyPush(event) {
        if (event.repeat)
            return;
        switch(event.key) {
            case "ArrowRight":
            case "d":
                keyRight = true;
            case "ArrowLeft":
            case "a":
                keyLeft = true;
            case "ArrowUp":
            case "w":
                keyUp = true;
            case "ArrowDown":
            case "s":
                keyDown = true;
        }
    }

    keyReleased(event) {
        if (event.repeat)
            return
        switch(event.key) {
            case "ArrowRight":
            case "d":
                keyRight = false;
            case "ArrowLeft":
            case "a":
                keyLeft = false;
            case "ArrowUp":
            case "w":
                keyUp = false;
            case "ArrowDown":
            case "s":
                keyDown = false;
        }
    }

    getArrowKey(keyName) {
        switch(keyName) {
            case "right":
                return keyRight;
            case "left":
                return keyLeft;        
            case "up":
                return keyUp;
            case "down":
                return keyDown;
        }
    }
}

However, this requires me to use global variables. I would prefer the first approach, and I am unsure why it doesn't work.

0 Answers0