type t_pxLayer y as integer speed as float x as float[] spr as integer[] nearest as integer furthest as integer endtype global pxLayer as t_pxLayer[] global pxDir as integer global pxRelativeSpeed as float //The difference in speed between layers //Add layers FRONT to BACK function pxCreateLayer(spr, w, h) px as t_pxLayer px.y = 0 pxDir = cLEFT px.spr.insert(spr) px.x.insert(0.0) pxRelativeSpeed = 0.1 SetSpriteSize(px.spr[0], w, h) SetSpriteDepth(px.spr[0], 1000+pxLayer.length) qty = display.w/GetSpriteWidth(px.spr[0]) + 1 k = 1 while k <= qty px.spr.insert(CloneSprite(px.spr[0])) px.x.insert((GetSpriteWidth(px.spr[0])*k)*1.0) SetSpriteDepth(px.spr[k], 1000+pxLayer.length) inc k endwhile px.furthest = qty px.nearest = 0 pxLayer.insert(px) for k = 0 to pxLayer.length pxLayer[k].speed = ((pxLayer.length+2)-k)*pxRelativeSpeed next k endfunction function pxUpdate() if pxLayer.length = -1 then exitfunction for lay = 0 to pxLayer.length for s = 0 to pxLayer[lay].spr.length select pxDir case cLEFT if pxLayer[lay].x[s] < 0-GetSpriteWidth(pxLayer[lay].spr[s]) pxLayer[lay].x[s] = pxLayer[lay].x[pxLayer[lay].furthest] + GetSpriteWidth(pxLayer[lay].spr[pxLayer[lay].furthest]) pxLayer[lay].furthest = s inc pxLayer[lay].nearest if pxLayer[lay].nearest > pxLayer[lay].spr.length pxLayer[lay].nearest = 0 endif endif endcase case cRIGHT if GetSpriteX(pxLayer[lay].spr[s]) > display.r pxLayer[lay].x[s] = pxLayer[lay].x[pxLayer[lay].nearest] - GetSpriteWidth(pxLayer[lay].spr[pxLayer[lay].nearest]) pxLayer[lay].nearest = s dec pxLayer[lay].furthest if pxLayer[lay].furthest < 0 pxLayer[lay].furthest = pxLayer[lay].spr.length endif endif endcase endselect pxLayer[lay].x[s] = pxLayer[lay].x[s] + pxLayer[lay].speed * pxDir SetSpritePosition(pxLayer[lay].spr[s], pxLayer[lay].x[s], pxLayer[lay].y) next s next lay endfunction //Set the speed of every layer function pxSetSpeed(s#) for k = 0 to pxLayer.length pxLayer[k].speed = s#*((pxLayer.length+2)-k)*pxRelativeSpeed next k endfunction //Set the relative difference between speeds of each layer function pxSetRelativeSpeed(s#) pxRelativeSpeed = s# pxSetSpeed(pxLayer[0].speed) if pxLayer.length < 1 then exitfunction for k = 1 to pxLayer.length pxLayer[k].speed = pxLayer[k-1].speed * pxRelativeSpeed next k endfunction //Set the speed of an individual layer function pxSetLayerSpeed(lay, s#) if lay < 0 or lay>pxLayer.length message("pxSetLayerSpeed()"+CRLF$+"Called with illegal layer ID"): exitfunction endif pxLayer[lay].speed = s# endfunction //Offset a layers Y position function pxSetLayerY(lay, Y) if lay < 0 or lay>pxLayer.length message("pxSetLayerSpeed()"+CRLF$+"Called with illegal layer ID"): exitfunction endif pxLayer[lay].y = Y endfunction //Set the direction of travel function pxSetDirection(d) pxDir = d endfunction //Set the depth of the parallax layers (d) is the front-most layer function pxSetDepth(d) for lay = 0 to pxLayer.length for s = 0 to pxLayer[lay].spr.length SetSpriteDepth(pxLayer[lay].spr[s], d-lay) next s next lay endfunction function pxSetPosition(p) endfunction