From e8be5e0775ca418de10fe55f4da730170f230fc2 Mon Sep 17 00:00:00 2001 From: Jonas Aschenbrenner Date: Fri, 29 Aug 2025 15:30:00 +0200 Subject: [PATCH] fix(Engine): Remove canvas only when it has been created (#3506) I have noticed this when I have embedded the game inside React with React strict mode on and using the canvasElement option. --- src/engine/Engine.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/engine/Engine.ts b/src/engine/Engine.ts index 65781b73..43c2b2db 100644 --- a/src/engine/Engine.ts +++ b/src/engine/Engine.ts @@ -729,6 +729,8 @@ export class Engine implements CanInitialize, private _isInitialized: boolean = false; + private _hasCreatedCanvas: boolean = false; + public emit>(eventName: TEventName, event: EngineEvents[TEventName]): void; public emit(eventName: string, event?: any): void; public emit | string>(eventName: TEventName, event?: any): void { @@ -906,12 +908,15 @@ O|===|* >________________>\n\ } this.canvas = document.getElementById(options.canvasElementId); + this._hasCreatedCanvas = false; } else if (options.canvasElement) { this._logger.debug('Using Canvas element specified:', options.canvasElement); this.canvas = options.canvasElement; + this._hasCreatedCanvas = false; } else { this._logger.debug('Using generated canvas element'); this.canvas = document.createElement('canvas'); + this._hasCreatedCanvas = true; } if (this.canvas && !options.enableCanvasContextMenu) { @@ -1236,7 +1241,9 @@ O|===|* >________________>\n\ this.stop(); this._garbageCollector.forceCollectAll(); this.input.toggleEnabled(false); - this.canvas.parentNode.removeChild(this.canvas); + if (this._hasCreatedCanvas) { + this.canvas.parentNode.removeChild(this.canvas); + } this.canvas = null; this.screen.dispose(); this.graphicsContext.dispose(); -- 2.51.2