From 4dc27bc5b0e9e5a998c6597b0f730d244a87e410 Mon Sep 17 00:00:00 2001 From: Theis Pieter Hollebeek Date: Wed, 15 Oct 2025 21:37:27 +0200 Subject: [PATCH] fix double event issue --- src/gamelib.js | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/gamelib.js b/src/gamelib.js index 27cce11..76a9cbc 100644 --- a/src/gamelib.js +++ b/src/gamelib.js @@ -22,27 +22,26 @@ export class Gamelib { this.mouseX = null; this.mouseY = null; this.spriteCache = new Map(); + this.eventAbortController = null; } init() { - document.body.addEventListener("keydown", this.keydownListener.bind(this)); - document.body.addEventListener("keyup", this.keyupListener.bind(this)); + this.eventAbortController = new AbortController(); + const signal = this.eventAbortController.signal; + document.body.addEventListener("keydown", this.keydownListener.bind(this), { signal }); + document.body.addEventListener("keyup", this.keyupListener.bind(this), { signal }); - this.canvas.addEventListener("mousemove", this.mousemoveListener.bind(this)); - this.canvas.addEventListener("mousedown", this.mousedownListener.bind(this)); - this.canvas.addEventListener("mouseup", this.mouseupListener.bind(this)); - this.canvas.addEventListener("contextmenu", this.contextMenuListener.bind(this)); + this.canvas.addEventListener("mousemove", this.mousemoveListener.bind(this), { signal }); + this.canvas.addEventListener("mousedown", this.mousedownListener.bind(this), { signal }); + this.canvas.addEventListener("mouseup", this.mouseupListener.bind(this), { signal }); + this.canvas.addEventListener("contextmenu", this.contextMenuListener.bind(this), { + signal, + }); } destroy() { - document.body.removeEventListener("keydown", this.keydownListener.bind(this)); - document.body.removeEventListener("keyup", this.keyupListener.bind(this)); - - this.canvas.removeEventListener("mousemove", this.mousemoveListener.bind(this)); - this.canvas.removeEventListener("mousedown", this.mousedownListener.bind(this)); - this.canvas.removeEventListener("mouseup", this.mouseupListener.bind(this)); - this.canvas.removeEventListener("contextmenu", this.contextMenuListener.bind(this)); - + this.eventAbortController.abort(); + this.eventAbortController = null; this.spriteCache.clear(); clearInterval(this.loopInterval); @@ -150,7 +149,6 @@ export class Gamelib { drawSprite(x, y, sprite) { const cx = this.cx; - console.log(sprite); cx.drawImage(sprite, x, y); }