Camera
- Sets the camera offset in the draw state.
- x
-
- The x offset, in pixels, to subtract from future draw coordinates. (default 0)
- y
-
- The y offset, in pixels, to subtract from future draw coordinates. (default 0)
- return-value
-
- An x,y tuple representing the previous camera offset.
Setting a camera offset causes all subsequent draw operations to have the offset subtracted from their x and y coordinates. Camera sets the origin point for draw functions, and by default it is (0,0)
.
The way camera()
works is somewhat unintuitive. So, if you might expect to use camera(64,64)
to put the camera origin in the middle of the screen, you'd actually use camera(-64,-64)
to move the screen so that its middle is in front of the camera. This is probably because camera()
sets an screen variable that is invisibly used by all draw functions, and in this case, the origin changed from (0,0)
to (-64,-64)
.
Camera offsets can be used to implement screen effects such as parallax scrolling (with a different offset per layer) or screen shake (a small random offset per frame).
Technical notes
The current camera offset is memory-mapped and may be read or written directly:
- 0x5f28 / 24360: offset x lo byte
- 0x5f29 / 24361: offset x hi byte
- 0x5f2a / 24362: offset y lo byte
- 0x5f2b / 24363: offset y hi byte
Examples
-- draw a dark blue circle at (20, 20)
circfill(20, 20, 10, 1)
camera(-2, 2)
-- draw a white circle at (22, 18)
circfill(20, 20, 10, 7)
camera(-64, -64)
-- draw a big red circle, centered
circfill(0, 0, 63, 8)
-- get the current offset from its memory-mapped addresses
camera_x = peek2(0x5f28)
camera_y = peek2(0x5f2a)