On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

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

Автор: © 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