Размножение жучков

Автор: Tarus Среда, Апрель 4th, 2012 Нет комментариев

Рубрика: Флеш-технологии

Когда я писал под Flash свои первые игры, я просто создавал копии нужных мне клипов, задавал им имена и «издевался » над ними. Простое дублирование клипов было для меня неким «шаманством». (Я не программист, я художник, и многие меня поймут).

Давайте поучимся «плодить» мувики. Это не так сложно как кажется.
Откройте новый проект, во вкладке «Modify»—>»Movie» измените размер мувика на 400х200 (хотя это вовсе не обязательно) и в первом фрейме напишите следующий блок кода:

x=[50,100,150,200,250,300];
y=[50,75,100,125,150];
bug._visible=0;
i=1;

Первые две строки создают нам два массива, содержащие значения горизонтальных и вертикальных координат, которые мы будем присваивать дублированным клипам.(Массивы — рулят!!! =) ) Для некоторых такая форма записи массивов непривычна. Она соответствует следующей:

x=newArray(50,100,150,200,250,300);
y=newArray(50,75,100,125,150);

Вторая строка делает «невидимкой» клип, который мы собираемся дублировать (в нашем случае он имеет «Instance» — «bug»):

bug._visible=0;

И последняя строка даёт нам переменную «i», значение которой мы будем использовать для присвоения дублированным клипам нового имени и изменения их глубины («depths»).

i=1;

Теперь создайте новый символ ( клавиша F8 ).нарисуйте собственно то, что хотите дублировать. По определению это должен быть «MovieClip». Задайте ему «Instance» (имя по которому происходит обращение) в нашем случае «bug». Поместите клип в сцену, кликните по нему правой клавишей мыши, выберите вкладку «Action».
В раскрывшемся редакторе акций перейдите в «Expert Mode» (Ctrl+E). Напишите след. блок кода:

onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse, 1)) {
startDrag («»);
this.eye.play();
}
}
onClipEvent (mouseUp) {
stopDrag ();
}
onClipEvent (enterFrame) {
_x += 1;
if (_x>380) {
removeMovieClip («»);
}
}

Разберём, зачем это всё нужно…

onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse, 1)) {
startDrag («»);
this.eye.play();
}

Эта часть кода срабатывает в момент нажатия на левую кнопку мыши. Проверяем условие: если курсор, координаты которого мы берём из основного таймлайна, в момент нажатия находится над клипом ( используем как имя «this»- «этот», поскольку названия дублированного клипа мы знать не будем), то мы начинаем «таскать» этот клип:

startDrag («»);

Строка :

this.eye.play();

-необязательна. Она всего лишь приводит в «движение» глаза букашки, заставляя её «помаргивать».
Далее, при «отпускании» кнопки мыши работает блок:

onClipEvent (mouseUp) {
stopDrag ();
}

Мы просто прекращаем «таскать» нашу букашку.
И теперь код, который исполняется в каждом кадре при прокрутке нашего фильма:

onClipEvent (enterFrame) {
_x += 1;
if (_x>380) {
removeMovieClip («»);
}
}

Передвигаем нашу букашку на новое место:

_x += 1;

Можно написать и так:

_x = _x+ 1;

Затем смотрим, не уползла ли наша букашка за пределы основного мувика:

if (_x>380) {
removeMovieClip («»);
}

Если уползла, то мы её просто удаляем.
С букашкой мы закончили, осталось создать «расплодитель» этих самых насекомых. В нашем случае — это банальная кнопка, на которой и висит весь код. Но его можно повесить и в клип, и в кадр сцены, тогда вы можете управлять дублированием программно, например: организуя задержку во времени.

Технологию создания кнопки описывать не буду…=)))
Вот код для неё:

on (press) {
duplicateMovieClip(«bug»,»bug»+i,i);
eval(«bug»+i)._x = x[random(6)];
eval(«bug»+i)._y = y[random(5)];
i++;
}

При нажатии на кнопку, вначале, мы собственно дублируем сам клип:

duplicateMovieClip(«bug»,»bug»+i,i);

Для этого мы используем наш клип с именем «bug», затем мы задаём ему новое имя, образуемое из слова «bug» и номера, значение которого мы берём из переменной «i».
( В конечном счёте имена этих клипов будут выглядеть как: «bug1″, «bug2″, «bug3″ и т.д.) И задаём новую глубину клипа, воспользовавшись всё той же переменной «i». Чтобы вам было понятно, зачем нужна «глубина» клипа («depths»). Попробуйте в этой строке поставить вместо «i» цифру «1″. И вы увидите, что новые клипы у вас не будут «добавляться». Они будут просто замещать предыдущие. Только из-за того, что вы отправляете их на одинаковую «глубину». Две следующие стоки задают нам горизонтальную «_x» и вертикальную «_y» координаты:

eval(«bug»+i)._x = x[random(6)];
eval(«bug»+i)._y = y[random(5)];

Работают они так: левая строка выражения вернёт нам имя нового клипа, то есть будет работать как:

bug1._x = x[random(6)];
bug2._x = x[random(6)];
bug3._x = x[random(6)];

и т.д. Для этого мы используем оператор «eval». В правой строке мы из массива «x» или «y», определённого в первом кадре нашего Главного Мувика, возьмём один из элементов, используя генератор случайных чисел. То есть получаться значения типа:

x[3];
x[1];
x[5];

И в последней строчке мы увеличим значение переменной «i» (которая , как вы помните отвечает у нас за изменение номера в имени мувиков и за их глубину в сцене.):

i++;

Эта запись равносильна следующей:

i = i+1;

Когда вы будете всё это делать в своих проектах, то не забывайте, о путях доступа к дублированным мувикам. Дублировать клипы можно не только в основной сцене, но и в других клипах.

Автор: JVS
E-mail: jvsh@mail.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты