Quick answer: Camera jitter happens when the camera and player update at different rates. Enable Position Smoothing on Camera2D and Physics Interpolation in project settings to fix it.
Here is how to fix Camera2D jittering following player Godot. Your Camera2D follows the player, but the entire screen shakes or stutters with every frame. Characters jitter, tiles flicker, and the game looks broken even though the logic is correct. Camera jitter in 2D games is almost always a timing mismatch between physics and rendering.
The Symptom
The game view shakes subtly but noticeably as the camera tracks the player. Tiles may appear to vibrate, and pixel art can show sub-pixel rendering artifacts. The jitter is most visible at consistent movement speeds and may disappear when the player stops.
What Causes This
Camera jitter occurs when the camera position updates at a different rate than the player position. If the player moves in _physics_process (fixed timestep) but the camera updates in _process (variable timestep), the camera position on screen lags or leads the player by a fraction of a pixel each frame.
Other causes include:
- Position Smoothing disabled — The camera snaps instantly to the player each frame instead of interpolating.
- Camera not set as Current — The viewport uses a default camera that does not have smoothing.
- Pixel snap conflicts — The rendering snaps to integer pixels but the camera position is fractional.
The Fix
Step 1: Enable Position Smoothing on Camera2D. Select your Camera2D node, and in the inspector enable Position Smoothing > Enabled. Set the speed to around 5-10 for a smooth follow.
# Enable smoothing via code
extends Camera2D
func _ready():
position_smoothing_enabled = true
position_smoothing_speed = 8.0
Step 2: Enable Physics Interpolation. In Project Settings, go to Physics > Common and enable Physics Interpolation. This smooths the visual position of physics objects between fixed timesteps.
# project.godot setting:
# [physics]
# common/physics_interpolation = true
Step 3: For pixel art, snap the camera to whole pixels. If you use viewport stretch mode, the camera position should be rounded to avoid sub-pixel jitter.
func _physics_process(delta):
# Snap camera to pixel grid
global_position = global_position.round()
Related Issues
See also: Fix: TileMap Flickering During Camera Movement.
See also: Fix: _process vs _physics_process Jitter.
Smoothing on, physics interpolation, pixel snap.