Learn to Teach , Teach to Learn / scrollin 101
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.


scrollin 101

Page history last edited by Jen Calipari 9 years, 1 month ago

I am going to try and explain how to scroll stuff in scratch but you better be good at programming in scratch before you try this. I do not recommend a scrolling game as your first project.

There are 2 methods of scrolling I use. Method 1 uses many sprites, is easy to implement but can cause lag if the area is too large. Method 2 uses just 2 sprites but does not lag.

For a demonstration of this method go to http://scratch.mit.edu/projects/archmage/76150

Ok first create a new variable called scrollX

          {    scrollX    } 

Now that we have that we will need to have our scrolling sprites.
So make a sprite called terrian0. 

*It is important to name the sprite terrain0 instead of terrain1 to check and adjust a value used to scroll.*

Now some of these numbers may vary in value depending on the size of your sprite. This assumes your sprite is as wide as the screen.

The number 480 in this code block represents the stage's total width.

//This should be placed on the sprite "terrain0"

set x to (( {   scrollX  } + ((    480  *    0  )) )) 

Now the 480 * 0 bit is not necessary in the first sprite you want to scroll but we will keep it in there so we can use it when we duplicate the sprite using the duplicate tool. What that number actually represents is the number at the end of the sprite's name so for the sprite terrain1 you would put

set x to (( {   scrollX  } + ((    480  *    1  )) )) 

and for terrain2 you would put a 2 instead of a 1 and so on.

Now the number at the end of the sprites name will dictate the order of the sprites so if you keep moving right you will first see terrain1 then terrain2 then terrain3 ect.

now here is a simple script that demonstrates how to alter the scrollX variable to make your sprites scroll.
This code should be placed on the stage. Using this code on multiple sprites is not necessary and not recommended.


forever if key   right arrow      pressed 
change    scrollX  by   5

forever if key   left arrow      pressed 
change    scrollX  by   -5

For a demonstration of this method go to 

You should already be comfortable using the first scrolling method as this method is more difficult

You will need to create 3 different variables for this method

    {    scrollX    }      //This variables keeps track of how far the user has scrolled

 {   terrainNum    }    //This is used to let the terrain sprite know what terrain should be displayed 
{    xVelocity    }    //For some reason I was unable to get linear movement to make the terrain sprite not flicker with this method. However when the scrolling variable is changed according to the xVelocity variable the scrolling works as it should and does not flicker.

*Place these scripts on the stage*

if <( (( round { 
  scrollX  } /   480  )) greater than (( {   scrollX  } /   480  )) )> 
set   terrainNum  to (( round (( {   scrollX  } /   -480  )) +   1  )) 
set   terrainNum  to round (( {   scrollX  } /   -480  ))   

What this script does is it divides the scroll variable by the stage's width and then rounds it down to the nearest whole number.

if key 
  right arrow     pressed 
change   xVelocity  by   -2 
if key   left arrow     pressed 
change   xVelocity  by   2 
set   xVelocity  to (( {   xVelocity  } *   0.9    )) 
change   scrollX  by {   xVelocity  } 

This is a basic movement code that uses the xVelocity variable to change the scrollX variable.

Now before we begin programming on the terrain sprites it is very important to remember that BOTH of the two terrain sprites must have exactly the same costumes in exactly the same order. Now doing this will result in weird changing of the terrain sprites to incorrect costumes.

Make sure you have created 2 terrain sprites called "terrain1" and "terrain2".

Now put this code on terrain1.

switch to costume { 
  terrainNum  } 
set x to (( {   scrollX    } + ((   480  * (( {   terrainNum  } -   1  )) )) )) 

What this script does is it sets it's costume according to the terrainNum variable and then it sets it's x position to scrollX+(480*(terrainNum-1 
)) . When the terrainNum variable changes it makes the terrain scripts change costumes accordingly and move to the proper position.

Now put this code on terrain2.

switch to costume (( { 
  terrainNum  } +   1  )) 
set x to (( {   scrollX    } + ((   480  * {   terrainNum  } )) )) 

This script is similar to the script on the first terrain sprite but it has been altered to appear in front of the terrain1 sprite.

Both methods when used correctly will produce a scrolling effect.

If you want to see examples of projects that feature scrolling go to this gallery.

Comments (0)

You don't have permission to comment on this page.