PDA

Просмотр полной версии : Дублирование MovieClip


Rsheih
31.10.2009, 12:40
Здравствуйте!

Помогите с дублированием пожалуйста. Нужно дублировать мувиклип бесконечное число раз. И чтоб "клоны" сохраняли свойста "родителя". (код на frame, код на movieclip)

logo_mc.duplicateMovieClip("logo_mc", name, random(100));

Этот код копирует только один раз и не сохранет функции родительского клипа.

Исходник: Скачать (http://sheih.my1.ru/sample1.rar)

mooncar
31.10.2009, 12:58
Либо используют функцию
duplicateMovieClip(target:String, newname:String, depth:Number) : Void
либо метод
public duplicateMovieClip(name:String, depth:Number, [initObject:Object]) : MovieClip
А у вас тут микс. Судя по записи, вы начинаете использовать метод, берете для клонирования logo_mc, а в скобках почему-то используете синтаксис функции.
Исходник вы, кажется, не тот вложили, не видно связи вопроса и файла по ссылке.

И еще:
- что значит "бесконечное количество раз"?
- не пишите код на мувиках.

Rsheih
31.10.2009, 13:47
Не, исходник тот) не logo_mc для клонирования а mc1 как в исходнике.

Бесконечное число раз: то есть из главного мувика клонируем сколько хотим таких же мувиков. Чтоб потом их можно было удалять.

mooncar
31.10.2009, 13:50
Понятно. Так в чем вопрос-то, что не получается?
Ошибку записи я вам указал.

Rsheih
31.10.2009, 13:55
А можешь конкретный код к моему исходнику написать? А то че то я пишу не получается(

mooncar
31.10.2009, 13:59
Там что-то вроде драм-машинки, синтезатора или какого-то звукового пазла ты задумал, так получается, надо целиком флешку писать.
Подсказать могу - функцию на даблклик перенести внутрь мувика нужно.
Так, как сейчас организовано назначение функции на мувик, она не продублируется.

Добавлено через 5 минут
Запиши внутри мувика в кадре
this.onMouseDown = function() {
var time = 500;
if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
trace(this);

if (getTimer() - click < time) {
trace("doubleClick");
bassloop = new Sound();
bassloop.attachSound("Drums");
bassloop.start(0,1);
} else {
click = getTimer();
}
}
};

this.onRollOver = function(){ this._alpha=70; }
this.onRollOut = function(){ this._alpha=100; }

А в кадре главного таймлайна запиши, например
mc1.duplicateMovieClip ('mc2', 10, {_x: mc1._x + 100});
Если нужно много раз дублировать - делай циклом.
Например:
for (i = 2; i < 11; i++) {
mc1.duplicateMovieClip ('mc' + i, i, {_x: random(300), _y: random(300)});
}

Все остальное нужно убрать, драг на мувике можно оставить, если нужен.

Если нужно звук разный - тоже доработать нужно будет. Например, передавать после дублирования во вновь созданный мувик текстовую ссылку-идентификатор определенного библиотечного звука.

Rsheih
31.10.2009, 18:52
mooncar,

или я не так выразился) или вы не совсем поняли)

Вот мувик. Что мне нужно: нажимаешь на мувик и перетаскиваешь его (а то есть уже его копию) по рабочему столу. Потом можешь еще перетащить если надо. Все функции которые в исходнике, на мувике должны сохраняться на клонах.

mooncar
31.10.2009, 19:01
Сделай что я написал и потесть.
Должно получится так, как я приложил.
Естественно, я готовым не выдам от "сих" до "сих", подправь сам, основываясь на моих советах и приведенном коде.
Главное - все нужные функции запиши внутри мувика и оставь как есть для простоты то, что там связано с драгом, написанное прямо на мувике, хотя это кривовато так делать.

Rsheih
31.10.2009, 19:29
Ну мне надо чтоб не сразу клоны появлялись) А чтоб нажал на главный мувик и из него перетащил клона. И чтоб клона можно было удалить. Чтоб с главного мувика можно было перетаскивать клонов бесконечное количество)

mooncar
31.10.2009, 20:17
Ясно. Как-то у вас сразу не задалось объяснить толком. Постарайтесь разобраться в данном коде, не то толку будет ноль и дальше самостоятельно вы не продвинетесь:
Про удаление подумайте сами (исп. removeMovieClip())

На главном таймлайне:
var count:Number = 0;
mc.onPress = function () { //нажали на оригинал
count++;
var item:MovieClip = mc.duplicateMovieClip ('mc' + count, count);
item.startDrag();
item.onMouseUp = dragOff; //назначаем ф-ю на отпускание мыши, при этом копию уже можно было переместить
};

function dragOff () {
this.stopDrag ();
if (this._x == mc._x && this._y == mc._y) { //если нажали на оригинал и отпустили мышку без переноса копии, то копия удаляется, как ее и не было, чтобы не мешала
this.removeMovieClip();
}
}
Назовите оригинал mc, а не mc1. Удалите с него записанный код с драгом, который присутствует на нем в оригинальном вашем исходнике.
Внутри этого оригинала должен быть видоизмененный ваш код:
this.onMouseDown = function() {
var time = 500;
if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
trace(this);

if (getTimer() - click < time) {
trace("doubleClick");
bassloop = new Sound();
bassloop.attachSound("Drums");
bassloop.start(0,1);
} else {
click = getTimer();
}
}
};

this.onRollOver = function(){ this._alpha=70; }
this.onRollOut = function(){ this._alpha=100; }
Должно как-то так получиться:

Rsheih
31.10.2009, 20:48
Спасибо большое!

Все делаю правильно вроде, но почему то копируется мувик, потом хочу скопировать еще один, предыдущий изчезает(

Скинь пожалуйста исходник sample3

mooncar
31.10.2009, 20:55
Хорошо, только выкину из него басовый сэмпл.

mooncar
31.10.2009, 20:59
По моему алгоритму исчезать должен только тот мувик, который появился после нажатия, но не был перемещен, то есть не был "стащен" с оригинала.

Rsheih
31.10.2009, 21:28
Спасибо ОГРОМНОЕ!!!))

А что надо добавить, чтобы и клонов можно было перемещать по флэшке?)

mooncar
31.10.2009, 21:35
Добавьте еще функцию внутрь mc.onPress:
mc.onPress = function () {
count++;
var item:MovieClip = mc.duplicateMovieClip ('mc' + count, count);
item.startDrag();
item.onMouseUp = dragOff;
item.onPress = function () { //добавить эту функцию для возможности таскания уже после начального оттаскивания
this.startDrag();
}
};
А отпускаться они уже будут с помощью функции dragOff, как и первый раз, после "стягивания" с оригинала.
Разобрались?

Rsheih
31.10.2009, 22:00
Да, получилось!) Спасибо большое прибольшое ваще!!!)))

Если че напишу)

Добавлено через 3 минуты
А клонам какое instance name присваивается?