Here are a few ideas to get started creating a scrolling background. Create a background image that repeats, where the left edge would tile seamlessly when connected to the right edge. Copy a section the size of the visible area of the screen and add it to the right side of the image.
Here are a couple images for example. Look at the images carefully and you will see the the 480 pixels on the right side match the first 480 pixels on the left.
![]()
These images link to the originals at full size. You can download them to use with the example code which follows.
Here’s a simple example that works with a single image.
local landscape = display.newImageRect( "landscape-1.png", 1440, 320 )
-- landscape:setReferencePoint( display.TopLeftReferencePoint )
landscape_1.anchorX = 0
landscape_1.anchorY = 0
landscape_1.x = 0
landscape_1.y = 0
local function reset_landscape( landscape )
landscape.x = 0
transition.to( landscape, {x=0-1440+480, time=30000, onComplete=reset_landscape} )
end
reset_landscape( landscape_1 )
Here’s an example that takes the code above and turns it into a function allowing you to create more animated landscapes without having to duplicate the code.
local function make_landscape( image, width, height, time )
local landscape = display.newImageRect( image, width, height )
-- landscape:setReferencePoint( display.TopLeftReferencePoint )
landscape.anchorX = 0
landscape.anchorY = 0
landscape.x = 0
landscape.y = 320 - height
landscape.time = time
local function reset_landscape( landscape )
landscape.x = 0
transition.to( landscape, {x=0-landscape.width+480, time=landscape.time, onComplete=reset_landscape} )
end
reset_landscape( landscape )
return landscape
end
local landscape_group = display.newGroup()
local landscape_1 = make_landscape( "Landscape-1.png", 1440, 86, 10000 )
local landscape_2 = make_landscape( "Landscape-2.png", 1440, 168, 20000 )
local landscape_3 = make_landscape( "Landscape-3.png", 1440, 215, 30000 )
landscape_group:insert( landscape_3 )
landscape_group:insert( landscape_2 )
landscape_group:insert( landscape_1 )