development: resources
wrok / clients
flash games
flash projects
web sites
client list
 
Development (R&D)
resources
current development
 
about artifact interactive
contact

TUTORIAL: Building games in Flash 5
Part 2: Scrolling backgrounds.

Author: David Doull
Date: 10/04/01
Download source files: tut2.zip

Step 3: Even better scrolling

In most space games the ground doesn't just keep scrolling. What happens is that the player starts on the far left of the screen, when they get about a third of the way to the right of the screen they stop moving right and the ground starts scrolling. This is also what happens in a lot of platform games. So lets improve the ground scrolling to work like this.

Most of the code for this will be in the spaceship clip events. As the spaceship location will determine when the scrolling starts and stops.

When to start scrolling

Select the spaceship and open the actions window (Window > actions).

Within the onClipEvent(load) code, exactly under the line laserCounter=1; type the following:

scrollx=_root.mainGround.ground._width/3;
scrollStart=false;

The first line sets up a new variable, scrollx. This variable will be the x-coordinate at which the spaceship stops moving right and the ground starts scrolling. We've made it one third of the width of the ground.

The second line sets up another new variable called scrollStart. This variable will be set to true if the ground should be scrolling and false if the ground isn't scrolling.

OK, now what we want to happen is if the spaceship has gone past scrollx then it will stop moving right and the ground will start scrolling. So, we will need to change the code for handling the right arrow key.
The current code should be:

if (Key.isDown(Key.RIGHT)) {
  this._x+=moveSpeed;

replace that with the following:

if (Key.isDown(Key.RIGHT)) {
   if (this._x<scrollx){
        this._x+=moveSpeed;
   } else {
        scrollStart=true;
   }

What we have done is introduce an if statement. If this._x (the current x-coordinate of the spaceship) is less than scrollx then the spaceship x-coordinate is increased - hence it moves right. However if that isn't the case, then we set variable scrollStart to true and don't change the spaceship x-coordinate.

When to stop scrolling

Now, we to need add in a whole new bit of onClipEvent code, dealing with a whole new event.

Underneath all of the clipEvent code for the spaceship (after the last } ) type the following:

onClipEvent (keyUp) {
  if (Key.getCode() == Key.RIGHT) {
      scrollStart=false;
  } 
}

This code introduces a new clipEvent, namely keyUp. This event occurs whenever the player takes their finger off a key. Its useful here because what we want is for the ground to scroll while you are holding the right arrow key down, but to stop scrolling when you take your finger off the right arrow key.

The method Key.getCode() gives the last key that was released. So the if statement see's if the last key that was released was the right key and if that's true then it sets our variable scrollStart to false.

OK, not much more to do now. All we need is to add some code so that the ground actually stops scrolling when scrollStart is false.

Close the spaceship actions window and select the mainGround movie clip.

Open up the actions window for mainGround (Window > Actions).
The current onClipEvent(enterFrame) code should be:

onClipEvent (enterFrame) {
   this._x-=groundSpeed;
    if (this._x<= (groundStartx-ground._width)){
      this._x=groundStartx-groundSpeed;
   }
}

Modify the code so it reads:

onClipEvent (enterFrame) {
   if (_root.spaceship.scrollStart==true){
     this._x-=groundSpeed;
     if (this._x<= (groundStartx-ground._width)){
	    this._x=groundStartx-groundSpeed;
      }
   }
}

All that we have done is added in an if statement so that the code to move the mainGround only happens if the variable scrollStart is true.

A Tip: The line if (_root.spaceship.scrollStart==true) could have been written as just if (_root.spaceship.scrollStart)
if statements test a condition to see if its true. Generally they test if one variable is greater than or less than or equal to some other variable. eg: if (x>y). However when testing if something is true you can simplify the code.
So if (x==true) can be written as if (x). This is a really popular programming shortcut and is used quite a lot.
Just remember that if (x) means if x is true .

Finally, set the frame rate of your flash file to 25fps. (Choose Modify > Movie and type 25 in the frames per second box). A frame rate of 25fps should make the scrolling look quite smooth.

Test your movie, you should now find that the ground scrolls when you reach a third of the way across the stage. If you want to skip all the above typing you can download the following fla: tutorial2_partc.fla

 

Next >>