disableVisibilityChange in Phaser 3

If the game freezes while you’re playing Phaser 3 in the sidebar, you can use a Web Worker; this is the definitive solution!

How does a web worker work?

class MyScene extends Phaser.Scene {
    constructor() {
        // Web Worker variable
        this.movementWorker = null;
    }

    preload() {
        /* ... */
    }

    create() {
        // Start the Web Worker
        this.setupWorker();
    }

    // NEW METHOD: Web Worker Setup
    setupWorker() {
        // Start the 'worker.js' file
        this.movementWorker = new Worker('worker.js');
        // Listen for messages from the worker
        this.movementWorker.onmessage = this.handleWorkerMessage.bind(this);
    }

    update(time, delta) {
        /* ... */
    }
}

Then create a file named worker.js and add constants, variables, etc., and edit the following to your own code.

// worker.js
// Listen for messages from the worker (gets the target position from the main thread)
onmessage = function (e) {
    if (e.data.type === 'START_MOVE') {
        gamerX = e.data.x;
        gamerY = e.data.y;
        targetX = e.data.targetX;
        targetY = e.data.targetY;

        if (movementTimer) {
            clearInterval(movementTimer);
        }
        // Start the timer
        movementTimer = setInterval(updateMovement, UPDATE_INTERVAL);
    } else if (e.data.type === 'STOP_MOVE') {
        targetX = null;
        targetY = null;
        if (movementTimer) {
            clearInterval(movementTimer);
        }
        postMessage({ type: 'STOP' });
    }
};

[Edited by samme]