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






 

Сортировка дублированных MovieClip

Уильям Брэдберри

Несколько раз мне приходилось сталкиваться с таким явлением, как сортировка дублированных мувиков. Применение этого явления разнообразно - от навороченных меню, до игр на флэше. Ну и родилось что-то вроде простенького исходника - для себя. Думаю и вам он пригодится.

В архиве: sort_pos.zip находится исходник этого примера.
В этом уроке мы создадим массив с координатами и продублируем несколько мувиков, случайным образом "раскидав" их по этим координатам.
Для начала делаем мувик, который будем дублировать. В нашем случае он называется "ball" и содержит семь кадров, с шарами разного цвета (не забудьте "повесить" "stop" на первый кадр). Теперь удалим мувик из основной сцены, а в библиотеке откроем у него вкладку "Linkage". На ней включим кнопку "Export this simbol" , в строке: "Identifier" дадим ему имя: "ball".
Теперь напишем сам код. В моём случае он висит на кнопке. Но можно поместить его и на кадр, а также на "onClipEvent(load)" любого мувика.
Теперь собственно код сортировки, и как он работает:

//=======================================//
xpos=[50,100,150,200,250,300,350];
for(i=1;i<=ball;i++){
a=random(xpos.length);
x=xpos[a];
_root.attachMovie("ball","ball"+i,i)
eval('ball'+i)._x=x;
eval('ball'+i)._y=80;
eval('ball'+i).gotoAndStop(i);
xpos.splice(a,1);
}
//=======================================//

xpos=[50,100,150,200,250,300,350];

- в этой строке мы задаём массив с именем "xpos". Значения, которые в нём содержаться - горизонтальные координаты. Для некоторых будет привычнее такой вид записи:

xpos=newArray(50,100,150,200,250,300,350);

Далее мы создаём цикл, внутри которого происходит дублирование клипов, и их сортировка:

for(i=1;i<=ball;i++){
}

переменная "ball" обозначает количество мувиков, которое мы собираемся сортировать. В моём примере эта переменная задаётся в текстовом поле.

a=random(xpos.length);

В этой строке мы задаём временную переменную, которая случайным образом выдаёт нам номер позиции в массиве "xpos". В качестве числа, которым пользуется генератор случайных чисел, мы будем использовать длину массива (определяется строкой "xpos.length").

x=xpos[a];

Эта переменная берёт у нас значение из массива "xpos" с позиции, которую мы определили в предыдущей строке. Её значение мы будем использовать для определения горизонтальной координаты.

_root.attachMovie("ball","ball"+i,i);

Дублируем мувики. В качестве экземпляра возьмём мувик из библиотеки (для этого и пользуемся оператором "attachMovie")с идентификатором "ball". Присваиваем мувику новое имя, составляя его из имени "ball" с номером, который берётся из переменной "i". Здесь же задаём мувику новую "глубину".

eval("ball"+i)._x=x;
eval("ball"+i)._y=80;

С помощью оператора "eval" "возвращаем" из выражения ("ball"+i) имя мувика и присваиваем ему новые координаты.

eval("ball"+i).gotoAndStop(i);

В этой строке мы перемещаем сдублированный мувик на кадр, соответствующий переменной "i".

xpos.splice(a,1);

Ну и последняя операция цикла: Из массива "xpos" удаляем использованный элемент. Соответсвенно уменьшается длина массива, и при следующем шаге цикла мы будем оперировать новым набором координат. И так до тех пор, пока массив не окажется исчерпан.
В моём примере есть ещё две строки кода. Я думаю их действие будет понятно из комментариев.
Можете попробовать усложнить пример, задав ещё один массив: для вертикальных координат.Хотя проще использовать для этого двумерные массивы. Но об этом - в следующем уроке.



Литература по FLASH