Просмотр полной версии : Дублирование MovieClip
Здравствуйте!
Помогите с дублированием пожалуйста. Нужно дублировать мувиклип бесконечное число раз. И чтоб "клоны" сохраняли свойста "родителя". (код на frame, код на movieclip)
logo_mc.duplicateMovieClip("logo_mc", name, random(100));
Этот код копирует только один раз и не сохранет функции родительского клипа.
Исходник: Скачать (http://sheih.my1.ru/sample1.rar)
Либо используют функцию
duplicateMovieClip(target:String, newname:String, depth:Number) : Void
либо метод
public duplicateMovieClip(name:String, depth:Number, [initObject:Object]) : MovieClip
А у вас тут микс. Судя по записи, вы начинаете использовать метод, берете для клонирования logo_mc, а в скобках почему-то используете синтаксис функции.
Исходник вы, кажется, не тот вложили, не видно связи вопроса и файла по ссылке.
И еще:
- что значит "бесконечное количество раз"?
- не пишите код на мувиках.
Не, исходник тот) не logo_mc для клонирования а mc1 как в исходнике.
Бесконечное число раз: то есть из главного мувика клонируем сколько хотим таких же мувиков. Чтоб потом их можно было удалять.
Понятно. Так в чем вопрос-то, что не получается?
Ошибку записи я вам указал.
А можешь конкретный код к моему исходнику написать? А то че то я пишу не получается(
Там что-то вроде драм-машинки, синтезатора или какого-то звукового пазла ты задумал, так получается, надо целиком флешку писать.
Подсказать могу - функцию на даблклик перенести внутрь мувика нужно.
Так, как сейчас организовано назначение функции на мувик, она не продублируется.
Добавлено через 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)});
}
Все остальное нужно убрать, драг на мувике можно оставить, если нужен.
Если нужно звук разный - тоже доработать нужно будет. Например, передавать после дублирования во вновь созданный мувик текстовую ссылку-идентификатор определенного библиотечного звука.
mooncar,
или я не так выразился) или вы не совсем поняли)
Вот мувик. Что мне нужно: нажимаешь на мувик и перетаскиваешь его (а то есть уже его копию) по рабочему столу. Потом можешь еще перетащить если надо. Все функции которые в исходнике, на мувике должны сохраняться на клонах.
Сделай что я написал и потесть.
Должно получится так, как я приложил.
Естественно, я готовым не выдам от "сих" до "сих", подправь сам, основываясь на моих советах и приведенном коде.
Главное - все нужные функции запиши внутри мувика и оставь как есть для простоты то, что там связано с драгом, написанное прямо на мувике, хотя это кривовато так делать.
Ну мне надо чтоб не сразу клоны появлялись) А чтоб нажал на главный мувик и из него перетащил клона. И чтоб клона можно было удалить. Чтоб с главного мувика можно было перетаскивать клонов бесконечное количество)
Ясно. Как-то у вас сразу не задалось объяснить толком. Постарайтесь разобраться в данном коде, не то толку будет ноль и дальше самостоятельно вы не продвинетесь:
Про удаление подумайте сами (исп. 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; }
Должно как-то так получиться:
Спасибо большое!
Все делаю правильно вроде, но почему то копируется мувик, потом хочу скопировать еще один, предыдущий изчезает(
Скинь пожалуйста исходник sample3
Хорошо, только выкину из него басовый сэмпл.
По моему алгоритму исчезать должен только тот мувик, который появился после нажатия, но не был перемещен, то есть не был "стащен" с оригинала.
Спасибо ОГРОМНОЕ!!!))
А что надо добавить, чтобы и клонов можно было перемещать по флэшке?)
Добавьте еще функцию внутрь 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, как и первый раз, после "стягивания" с оригинала.
Разобрались?
Да, получилось!) Спасибо большое прибольшое ваще!!!)))
Если че напишу)
Добавлено через 3 минуты
А клонам какое instance name присваивается?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.