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]