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.