Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   массовое создание MovieClip (http://www.flasher.ru/forum/showthread.php?t=104651)

Blajimir 29.11.2007 15:44

массовое создание MovieClip
 
Подскажите пожалуйста как можно сделать следующее....
При загрузке Флэш клипа, в Layer'e Создается например 6 одинаковых MovieClip'ов из Библеотеки, с той разницей что в каждый из них подгружаются разные Картинки.. Так вот после того как они созданны, они должны далее заменять MovieClip'ы в другом Layere'е


Код:

_pageOrder2 = new Array(18);
pos = true;
_pageOrder2[0] = _level2.attachMovie("page0","pic"+0);
_pageOrder2[1] = _level2.attachMovie("page1","pic"+1);
_pageOrder2[2] = _level2.attachMovie("page2","pic"+2);
for(i=3;i<pageOrder2.length-4;i++){
        pos = !pos;
        if(pos){
                //pageOrder2[i].createEmptyMovieClip("")
                _pageOrder2[i] = _level2.attachMovie("page4","pic"+i);
                _pageOrder2[i].photo.loadMovie(pagePhoto[i-3]);
        } else{
                _pageOrder2[i] = _level2.attachMovie("page5","pic"+i);
                _pageOrder2[i].photo.loadMovie(pagePhoto[i-3]);
        }
       
}
_pageOrder2[15] = _level2.attachMovie("page15","pic"+15);
_pageOrder2[16] = _level2.attachMovie("page16","pic"+16);
_pageOrder2[17] = _level2.attachMovie("page17","pic"+17);

on(Определенное событие){
page0.page1.page2.attachMovie(_pageOrder2[n],"pic");
}

Кратко: Главным образом не понятно как создать Массив MovieClip'ов
И потом заменять ими другие MovieClip'ы в другом Layer'e

telit 29.11.2007 17:01

1.
Код:

var arr1:Array = new Array();
arr1.push(mc);

2. Загружай клипы на определённую глубину. а при новом аттаче мувики будут автоматически заменяться.

Blajimir 29.11.2007 17:14

Цитата:

Сообщение от telit
1.
Код:

var arr1:Array = new Array();
arr1.push(mc);

2. Загружай клипы на определённую глубину. а при новом аттаче мувики будут автоматически заменяться.

А можно поподробней про глубину ???

Blajimir 29.11.2007 18:56

И все таки мне не совсем понятно почему после attach'a в добавленный элемент массива пуст? :(
Код:

__qArr.push(mc.attachMovie("page","pic"+i,1));

Psycho Tiger 29.11.2007 18:56

Попробую обьяснить:
В самом флэше есть layer-ы, слои, в которых ты что нибудь рисуешь. При компиляции мувика, слоев нету, они все сливаются в 1 слой, генерируется мувик _root. Он автоматически занимает глубину 0.
//извините за убожеское "генерируется мувик _root" - это чтобы понятнее было.

Теперь создадим внутри _root`a ещё 1 мувиклип
Код:

attachMovie("page0","pic"+0);
Из библиотеки хапаем page0, даем ему имя pic0 (зачем ты писал "pic"+0 - незнаю)
Откровенно говоря, я не понимаю почему это работает.
синтаксис такой:
Код:

attachMovie(linkID,newName, DEPTH);
Что такое depth? - это глубина, туда грузяться мувики при их создании.
Скажем, выполним такой код:
Код:

attachMovie("mc1","mc1", 1);
attachMovie("mc2","mc2", 2);

Mc 2 оказжеться выше чем mc1 (т.е. mc2 будет виден полностью, а mc1 - частично, т.к. mc2 накроет mc1)
Это произошло потому, что глубина mc2 выше, чем глубина мс1.

Теперь другой код:
Код:

attachMovie("mc1","mc1", 2);
attachMovie("mc2","mc2", 1);

Глубина mc1=2, mc2=1 ==> mc1 будет на переднем плане.
Код:

attachMovie("mc1","mc1", 1);
attachMovie("mc2","mc2", 1);

А это то, о чем сказал telit, создали 2 мувиклипа на 1 глубину. Теперь mc1 вообще не существует, его глубину просто перекрыли. Другими словами, если глубина - это квартира, то в квартиру мы заселяем жильцов - movie clip`ы. Все что мы видим на сцене заселено по квартирам.
В квартире #1 жил мс1, но его выселели и поселили мс2. Теперь мс1 вообще нет, а мс2 появился вместо него.
Вот что такое глубина.
Нужные вещи:
Код:

mc.getNextHighestDepth();
Например:
Код:

_root.getNextHighestDepth();
возвращает следуйщую НАИБОЛЬШУЮ величину.
Т.е. скажем
Код:

for (var i:Number=0; i<=20; i++) attachMovieClip("mc","mc"+i,_root.getNextHighestDepth());
Будет приделывать мувики, при этом ни 1 мувик не удалиться.
Код:

mc.removeMovieClip(mc)
Пример:
Код:

_root.removeMovieClip("mc");
Удалят мувиклип с концами, а с ним все его методы и глубину.
ЗЫ если были мувики с глубинами 1 2 3 4 5, и ты удалишь 3, (т.е. занятые глубины будут 1 2 4 5, getNextHighestDepth вернет 6.
Ещё вроде как вместо mc можно указать Number, глубину, но никогда не пользовался.
Код:

mc.swapDepths(depth);
Пример:
Код:

_root.mc.swapDepths(99);
Тупо перемещает клип mc на глубину 99. Если на глубине 99 что то было, то это что то перемещается на глубину, которую имел mc. Проще говоря, mc1.swapDepths(mc2) выполнит следуйщее:
глубина мс1 станет глубиной мс2.
глубина мс2 станет глубиной мс1.

Ещё есть классы depthManager, но тебе до них рановато, я считаю...


P.S. Увидел столь красиво оформелный пост, ни 1 грамматической ошибки, все английские слова написаны английскими буквами... Не поленился, расписал человеку.)
Извиняйте если обьяснил как детсаду)

update:

Про масивы: не может быть что пуст.

Код:

var mc:MovieClip=createEmptyMovieClip("mc1",_root.getNextHighestDepth());
var arr:Array=[]; //или var arr:Array=new Array(), это более краткая запись
arr.push(mc);
mc=attachMovie("mc","mc2",_root.getNextHighestDepth());
arr.push(mc);
trace(arr); //Output: _level0.mc1,_level0.mc2


Blajimir 30.11.2007 11:28

Огромное спасибо за столь подробный ответ!!!
Я вам очень благодарен :)

koIIImarik 30.11.2007 16:29

Psycho Tiger - красавчик =) респект...


Часовой пояс GMT +4, время: 02:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.