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)