Назад в раздел
"Размножение жучков"
div.main {margin-left: 20pt; margin-right: 20pt}
"Размножение жучков"
Когда я писал под 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©= www.jvs.ru jvsh@mail.ru |
Автор: © JVSh Источник:
http://www.flasher.ru
|
|
|
|