add key events

This commit is contained in:
sfja 2025-10-10 18:47:10 +02:00
parent 2104e752ad
commit b9dbcc5de8
2 changed files with 27 additions and 0 deletions

View File

@ -1,4 +1,8 @@
export class Gamelib { export class Gamelib {
keysPressed = new Set();
keyPressHandlers = new Map();
keyReleaseHandlers = new Map();
constructor(console, codeStopper, spriteProvider, canvasElement) { constructor(console, codeStopper, spriteProvider, canvasElement) {
this.console = console; this.console = console;
this.codeStopper = codeStopper; this.codeStopper = codeStopper;
@ -11,6 +15,16 @@ export class Gamelib {
this.canvas.height = this.height; this.canvas.height = this.height;
this.cx = this.canvas.getContext("2d"); this.cx = this.canvas.getContext("2d");
this.cx.imageSmootingEnabled = false; this.cx.imageSmootingEnabled = false;
document.body.addEventListener("keydown", (ev) => {
this.keysPressed.add(ev.key);
this.keyPressHandlers.get(ev.key)?.();
});
document.body.addEventListener("keyup", (ev) => {
this.keysPressed.delete(ev.key);
this.keyReleaseHandlers.get(ev.key)?.();
});
} }
println(msg) { println(msg) {
@ -35,6 +49,18 @@ export class Gamelib {
}); });
} }
isPressed(key) {
return this.keysPressed.has(key);
}
onPress(key, handlerFunction) {
this.keyPressHandlers.set(key, handlerFunction);
}
onRelease(key, handlerFunction) {
this.keyReleaseHandlers.set(key, handlerFunction);
}
rgb(red, green, blue) { rgb(red, green, blue) {
return `rgb(${red}, ${green}, ${blue})`; return `rgb(${red}, ${green}, ${blue})`;
} }

View File

@ -58,6 +58,7 @@ runButton.onclick = (ev) => {
karlkoder.lib().spriteProvider.injectSprites(spriteEditor.sprites); karlkoder.lib().spriteProvider.injectSprites(spriteEditor.sprites);
codeRunner.setCode(code); codeRunner.setCode(code);
codeRunner.toggle(); codeRunner.toggle();
document.querySelector("canvas").focus();
if (codeRunner.isRunning) { if (codeRunner.isRunning) {
runButton.textContent = "✋ Stop"; runButton.textContent = "✋ Stop";