Авторизация






Забыли пароль?
Сейчас на сайте находятся:
23 гостей

Вы не авторизованы.

Экспорт новостей

Спонсоры:

Copyright © 2006-2008 Siliren.ru All rights reserved.
Права на статьи принадлежат их авторам. Копирование и использование материалов разрешается только в случае указания явной гиперссылки на веб-сайт siliren.ru, как на источник получения информации.
Новая тайловая основа движка игры – часть 3
Рейтинг: / 36
ХудшаяЛучшая 
10.01.2009 г.

Это 3-я ступень, я опишу силу тяжести.

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


Используя, конечно, версию AS3.

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

ACTIONSCRIPT:
  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.         current_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.     }
  113. }
  114. function check_collisions() {
  115.     get_edges();
  116.     // collision to the bottom
  117.     if (yspeed>0) {
  118.         if ((level[bottom][right] != 0) or (level[bottom][left] != 0)) {
  119.             y_pos = bottom*tile_size-9;
  120.             yspeed = 0;
  121.             falling = false;
  122.             get_edges();
  123.         }
  124.     }
  125.     // collision to the left
  126.     if (xspeed<0) {
  127.         if ((level[top][left] != 0) or (level[bottom][left] != 0)) {
  128.             x_pos = (left+1)*tile_size+6;
  129.             xspeed = 0;
  130.         }
  131.     }
  132.     // collision to the right          
  133.     if (xspeed>0) {
  134.         if ((level[top][right] != 0) or (level[bottom][right] != 0)) {
  135.             x_pos = right*tile_size-6;
  136.             xspeed = 0;
  137.         }
  138.     }
  139. }
  140. function get_edges() {
  141.     // right edge
  142.     right = Math.floor((x_pos+5)/tile_size);
  143.     // left edge  
  144.     left = Math.floor((x_pos-6)/tile_size);
  145.     // bottom edge
  146.     bottom = Math.floor((y_pos+8)/tile_size);
  147.     // top edge
  148.     top = Math.floor((y_pos-9)/tile_size);
  149. }

скачать исходники
Поиск похожих: тайлы движок
 
« Пред.   След. »
счетчик тИЦ и PR