Prinzipiell ist es schon egal, ob Du die Spielfigur bewegst oder die Welt.
Bei 2D-Spielen macht man es normalerweise so, dass man die Position der "Kamera" angibt. Die Kamera verfolgt die Spielfigur (nicht auf Schritt und Tritt, aber wenn sie dabei ist, den sichtbaren Bereich zu verlassen, fährt die Kamera hinterher).
Jetzt musst Du eigentlich nur Deinen Render-Algorithmus anpassen, so dass er die aktuelle Kameraposition berücksichtigt. Wenn die Spielfigur beispielsweise die Position (500, 20) hat und die Kamera auf (400, 5) steht, dann sind die Bildschirmkoordinaten der Spielfigur (100, 15).
Wenn Du jetzt Deinen Level, z.B. eine Tile-Map, zeichnest, dann musst Du die Kameraposition ebenfalls berücksichtigen. Und um nicht immer den kompletten Level zeichnen zu müssen, sondern nur den Teil, der tatsächlich sichtbar ist, bestimmst Du einfach, welches Tile (Feld) gerade in der linken oberen Bildschirmecke zu sehen ist (Kameraposition durch Tile-Größe dividieren).
Von dieser Position aus renderst Du nun den Level, aber nur so weit, wie er auch sichtbar ist. Wenn Du eine Auflösung von 800x600 nimmst und eine Tile-Größe von 32x32, dann sind maximal 800/32 + 1 = 26 Tiles in der Breite und ca. 20 in der Höhe zumindest teilweise sichtbar.