diff --git a/packages/core/src/input/InputManager.ts b/packages/core/src/input/InputManager.ts index 58a75d337b..a043e535b5 100644 --- a/packages/core/src/input/InputManager.ts +++ b/packages/core/src/input/InputManager.ts @@ -6,24 +6,26 @@ import { PointerManager } from "./pointer/PointerManager"; * InputManager manages device input such as mouse, touch, keyboard, etc. */ export class InputManager { + /** Disable input for offscreen rendering. */ + private _enabled: boolean = true; private _pointerManager: PointerManager; /** * Pointer List. */ get pointers(): Readonly { - return this._pointerManager._pointers; + return this._enabled ? this._pointerManager._pointers : null; } /** * Whether to handle multi-pointer. */ get multiPointerEnabled(): boolean { - return this._pointerManager._multiPointerEnabled; + return this._enabled ? this._pointerManager._multiPointerEnabled : false; } set multiPointerEnabled(enabled: boolean) { - this._pointerManager._multiPointerEnabled = enabled; + this._enabled && (this._pointerManager._multiPointerEnabled = enabled); } /** @@ -31,20 +33,28 @@ export class InputManager { */ constructor(engine: Engine) { // @ts-ignore - this._pointerManager = new PointerManager(engine, engine.canvas._webCanvas); + const canvas = engine._canvas._webCanvas; + if (canvas instanceof HTMLCanvasElement) { + this._enabled = true; + this._pointerManager = new PointerManager(engine, canvas); + } else { + this._enabled = false; + } } /** * @internal */ _update(): void { - this._pointerManager._update(); + if (this._enabled) { + this._pointerManager._update(); + } } /** * @internal */ _destroy(): void { - this._pointerManager._destroy(); + this._enabled && this._pointerManager._destroy(); } } diff --git a/packages/core/src/input/pointer/PointerManager.ts b/packages/core/src/input/pointer/PointerManager.ts index aabb2f55f1..109d83a663 100644 --- a/packages/core/src/input/pointer/PointerManager.ts +++ b/packages/core/src/input/pointer/PointerManager.ts @@ -37,15 +37,14 @@ export class PointerManager { /** * Create a PointerManager. * @param engine - The current engine instance + * @param htmlCanvas - HTMLCanvasElement */ - constructor(engine: Engine) { + constructor(engine: Engine, htmlCanvas: HTMLCanvasElement) { this._engine = engine; this._canvas = engine.canvas; - // @ts-ignore - const htmlCanvas = this._canvas._webCanvas as HTMLCanvasElement; htmlCanvas.style.touchAction = "none"; // prettier-ignore - htmlCanvas.onpointerdown = htmlCanvas.onpointerup = htmlCanvas.onpointerout = htmlCanvas.onpointermove = (evt:PointerEvent)=>{ + htmlCanvas.onpointerdown = htmlCanvas.onpointerup = htmlCanvas.onpointerout = htmlCanvas.onpointermove = (evt: PointerEvent) => { this._nativeEvents.push(evt); }; // If there are no compatibility issues, navigator.maxTouchPoints should be used here.