PDA

Просмотр полной версии : Как перемещать и копировать объекты?


Danilishin
25.05.2006, 18:46
Объясню суть вопроса.
Есть мувиклип mc_image, который принадлежит одному родительскому мувиклипу mc_canvas1, а также есть еще один мувиклип mc_canvas2, без всяких подчиненных мувиклипов:

mc_canvas1.mc_image
mc_canvas2


Нужно:
Задача 1. Переместить мувиклип от одного родительского мувиклипа к другому, после чего - в первом родителе больше не существует подчиненного мувиклипа, а во втором он есть:

mc_canvas1
mc_canvas2.mc_image

Задача 2. Скопировать мувиклип из одного родительского мувиклипа в другой, чтобы в результате получились физически разные мувиклипы и чтобы не было так, чтобы один просто ссылался на другого:

mc_canvas1.mc_image
mc_canvas2.mc_image


Замечания:
1. дублирование методом duplicateMovieClip() не решает задачи, так как сдублированный мувиклип принадлежит тому же родителю, как и мувиклип-оригинал, и его все равно надо как-то переместить.
2. если записать mc_canvas2.mc_image = mc_canvas1.mc_image, то мы получим ситуацию, когда оба мувиклипа mc_image разных родителей есть физически один и тот же, просто один ссылается на другого. Это следствие того, что объекты MovieClip являются ссылочными типами данных.

Как эти задачи можно решить?

Nirth
25.05.2006, 19:01
1)Перемещать мувики из одного родителя в другой не возможно
как вариант можно эммулировать это путем удаления\аттача мувика.
2) аналогично, копировать можно только в пределах одного родителя
юзай removeMovieClip\attachMovie

Danilishin
25.05.2006, 19:12
Аттач не катит, так как мувиклип mc_image в данном случае не из библиотеки берется, он создается программно и в него загружается ролик (или jpeg-картинка) из внешнего файла. В проекте нужно чтобы в другом месте, в другом мувиклипе создавалась его копия, при этом не приходилось повторно грузить из сервера на клиент. А также есть ситуации, где этот мувиклип нужно перемещать.
Т.е. суть в том, чтобы загрузить ролик из файла один раз, и была возможность делать его копию в другом мувиклипе, а также перемещать в другой мувиклип.

iNils
25.05.2006, 19:25
В чем суть понятно, но перечитай пост Nirth'a еще раз. То что ты хочешь получить без повторной загрузки не возможно.

sem1313
25.05.2006, 20:09
По умолчанию всё загруженное кэшируется, поэтому загрузивши фотку один раз, ты можешь безболезненно(читай - без повторной загрузки) грузить(простите за тафталогию) её ещё раз. Я так поступал, когда делал галерею, грузил полноразмерные фотки, затем задавал меньшие размеры, получалось это все в виде иконок, нажав на которые вызывалась повторная загрузка фотографий, но так как они в кэше, то они ессесно отображались сразу без загрузки.

Но если кэширование так критично, то можно воспользоваться Bitmap, насколько мне известно, он может дублировать изображения.

breez38
26.05.2006, 06:57
Если мувики создаются полность программно, то можно сделать класс-обертку для мувиклипа, который бы хранил все свойства мувика (ширину, длину, прозрачность и т.д.) и мог бы аттачить к себе себеподобных. А картинки можно кэшировать при помощи BitmapData, что не перезагружать по нескольку раз.

Danilishin
26.05.2006, 12:02
А что такое Bitmap и BitmapData? Это есть в ActionScript 2.0, или это появилось в третей версии языка? Во второй версии искал, но не нашел.

breez38
26.05.2006, 12:06
BitmapData - доступен, начиная с флеш 8. Класс позволяет хранить картинки в памяти, "рисовать" их на мувиклипе, изменять попиксельно, накладывать фильтры.

Danilishin
26.05.2006, 12:27
А, понятно, у меня седьмой флеш, потому и не нашел :)

Nirth
26.05.2006, 17:56
единственное что.
при настройках ActionScript 1.0 import не воспринимается тоесть код

import flash.display.BitmapData
createEmptyMovieClip("mc",1).attachBitmap(new BitmapData(200,200,false,0xFF6600),2,"auto",true);

работать не будет, нужно писать имя класса полностью с пакетом

createEmptyMovieClip("mc",1).attachBitmap(new flash.display.BitmapData(200,200,false,0xFF6600),2,"auto",true);

Nox Noctis
27.05.2006, 03:49
вы не о том спорите.

автор спрашивал - как переместить клип из одного родителя в другой.

Nirth сразу правильно ответил: это невозможно в AS1 и AS2.
чего тут еще искать? :)

ну да, можно придумать массу всяких разных способов сделать нечто похожее на то, о чем спрашивали. но решение проблемы это не приблизит. :)

Nirth
27.05.2006, 09:11
удалил спор о том с какой версии Flash\AS доступен класс BitmapData =)