World scrolls in one or two axes as the player moves or time passes; player exists within an advancing boundary.
Gradius/R-Type forced scroll: the level scrolls right-to-left past the ship, held ahead of an advancing wall — you weave within the screen but never go back.
The advancing viewport. Drive its position on a clock (forced scroll) or clamp it to the player — the camera edge defines the play space, not the level.
# Forced auto-scroll: the boundary moves whether you do or not
func _process(delta):
position.x += SCROLL_SPEED * deltaBackground depth. Child ParallaxLayers scroll at fractional rates of the camera, so distant layers drift slower and sell the motion.
# Layer motion_scale < 1 = slower = reads as farther away
$Stars.motion_scale = Vector2(0.2, 0.2)
$Hills.motion_scale = Vector2(0.6, 0.6)Detects when the player or an object leaves the advancing frame — the classic “scrolled off the back edge = death” rule.
func _ready():
screen_exited.connect(_on_left_frame)
func _on_left_frame():
get_parent().die() # fell behind the scrollIn short: Camera2D with scroll limits; background parallax layers; boundary kills player on contact
…and 56 more in the interactive database →
136 catalogued game(s) use this mechanic, spanning 1984–1996.
▶ Explore Scrolling Movement interactively — see every game + the Godot system