Three ways to move something. Same magnitude — wildly different behavior.
What you're seeing
Three identical boxes. Each gets moved a different way.
Watch the Vel Y readout on each label —
that's the upward speed in m/s, updated live.
The Magnitude slider controls the
"amount" sent to all three methods so you can compare them fairly.
Magnitude
For Force this is Newtons (N) applied each frame.
For Impulse, Newton-seconds (N·s) applied once.
For Velocity, meters per second (m/s) set directly.
Apply to each box
CYAN BOX — Force
body.addForce({ y: magnitude }, true)
Applied every frame while the button is held.
Velocity builds slowly — like an engine or a rocket.
The longer you hold, the faster it goes.
PURPLE BOX — Impulse
body.applyImpulse({ y: magnitude }, true)
Applied once on click. Instant kick.
Like hitting a baseball or jumping — one burst of speed,
then gravity takes over.
LIME BOX — Velocity
body.setLinvel({ y: magnitude }, true)
Skips the physics math entirely.
Teleports the speed to exactly
the magnitude you set — ignores mass, ignores what was happening before.
Used for character controllers and scripted motion.
Key Takeaways
💡 Force needs time to matter
A small force applied every frame accumulates into large velocity.
That's how engines, thrusters, and wind work in games.
F = m × a — the same force accelerates light objects faster.
⚡ Impulse is force compressed into one frame
An impulse of 8 N·s is mathematically identical to
applying 8 N for exactly 1 second (60 frames × 0.133 N·s each).
Use it for: jumps, explosions, hits, gun recoil.
🎮 Velocity is for when you're in charge
Setting velocity directly bypasses all physics reasoning.
The engine just accepts the new speed. Good for character controllers
where you want exact, predictable movement — not physical simulation.