Canvas Arcade · Build 8×4 · Vanilla JS

Breakout

32 bricks, one paddle, a three-pixel ball locked to a constant magnitude. Every bounce is resolved by hand — axis by axis, closest hit first.

Ready FPS 60 Best 000
Breakout — canvas game.
400 × 600 · rAF fixed stepTap / drag to move

Physics
by hand.

No engine, no library. Each frame integrates position once, then resolves walls, the single closest brick, and the paddle — flipping exactly one velocity component and renormalising so the ball never speeds up from a bounce alone.

01

Launch

Tap, click or press Space. The serve vector is (2, −2.8) normalised — a 54° climb, never straight up.

02

Paddle angle

Contact offset drives the exit angle: dead centre returns vertically, the edges throw the ball out to ±65°, with a nudge from paddle motion.

03

Side of hit

Circle-to-AABB gives the closest point. A wider x-offset flips dx, a wider y-offset flips dy, and the ball is pushed clear of the brick so it can't re-collide.

04

One hit per frame

When several bricks overlap the ball, only the deepest penetration is processed. Everything else waits for the next tick.

05

Tempo

The magnitude climbs from 3.44 to 4.00 px/frame as the wall thins — inside the smooth band, never a spike.

Canvas 400×600Grid 8 × 4Brick 50×20 Paddle 60×10 @ y580Ball r3Lives 3Target 60 FPS