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

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

Суббота, 28.12.2024, 14:03
Главная » Статьи » Разработка игр » Тайловая игра

Новая тайловая основа движка игры. Часть 1
Я собираюсь создать новую тайловую основу движка игры, которая (по моему мнению) поможет создавать множество разнообразных игр, путем изменения лишь некоторых параметров.

В настоящий момент она позволяет двигаться только горизонтально, но я собираюсь ее развить, добавить помещения, возможность прыгать, лестницы, веревки.
Моя цель, чтобы разработчик сфокусировался только на уровне дизайна.
Самое интересное, что я разрабатываю версии движка и для AS2 и для AS3.
В первой части, мы имеем четыре типа тайловой поверхности:
Земля: обычная земля, с нормальным ускорением и силой трения.
Лед: скользкое покрытие со сниженной силой трения и ускорением.
Левая и правая бегущая дорожка
: эти тайлы будут увеличивать/снижать скорость в соответствии со стрелкой.
ACTIONSCRIPT:
  1. tile_size = 20;
  2. ground_acceleration = 1;
  3. ground_friction = 0.8;
  4. ice_acceleration = 0.15;
  5. ice_friction = 0.95;
  6. treadmill_speed = 2;
  7. max_speed = 3;
  8. xspeed = 0;
  9. level = new Array();
  10. level[0] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  11. level[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, 0];
  12. level[2] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  13. level[3] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  14. 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];
  15. player = [1, 3];
  16. function create_level(l) {
  17.     _root.createEmptyMovieClip("level_container", 1);
  18.     level_height = l.length;
  19.     level_width = l[0].length;
  20.     for (y=0; y<level_height; y++) {
  21.         for (x=0; x<level_width; x++) {
  22.             if (l[y][x] != 0) {
  23.                 t = level_container.attachMovie("tile", "t"+y+"_"+x, _root.level_container.getNextHighestDepth(), {_x:x*tile_size, _y:y*tile_size});
  24.                 t.gotoAndStop(l[y][x]);
  25.             }
  26.         }
  27.     }
  28.     x_pos = player[0]*tile_size;
  29.     y_pos = player[1]*tile_size;
  30.     level_container.attachMovie("hero", "hero", _root.level_container.getNextHighestDepth(), {_x:x_pos, _y:y_pos});
  31. }
  32. create_level(level);
  33. _root.onEnterFrame = function() {
  34.     ground_under_feet();
  35.     walking = false;
  36.     if (Key.isDown(Key.LEFT)) {
  37.         xspeed -= speed;
  38.         walking = true;
  39.     }
  40.     if (Key.isDown(Key.RIGHT)) {
  41.         xspeed += speed;
  42.         walking = true;
  43.     }
  44.     if (!walking) {
  45.         xspeed *= friction;
  46.         if (Math.abs(xspeed)<0.5) {
  47.             xspeed = 0;
  48.         }
  49.     }
  50.     if (xspeed>max_speed) {
  51.         xspeed = max_speed;
  52.     }
  53.     if (xspeed<-max_speed) {
  54.         xspeed = -max_speed;
  55.     }
  56.     xspeed += bonus_speed;
  57.     x_pos += xspeed;
  58.     level_container.hero._x = x_pos;
  59.     xspeed -= bonus_speed;
  60. };
  61. function ground_under_feet() {
  62.     bonus_speed = 0;
  63.     y_feet = Math.floor(y_pos/tile_size)+1;
  64.     x_feet = Math.floor((x_pos+tile_size/2)/tile_size);
  65.     switch (level[y_feet][x_feet]) {
  66.     case 1 :
  67.         over = "ground";
  68.         speed = ground_acceleration;
  69.         friction = ground_friction;
  70.         break;
  71.     case 2 :
  72.         over = "ice";
  73.         speed = ice_acceleration;
  74.         friction = ice_friction;
  75.         break;
  76.     case 3 :
  77.         over = "treadmill";
  78.         speed = ground_acceleration;
  79.         friction = ground_friction;
  80.         bonus_speed = -treadmill_speed;
  81.         break;
  82.     case 4 :
  83.         over = "treadmill";
  84.         speed = ground_acceleration;
  85.         friction = ground_friction;
  86.         bonus_speed = treadmill_speed;
  87.         break;
  88.     }
  89. }

Переместите игрока кнопкой стрелки

 

скачать исходники


Категория: Тайловая игра | Добавил: anti_k (26.02.2010)
Просмотров: 1121 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]