diff --git a/assets/_sheet_pbounce.png b/assets/_sheet_pbounce.png index cde054f..0692615 100644 Binary files a/assets/_sheet_pbounce.png and b/assets/_sheet_pbounce.png differ diff --git a/assets/p_bounce.png b/assets/p_bounce.png index 7558d61..805a661 100644 Binary files a/assets/p_bounce.png and b/assets/p_bounce.png differ diff --git a/assets/p_bounce2.png b/assets/p_bounce2.png index f22532a..b786a58 100644 Binary files a/assets/p_bounce2.png and b/assets/p_bounce2.png differ diff --git a/game.js b/game.js index 5cff7f4..e3fca59 100644 --- a/game.js +++ b/game.js @@ -623,8 +623,11 @@ function drawBoy(b) { } function drawRing(x, z, color) { const p = proj(x, 0, z); - ctx.strokeStyle = color; ctx.lineWidth = 1.2; - ctx.beginPath(); ctx.ellipse(p.x, p.y, p.s * 0.3, p.s * 0.12, 0, 0, 7); ctx.stroke(); + // integer-snapped so the moving ring steps whole pixels instead of shimmering + const cx = Math.round(p.x), cy = Math.round(p.y); + const rx = Math.max(2, Math.round(p.s * 0.3)), ry = Math.max(1, Math.round(p.s * 0.12)); + ctx.strokeStyle = color; ctx.lineWidth = 2; + ctx.beginPath(); ctx.ellipse(cx, cy, rx, ry, 0, 0, 7); ctx.stroke(); } function drawChar(ch) { @@ -733,7 +736,7 @@ function render() { // server idly bouncing the ball while waiting if (phase === 'pretoss') { const sv = score.server === 'P' ? P : O; - const bx = sv.x - 0.4 * (sv.side === 'P' ? 1 : -1), by = Math.abs(Math.sin(idleT * 3.6)) * 0.78; // floor to hand + const bx = sv.x - 0.32 * (sv.side === 'P' ? 1 : -1), by = Math.abs(Math.sin(idleT * 3.6)) * 0.78; // floor to the reaching hand const sh = proj(bx, 0, sv.z); ctx.fillStyle = 'rgba(0,0,0,0.3)'; ctx.beginPath(); ctx.ellipse(sh.x, sh.y, Math.max(1.5, sh.s * 0.08), Math.max(1, sh.s * 0.035), 0, 0, 7); ctx.fill();