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

Урок 9 Новая тайловая основа движка игры – часть 3

Перейти вниз

Урок 9 Новая тайловая основа движка игры – часть 3

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

Это 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+Cool/tile_size);
147. // top edge
148. top = Math.floor((y_pos-9)/tile_size);
149.}
avatar
Admin
Admin

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

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

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

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

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

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