ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!

Урок 3 новая тайловая основа движка-часть 1

Перейти вниз

Урок 3 новая тайловая основа движка-часть 1

Сообщение автор Admin в Вс Фев 21, 2010 3:47 am

Я собираюсь создать новую тайловую основу движка игры, которая (по моему мнению) поможет создавать множество разнообразных игр, путем изменения лишь некоторых параметров. В настоящий момент она позволяет двигаться только горизонтально, но я собираюсь ее развить, добавить помещения, возможность прыгать, лестницы, веревки.
Моя цель, чтобы разработчик сфокусировался только на уровне дизайна.
Самое интересное, что я разрабатываю версии движка и для 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.}
avatar
Admin
Admin

Сообщения : 92
Очки : 280
Репутация : 36
Дата регистрации : 2010-02-20

Посмотреть профиль http://game-dll.mirbb.net

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения