Приветствую Вас Гость | RSS

Flash. Обо всем по маленьку

Пятница, 11.07.2025, 04:36
Главная » Статьи » Разработка игр » Тайловая игра

Часть 3

Герой уже появился на экране и может передвигаться сверху вниз, благодаря силе тяжести.
На следующем этапе я расскажу  прыжках, что будет сопровождаться подробным разъяснением.


Используя, конечно, версию AS3.
Должен признаться, создание движка платформы интересно, но немного сложнее, чем я ожидал.

АCTIONSCRIPT:

  1. tile_size = 20;
  2. ground_acceleration = 1;
  3. ground_friction = 0.8;
  4. air_acceleration = 0.1;
  5. air_friction = 0.7;
  6. ice_acceleration = 0.15;
  7. ice_friction = 0.95;
  8. treadmill_speed = 2;
  9. max_speed = 3;
  10. xspeed = 0;
  11. yspeed = 0;
  12. falling = false;
  13. gravity = 0.5;
  14. level = new Array();
  15. 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];
  16. 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];
  17. 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];
  18. 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];
  19. 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];
  20. player = [1, 0];
  21. function create_level(l) {
  22.  _root.createEmptyMovieClip("level_container", 1);
  23.  level_height = l.length;
  24.  level_width = l[0].length;
  25.   for (y=0; y<level_height; y++) {
  26.    for (x=0; x<level_width; x++) {
  27.     if (l[y][x] != 0) {
  28.      t = level_container.attachMovie("tile", "t"+y+"_"+x, _root.level_container.getNextHighestDepth(), {_x:x*tile_size, _y:y*tile_size});
  29.      t.gotoAndStop(l[y][x]);
  30. }
  31. }
  32. }
  33.  x_pos = player[0]*tile_size+tile_size/2;
  34.  y_pos = player[1]*tile_size+tile_size/2+1;
  35.  level_container.attachMovie("hero", "hero", _root.level_container.getNextHighestDepth(), {_x:x_pos, _y:y_pos});
  36. }
  37. create_level(level);
  38. _root.onEnterFrame = function() {
  39.   ground_under_feet();
  40.   walking = false;
  41.  if (Key.isDown(Key.LEFT)) {
  42.   xspeed -= speed;
  43.   walking = true;
  44.  }
  45.   if (Key.isDown(Key.RIGHT)) {
  46.   xspeed += speed;
  47.   walking = true;
  48.  }
  49.  if (!walking) {
  50.   xspeed *= friction;
  51.    if (Math.abs(xspeed)<0.5) {
  52.    xspeed = 0;
  53.  }
  54.  }
  55.  if (xspeed>max_speed) {
  56.         xspeed = max_speed;
  57.  }
  58.  if (xspeed<-max_speed) {
  59.   xspeed = -max_speed;
  60.  }
  61.  if (falling) {
  62.   yspeed += gravity;
  63.  }
  64.  xspeed += bonus_speed;
  65.  x_pos += xspeed;
  66.  y_pos += yspeed;
  67.  check_collisions();
  68.  level_container.hero._x = x_pos;
  69.  level_container.hero._y = y_pos;
  70.  xspeed -= bonus_speed;
  71. };
  72. function ground_under_feet() {
  73.  bonus_speed = 0;
  74.  left_foot_x = Math.floor((x_pos-6)/tile_size);
  75.  right_foot_x = Math.floor((x_pos+5)/tile_size);
  76.  foot_y = Math.floor((y_pos+9)/tile_size);
  77.  left_foot = level[foot_y][left_foot_x];
  78.  right_foot = level[foot_y][right_foot_x];
  79.  if (left_foot != 0) {
  80.  _tile = left_foot;
  81.  } else {
  82.  current_tile = right_foot;
  83.  }
  84.  switch (current_tile) {
  85.  case 0 :
  86.  speed = air_acceleration;
  87.  friction = air_friction;
  88.  falling = true;
  89.  break;
  90.  case 1 :
  91.   over = "ground";
  92.   speed = ground_acceleration;
  93.   friction = ground_friction;
  94.   break;
  95.  case 2 :
  96.   over = "ice";
  97.   speed = ice_acceleration;
  98.   friction = ice_friction;
  99.    break;
  100.  case 3 :
  101.   over = "treadmill";
  102.   speed = ground_acceleration;
  103.   friction = ground_friction;
  104.   bonus_speed = -treadmill_speed;
  105.   break;
  106.  case 4 :
  107.   over = "treadmill";
  108.   speed = ground_acceleration;
  109.   friction = ground_friction;
  110.   bonus_speed = treadmill_speed;
  111.    break;
  112. //Весь код можете скачать по ссылке ниже
скачать исходники
Категория: Тайловая игра | Добавил: anti_k (26.02.2010)
Просмотров: 850 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]