Форум 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)
-   -   Дублирование клипа с содержимым, созданным при помощи attachMovie() (http://www.flasher.ru/forum/showthread.php?t=72488)

Muchacho 28.11.2005 13:08

duplicateMovieClip() для клипа с содержимым, созданным программно
 
Создаю я клип. Помещаю в него содержимое при помощи attachMovie. Потом пытаюсь дублировать этот клип при помощи duplicateMovieClip. И что я вижу: клип продублировался, только вот без его содержимого.
Если описал не очень понятно, то вот пример:
Код:

_root.createEmptyMovieClip("clip1", 0);
clip1.attachMovie("Sym", "sym", 2);
clip1.duplicateMovieClip("clip2",3);
trace(clip1._width+" "+clip2._width);

Так как дублировать клип вместе с содержимым, если это содержимое создано программно? Это вообще реально?

motor4ik 28.11.2005 13:30

помоему только в 8ке, и то неверен, но в раньших точно нельзя никак :-(

Ieshua 29.11.2005 02:36

Очевидно DuplicateMovieClip - всех внутренних приатачченных элементов =)

Штрек 29.11.2005 03:14

Такой вот изврат -

this.createEmptyMovieClip('clip1', 1);
function vl_cl(targ) {
targ.attachMovie('linkage', 'vlog_cl', 1, {_x:200, _y:100});
}
vl_cl(this.clip1);
this.clip1.duplicateMovieClip('clip2', 1);
vl_cl(this.clip2);
trace(this.clip2.vlog_cl._x);

Muchacho 29.11.2005 12:07

Штрек, интересное дело, во первых, я не вижу что б клип дублировался, а во вторых, если я в конце твоего скрипта ставлю:
trace(this.clip1.vlog_cl._x+" "+this.clip2.vlog_cl._x);
то выводится вообще:"undefined 200"

motor4ik 29.11.2005 12:13

не парься, 7ка не позваляет дублировать подгруженные клипы :-)

__i 29.11.2005 13:31

такое решение - незнаю будет ли работать(не проверял но думаю что будет работать), но

во первых когда атачим мувики делаем так

_mc.this.attachMovieClip('linkName','mc',dpth,{_linkagename:'linkName'})
//_linkagename:'linkName' - каждый мувик знает из какого клипа библиотеки он создан.
................
//потом наш код в котором мы атачим
...........

//теперь нужно дублировать наш мувик, мы это делаем так:
this.mc.duplicateMovieClip(mc1,depth);
duplicateContent(mc,mc1);

где функция duplicateContent(); выглядит так
function duplicateContent(_mc:MovieClip,_mc1:MovieClip){
for (i in _mc){
if (_mc[i]=='MovieClip'){
//присоеденяем мувик из библиотеки с настроиками того который копируем
dupl_mc=_mc1.attachMovie(_mc[i].linkName,_mc[i]._name,_mc[i].getDepth())
//--------------и копируем все настройки вложеного мувика ---------
for (j in _mc[i]){
if ((_mc[i][j]=='MovieClip')
duplicateContent(_mc[i][j], dupl_mc[j]) //если есть вложеные мувики то копируем и их, короче полная рекурсия , будем копировать вложеные мувики до опупения ну или до 255 если мне не изменяет память%))
else
dupl_mc[j] = _mc[i][j];
}

//--------------
}
}
}

надеюсь мой полет мысли понятен?

я думаю это можно и более красиво реализовать %)) ну нету времени на большее, если кто сделает то киньте код здесь %))

__i 29.11.2005 13:33

Цитата:

Сообщение от motor4ik
не парься, 7ка не позваляет дублировать подгруженные клипы :-)

не в обиду , но 7ка позволяет все, не позволяет лишь низкий полет мысли %)))))

Штрек 29.11.2005 15:39

Вложений: 1
Цитата:

Сообщение от Muchacho
Штрек, интересное дело, во первых, я не вижу что б клип дублировался, а во вторых, если я в конце твоего скрипта ставлю:
trace(this.clip1.vlog_cl._x+" "+this.clip2.vlog_cl._x);
то выводится вообще:"undefined 200"

Грустно всё это...
Нет слов.
Ну добавь ещё пару параметров -
this.createEmptyMovieClip('clip1', 1);
function vl_cl(targ,x,y) {
targ.attachMovie('linkage', 'vlog_cl', 1, {_x:x, _y:y});
}
vl_cl(this.clip1,200,100);
this.clip1.duplicateMovieClip('clip2', 1);
vl_cl(this.clip2,300,200);
trace(this.clip2.vlog_cl._x);

Muchacho 29.11.2005 19:20

Штрек, разницы нет. В твоем коде ничего не дублируется. Если я в конце твоего кода вывожу:

trace(this.clip1.vlog_cl._x+" "+this.clip2.vlog_cl._x);

То выводится точно так же: "undefined 300"


Код от __i пока ещё не проверял

Штрек 29.11.2005 21:53

Код надо смотреть внимательно -
каюсь пропустил уровни -
this.createEmptyMovieClip('clip1', this.getNextHighestDepth());
function vl_cl(targ,x,y) {
targ.attachMovie('linkage', 'vlog_cl', this.getNextHighestDepth(), {_x:x, _y:y});
}
vl_cl(this.clip1,200,100);
this.clip1.duplicateMovieClip('clip2', this.getNextHighestDepth());
vl_cl(this.clip2,300,200);
trace(this.clip2.vlog_cl._x);
trace(this.clip1.vlog_cl._x);

Muchacho 30.11.2005 11:40

Штрек
Твой код просто два раза делает attachMovie() для обоих клипов. А я искал решение как сделать дубликат клипа, с УЖЕ СОЗДАННЫМ при помощи attachMovie() содержимым.
Это не празный вопрос. Просто я по работе сейчас делаю скрипт, в котором в клип (назовем его container) сперва помещается содержимое через attachMovie(), а потом над этим содержимым проводятся многочисленные операции. Дальше необходимо, что б появилась копия мувика container. Иначе мне придется создавать новый мувик, в котором нужно будет по-новой проделывать всё то, что я проделал в container, что нерационально. Но, как я уже вижу, другого пути нет.

motor4ik 30.11.2005 11:44

млин, ну ваще, ну народ, 10 раз уже сказал, нельзя так сделать...нет , как глухие все

__i 30.11.2005 13:20

Если многочисленные операции связаны с обычными рассчетами (считаем какие то переменные или получаем данные при этом не сильно глумимся над самим мувиком %)) ) и небольшими модификациями мувика (ширина/высота, альфа, поворот) то мой способ по идее должен помочь %)), правда он не снимает проблемы
Цитата:

Сообщение от Muchacho
котором нужно будет по-новой проделывать всё то, что я проделал в container, что нерационально

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


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

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