Уроки Flash: Создаем Metro Siberia Undeground (часть 1)

Источник: demiart
Emanuele Ferontano (Перевод: Stasan)

Недавно мне на глаза попалась игра Metro Sibera Underground (MSU в дальнейшем). Игра обладает очень простой графикой, и в ней задействована всего лишь одна кнопка. Пользователь нажимает на кнопку мышки, включается двигатель и корабль поднимается вверх. Если кнопка не нажата на корабль действует сила тяжести.

Создаем Metro Siberia Undeground.Часть 1. *

Игра обладает размытой графикой.

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

Нам понадобиться всего два Movie Clip"a. Повернутый вправо треугольник символ назовем ship, и квадрат его назовем smoke. Для обоих символов ставим Linkage.

На главной сцене, в первом кадре пишем такой вот код:

CODE

1. import flash.filters.GlowFilter;
2. var ship_filter:GlowFilter = new GlowFilter(0x00ff00, 0.8, 4, 4, 2, 3, false, false);
3. var smoke_filter:GlowFilter = new GlowFilter(0xff0000, 0.8, 4, 4, 2, 3, false, false);
4. gravity = 0.1;
5. thrust = 0.25;
6. yspeed = 0;
7. xspeed = 5;
8. smoke_interval = 10000;
9. frames_passed = 0;
10. engines = false;
11. _root.attachMovie("ship", "ship", _root.getNextHighestDepth(), {_x:150, _y:200});
12. ship.filters = new Array(ship_filter);
13. ship.onEnterFrame = function() {
14.     if (engines) {
15.         yspeed -= thrust;
16.         smoke_interval -= 0.25;
17.     }
18.     yspeed += gravity;
19.     this._y += yspeed;
20.     angle = Math.atan2(yspeed, xspeed);
21.     this._rotation = angle*180/Math.PI;
22.     frames_passed++;
23.     if (frames_passed>=smoke_interval) {
24.         sm = _root.attachMovie("smoke", "smoke"+_root.getNextHighestDepth(), _root.getNextHighestDepth(), {_x:this._x-2, _y:this._y});
25.         sm.filters = new Array(smoke_filter);
26.         sm.onEnterFrame = function() {
27.             this._x -= xspeed;
28.             this._alpha -= 2;
29.             if (this._alpha<=0) {
30.                 this.removeMovieClip();
31.             }
32.         };
33.         frames_passed = 0;
34.     }
35. };
36. _root.onMouseDown = function() {
37.     engines = true;
38.     smoke_interval = 10;
39. };
40. _root.onMouseUp = function() {
41.     engines = false;
42.     smoke_interval = 100000;
43. };



Ну что ж давайте разбираться, что к чему. Ниже идет номер строки в коде и комментарий к ней.

1. Импортируем библиотеку необходимую для фильтра Glow.
2-3. Определяем параметры фильтра Glow для корабля и дыма.
4.Устанавливаем значение силы тяжести.
5.Устанавливаем значение толчка.
6-7. Устанавливаем значение скорости перемещения по x и y. Скорость по x будет оставаться неизменной.
8. Устанавливаем значение переменной, которая отвечает за интервал появления клубов дыма друг за другом.
9.Переменная счетчик определяющая, сколько кадров пошло с тех пор как был выпущен последний клуб дыма.
10. Необходимо для проверки используется ли двигатель.
11.Вставляем корабль в игру.
12.Применяем к кораблю фильтр glow.
13.Функция ship будет выполняться каждый кадр.
14.Проверка использует ли игрок двигатель.
15.Уменьшаем yspeed поскольку отрицательные значения заставляют двигаться корабль вверх.
16.Уменьшаем интервал появления дыма т.к. игрок жмет на газ.
18. Прибавляем силу тяжести к скорости перемещения по y.
19.Обновляем место положения корабля по у.
20.Расчитываем угол корабля, используя тригонометрию.
21.Обновляем значение поворота корабля.
22.Увеличиваем переменную, отвечающую за кол-во прошедших кадров.
23.Проверка, не пора ли добавлять дым.
24.Добавляем дым.
25.Применяем фильтр Glow к дыму.
26.Функция smoke будет работать каждый кадр.
27.Обновляем положение дыма по x.
28.Делаем дым более прозрачным.
29-31. Когда дым становится полностью прозрачным, удаляем его.
33.Обнуляем переменную ответственную за интервал вставки дыма.
36-39.Когда пользователь нажимает кнопку мыши, включаем двигатель, а значение интервала дымопоявления ставим равным 10.
40-43.Когда пользователь отпускает кнопку мыши, вырубаем двигатель а интервал равен 100000.

Вот и все.

Если кораблика не видно, значит он "улетел вниз". Вам нужно держать кнопку мышки и ждать или обновить страничку.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=17381