From d01636b1b1e0b8b1713418349dd113457055e995 Mon Sep 17 00:00:00 2001 From: Dani Peck Date: Wed, 25 Feb 2026 22:12:22 -0600 Subject: [PATCH] Fix sub-pixel jitter after tile separation --- src/physics/arcade/tilemap/ProcessTileSeparationX.js | 11 +++++++++++ src/physics/arcade/tilemap/ProcessTileSeparationY.js | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/physics/arcade/tilemap/ProcessTileSeparationX.js b/src/physics/arcade/tilemap/ProcessTileSeparationX.js index 14a5075809..399b14959a 100644 --- a/src/physics/arcade/tilemap/ProcessTileSeparationX.js +++ b/src/physics/arcade/tilemap/ProcessTileSeparationX.js @@ -27,6 +27,17 @@ var ProcessTileSeparationX = function (body, x) } body.position.x -= x; + + // Float arithmetic can leave position at e.g. 63.9997, causing 1px + // jitter. Snap near-integer results but preserve intentionally + // fractional positions (non-integer body sizes from scaled sprites). + var rx = Math.round(body.position.x); + + if (Math.abs(body.position.x - rx) < 0.01) + { + body.position.x = rx; + } + body.updateCenter(); if (body.bounce.x === 0) diff --git a/src/physics/arcade/tilemap/ProcessTileSeparationY.js b/src/physics/arcade/tilemap/ProcessTileSeparationY.js index d7c08f1bbb..e9e39eb8f5 100644 --- a/src/physics/arcade/tilemap/ProcessTileSeparationY.js +++ b/src/physics/arcade/tilemap/ProcessTileSeparationY.js @@ -27,6 +27,17 @@ var ProcessTileSeparationY = function (body, y) } body.position.y -= y; + + // Float arithmetic can leave position at e.g. 63.9997, causing 1px + // jitter. Snap near-integer results but preserve intentionally + // fractional positions (non-integer body sizes from scaled sprites). + var ry = Math.round(body.position.y); + + if (Math.abs(body.position.y - ry) < 0.01) + { + body.position.y = ry; + } + body.updateCenter(); if (body.bounce.y === 0)