Герой уже появился на экране и может передвигаться сверху вниз, благодаря силе тяжести. На следующем этапе я расскажу прыжках, что будет сопровождаться подробным разъяснением.
Используя, конечно, версию AS3. Должен признаться, создание движка платформы интересно, но немного сложнее, чем я ожидал.
АCTIONSCRIPT: tile_size = 20 ;
ground_acceleration = 1 ;
ground_friction = 0.8 ;
air_acceleration = 0.1 ;
air_friction = 0.7 ;
ice_acceleration = 0.15 ;
ice_friction = 0.95 ;
treadmill_speed = 2 ;
max_speed = 3 ;
xspeed = 0;
yspeed = 0;
falling = false ;
gravity = 0.5 ;
level = new Array ( ) ;
level [ 0] = [ 1 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ;
level [ 1 ] = [ 1 ,1 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ] ;
level [ 2 ] = [ 1 ,1 ,1 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ] ;
level [ 3 ] = [ 1 ,1 ,1 ,1 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ] ;
level [ 4 ] = [ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,2 ,2 ,2 ,2 ,2 ,1 ,3 ,3 ,3 ,3 ,1 ,1 ,4 ,4 ,4 ,4 ,1 ,1 ] ;
player = [ 1 , 0] ;
function create_level( l) {
_root .createEmptyMovieClip ( "level_container" , 1 ) ;
level_height = l.length ;
level_width = l[ 0] .length ;
for ( y=0; y< level_height; y++) {
for ( x=0; x< level_width; x++) {
if ( l[ y] [ x] ! = 0) {
t = level_container.attachMovie ( "tile" , "t" +y+"_" +x, _root .level_container .getNextHighestDepth ( ) , { _x :x* tile_size, _y :y* tile_size} ) ;
t.gotoAndStop ( l[ y] [ x] ) ;
}
}
}
x_pos = player[ 0] * tile_size+tile_size/ 2 ;
y_pos = player[ 1 ] * tile_size+tile_size/ 2 +1 ;
level_container.attachMovie ( "hero" , "hero" , _root .level_container .getNextHighestDepth ( ) , { _x :x_pos, _y :y_pos} ) ;
}
create_level( level ) ;
_root .onEnterFrame = function ( ) {
ground_under_feet( ) ;
walking = false ;
if ( Key .isDown ( Key .LEFT ) ) {
xspeed -= speed;
walking = true ;
}
if ( Key .isDown ( Key .RIGHT ) ) {
xspeed += speed;
walking = true ;
}
if ( ! walking) {
xspeed * = friction;
if ( Math .abs ( xspeed) < 0.5 ) {
xspeed = 0;
}
}
if ( xspeed> max_speed) {
xspeed = max_speed;
}
if ( xspeed< -max_speed) {
xspeed = -max_speed;
}
if ( falling) {
yspeed += gravity;
}
xspeed += bonus_speed;
x_pos += xspeed;
y_pos += yspeed;
check_collisions( ) ;
level_container.hero ._x = x_pos;
level_container.hero ._y = y_pos;
xspeed -= bonus_speed;
} ;
function ground_under_feet( ) {
bonus_speed = 0;
left_foot_x = Math .floor ( ( x_pos-6 ) / tile_size) ;
right_foot_x = Math .floor ( ( x_pos+5 ) / tile_size) ;
foot_y = Math .floor ( ( y_pos+9 ) / tile_size) ;
left_foot = level [ foot_y] [ left_foot_x] ;
right_foot = level [ foot_y] [ right_foot_x] ;
if ( left_foot ! = 0) {
_tile = left_foot;
} else {
current_tile = right_foot;
}
switch ( current_tile) {
case 0 :
speed = air_acceleration;
friction = air_friction;
falling = true ;
break ;
case 1 :
over = "ground" ;
speed = ground_acceleration;
friction = ground_friction;
break ;
case 2 :
over = "ice" ;
speed = ice_acceleration;
friction = ice_friction;
break ;
case 3 :
over = "treadmill" ;
speed = ground_acceleration;
friction = ground_friction;
bonus_speed = -treadmill_speed;
break ;
case 4 :
over = "treadmill" ;
speed = ground_acceleration;
friction = ground_friction;
bonus_speed = treadmill_speed;
break ;
//Весь код можете скачать по ссылке ниже скачать исходники