# Moving Platform Tutorial

**URL:** https://forum.kirupa.com/t/moving-platform-tutorial/269392
**Category:** flash
**Created:** [August 26, 2008, 10:31pm UTC](https://forum.kirupa.com/t/moving-platform-tutorial/269392 "2008-08-26T22:31:08Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![zymn](https://avatars.discourse-cdn.com/v4/letter/z/b5ac83/32.png) [@zymn](https://forum.kirupa.com/u/zymn)
#### Post date: [August 26, 2008, 10:31pm UTC](https://forum.kirupa.com/t/moving-platform-tutorial/269392/1 "2008-08-26T22:31:08Z")

</div>

1: First, open up flash. size doesn’t matter.

2: make a character. size doesn’t matter. make it a movie clip and give it the instance name “char” without quotes.

3: now make a rectangle with the rectangle tool. i usually turn off the border color. i’m using this size: W: 88.0, H: 25.00. but, size doesn’t matter here either. make it a movie clip and give it the instance name “pm1”, again, without quotes.

4: make another rectangle, this is going to be a regular platform. convert a movie clip and give it an instance name “p1”.

5: now then, add this code to the frame:

> 

stop();  
speed = 0;  
maxspeed = 8;  
jumpspeed = 0;  
jumpheight = 15;  
fall = 0;  
maxgravity = 15;  
platforms = 2  
movplats = 1  
platdistance = 0  
maxdistance = 330  
pxspeed = 2  
restspeed = 0  
\_root.onEnterFrame = function() {  
charx = \_root.char.\_x;  
chary = \_root.char.\_y;  
charh = \_root.char.\_height;  
charw = \_root.char.\_width;  
\_root.char.\_x += speed;  
\_root.char.\_y += fall;  
if(charx \> Stage.width/2) {  
\_root.\_x = -charx+stagecentrex;  
} else {  
\_root.\_x = 0;  
}  
if(chary \< Stage.height/2) {  
\_root.\_y = -chary+stagecentrey;  
} else {  
\_root.\_y = 0;  
}  
fall++  
if(fall \>= maxgravity) {  
fall = maxgravity;  
}  
if(Key.isDown(Key.LEFT)) {  
speed–;  
if(speed \<= maxspeed\*-1) {  
speed = maxspeed\*-1;  
}  
if(\_root.char.\_xscale \> 0) {  
\_root.char.\_xscale \*= -1;  
}  
} else if(Key.isDown(Key.RIGHT)) {  
speed++;  
if(speed \>= maxspeed) {  
speed = maxspeed;  
}  
if(\_root.char.\_xscale \< 0) {  
\_root.char.\_xscale \*= -1;  
}  
} else {  
if(speed \> restspeed) {  
speed–;  
if(speed \<= restspeed) {  
speed = restspeed;  
}  
} else if(speed \< restspeed) {  
speed++;  
if(speed \>= restspeed) {  
speed = restspeed;  
}  
}  
}  
if(Key.isDown(Key.SPACE) && jump == false && fall \<= 1) {  
jump = true;  
restspeed = 0  
}  
if(jump == true) {  
if(jumpspeed \> 0) {  
jumpspeed–;  
fall = 0;  
\_root.char.\_y -= jumpspeed;  
} else {  
jump = false;  
}  
} else {  
jumpspeed = jumpheight;  
}  
for(i3=1; i3\<=movplats; i3++) {  
mplat = \_root[“pm”+i3];  
\_root.mplat.\_x += pxspeed  
platdistance += pxspeed  
if(platdistance \>= maxdistance){

```
        pxspeed = -pxspeed
    }
    if(platdistance &lt;= 0){
        
        pxspeed = -pxspeed
    }
    if(_root.char.hitTest(mplat)) {
        if(chary+charh/2-1 &lt; mplat._y-mplat._height/2) {
            _root.char._y = mplat._y-mplat._height/2-charh/2-.1;
            jumpspeed = jumpheight;
            fall = 0;
            jump = false;
            restspeed = pxspeed
        }
    }
}
for(i=1; i&lt;=platforms; i++) {
    plat = _root["p"+i];
    if(_root.char.hitTest(plat)) {
        restspeed = 0
        if(charx+charw/2 &lt; plat._x-plat._width/2) {
            _root.char._x = plat._x-plat._width/2-charw/2-.1; 
            speed = 0;
        } else if(charx-charw/2 &gt; plat._x+plat._width/2) {
            _root.char._x = plat._x+plat._width/2+charw/2+.1;
            speed = 0;
        }
        if(chary+charh/2-1 &lt; plat._y-plat._height/2) {
            _root.char._y = plat._y-plat._height/2-charh/2-.1;
            jumpspeed = jumpheight;
            fall = 0;
            jump = false;
        } else if(chary-charh/2+1 &gt; plat._y+plat._height/2) {
            _root.char._y = plat._y+plat._height/2+charh/2+.1
            jumpspeed *= -1;                
        }
    }
}

```

}

Code Explained:

speed = 0;  
maxspeed = 8;  
jumpspeed = 0;  
jumpheight = 15;  
fall = 0;  
maxgravity = 15;  
: this is for the char.

platforms = 2 : this how many regular platforms you have.  
umm, the more platforms you have, the instance name number goes up, like so: p1, p2, p3 etc.  
this goes for the moving platforms, too.

movplats = 1 : this is how many moving platforms you have.

platdistance = 0 : this is where the moving platform starts.

maxdistance = 330 : this where the moving platform stops and starts coming back.

pxspeed = 2 : this is the speed of the moving platform.

```
for(i3=1; i3&lt;=movplats; i3++) {
    mplat = _root["pm"+i3];
    _root.mplat._x += pxspeed
    platdistance += pxspeed
    if(platdistance &gt;= maxdistance){
        
        pxspeed = -pxspeed
    }
    if(platdistance &lt;= 0){
        
        pxspeed = -pxspeed
    }
    if(_root.char.hitTest(mplat)) {
        if(chary+charh/2-1 &lt; mplat._y-mplat._height/2) {
            _root.char._y = mplat._y-mplat._height/2-charh/2-.1;
            jumpspeed = jumpheight;
            fall = 0;
            jump = false;
            restspeed = pxspeed : this is for the moving platform... i don't know that much about it. sorry.

```

i hope you can figure out the rest.

basically, i set up my scene like this.

P: means where the player is positioned.  
PL: platform  
MPL: where the moving platform is.

P  
PL\_MPL\_\_\_\_\_\_\_\_PL

somethin like that…

once again, my first tut…  
my friend taught me this on msn.
