Уильям Брэдберри
Несколько раз мне приходилось сталкиваться с таким явлением, как сортировка
дублированных мувиков. Применение этого явления разнообразно - от навороченных
меню, до игр на флэше. Ну и родилось что-то вроде простенького исходника - для
себя. Думаю и вам он пригодится.
В архиве:
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
|