"Размножение жучков"
Когда я писал под 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