Автор: © JVSh
Когда я писал под 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;
Когда вы будете всё это делать в своих проектах, то не забывайте, о
путях доступа к дублированным мувикам. Дублировать клипы можно не только в
основной сцене, но и в других клипах.
Литература по FLASH
|