Форум 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=131923)

Rsheih 31.10.2009 12:40

Дублирование MovieClip
 
Здравствуйте!

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

Код AS1/AS2:

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

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

Исходник: Скачать

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 минут
Запиши внутри мувика в кадре
Код AS1/AS2:

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; }

А в кадре главного таймлайна запиши, например
Код AS1/AS2:

mc1.duplicateMovieClip ('mc2', 10, {_x: mc1._x + 100});

Если нужно много раз дублировать - делай циклом.
Например:
Код AS1/AS2:

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

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

Rsheih 31.10.2009 19:29

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

mooncar 31.10.2009 20:17

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

На главном таймлайне:
Код AS1/AS2:

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. Удалите с него записанный код с драгом, который присутствует на нем в оригинальном вашем исходнике.
Внутри этого оригинала должен быть видоизмененный ваш код:
Код AS1/AS2:

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; }

Должно как-то так получиться:


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

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