Форум 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)
-   -   Можно ли получить список потомков movie clip? (http://www.flasher.ru/forum/showthread.php?t=81358)

Bорон 17.06.2006 18:51

Можно ли получить список потомков movie clip?
 
Доброго времени суток.
Есть небольшой анимационный ролик.
Куча разных мелких зацикленных анимашек.
Нужно что бы по клику на кнопку "стоп" вся анимация ролика останавливалась.
Ну, и соответственно по нажатию на кнопку "старт" запускалась.
Так как анимашек много и в них есть вложенные анимашки в которые вложены другие анимашки, то руками последовательно останавливать все мувики это весьма неблагодарная и тяжолая работа.
Хотел написать функцию, которая будет при указании объекта останавливать его и всех его потомков.
Но не могу сообразить - как получить список потомков класа MovieClip данного обьекта ?

Это возможно ?

Сразу отмечу, что имена клипов не однородны.
Очень надеюсь на вашу помощь.

С уважением. Ворон.

Techmaker 17.06.2006 19:35

Цитата:

Сообщение от Bорон
Это возможно ?

если все потомки точно проигрываются (play())
если нет то нет, так как отследить проигрывается или нет нельзя.

ЗЫ: если клипов очень много - будет небольшой стопор, на маломощных компах может подвиснуть (от такого стопа и старта)

я уже пробовал такое делать.

если хочешь могу сделать пример перелистывания всех потомков.

Bорон 17.06.2006 20:15

Цитата:

Если все потомки точно проигрываются (play())
если нет то нет, так как отследить проигрывается или нет нельзя.
Бррр... Ничего не понял...
Ты имееешь в виду определение проигрывается ли ролик или нет ?
Такой задачи просто не стоит.
(Хотя при каждом "стоп" и "пуск" можно менять переменную состояния объекта)
При нажатии "стоп" к каждому потомку класса movie clip применяется метод stop().
Только хотелось бы определять, что из них Movieclip, что бы применить к нему функцию рекурсивно.
Подскажешь, как это сделать ?

Цитата:

ЗЫ: если клипов очень много - будет небольшой стопор, на маломощных компах может подвиснуть (от такого стопа и старта)
Врядли... У меня все же не настолько МНОГО объектов.

Цитата:

если хочешь могу сделать пример перелистывания всех потомков.
Очень хочу.
Поооожжжжаааалуста !

Буньков Максим 17.06.2006 20:20

Рекурсивно перечиляй for in и скань на tуpeof

Bорон 17.06.2006 20:38

Спасибо !
Сейчас буду пробовать.

Bорон 17.06.2006 21:56

Урааааааа!
Все получилось !

Спасибо всем еще раз !

iNils 17.06.2006 22:10

Вложений: 1
Вот еще один вариант, но с ограничением. Не работает для того мувиклипа, для которого в том же кадре где он появляется навесить onEnterFrame (в примере это демонстрирует самый левый синий круг).

Спасибо Nirth'у за помощь :)

Techmaker 18.06.2006 10:14

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

Сообщение от Bорон
Очень хочу.
Поооожжжжаааалуста !

Цитата:

Сообщение от iNils
Вот еще один вариант, но ограничением. Не работает для того мувиклипа, дл якоторого в том же кадре где он появляется навесить onEnterFrame (в примере это демонстрирует самый левый синий круг).

Спасибо Nirth'у за помощь :)

хъ
немного переделал модифицировал твой пример =)
убрар прототипы и onEnterFrame теперь можно использовать

сделал регистрацию обьектов с возможностью исключения и setInterval'ом у каждого.

7thsky™ 18.06.2006 11:34

Техмайкер я бы так сделал бы (а то можно рекурсией убить все скрипты)

Код:

_global.findAllInMcAndRegister = function (mc) {
        // функция поиска всех обьектов в любом обьекте
        for (var i in mc) {
                if (typeof (mc[i]) == "movieclip" && mc [i]._name == i && mc[i]._parent == mc) {
                        // проверяем что обьект - мувиклип
                        registerMcInterval (mc[i]);
                        // создаём для него интервал
                        findAllInMcAndRegister (mc[i]);
                        // ищем в нём обьекты
                }
        }
};


iNils 18.06.2006 11:57

2Techmaker : тоже вариант :) но и него тоже есть минус, если объект появляется на сцене кадрами позднее, то он не будет автоматически зарегистрирован, следовательно опять надо вызывать функцию регистрации. В первом способе это происходило автоматически (вот только onEnterFrame собственный всю малину портил :)). Все таки хотелось чтобы объект сам себя регистировал без лишнего кода.:umnik2:

Techmaker 18.06.2006 15:57

Цитата:

Сообщение от iNils
2Techmaker : тоже вариант :) но и него тоже есть минус, если объект появляется на сцене кадрами позднее, то он не будет автоматически зарегистрирован, следовательно опять надо вызывать функцию регистрации. В первом способе это происходило автоматически (вот только onEnterFrame собственный всю малину портил :)). Все таки хотелось чтобы объект сам себя регистировал без лишнего кода.:umnik2:

а я хотел сделать просто вариант регистрации обьектов в клипе =) а не глобально =)

а зачем тебе onEnterFrame если нужно останавливать анимацию?

Nirth 18.06.2006 15:58

Чтобы объект сам себя зарегистрировал, нужно создать класс типа
Код:

class MyRegisteredMC extends MovieClip
{
    public static var register:Array = new Array();
    public function MyRegisteredMC()
    {
          register.push(this);
    }
}

и не мучатся

kayama 19.06.2006 10:10

А что дебаггер включить не работает? - Он же покаывает всю структуру клипа...

Techmaker 19.06.2006 12:58

Цитата:

Сообщение от Nirth
Чтобы объект сам себя зарегистрировал, нужно создать класс типа
Код:

class MyRegisteredMC extends MovieClip
{
    public static var register:Array = new Array();
    public function MyRegisteredMC()
    {
          register.push(this);
    }
}

и не мучатся

я не это имел ввиду =))

zzz_dmg 03.04.2009 15:55

добрые люди, исходники хорошие - все работает)) но у меня такой вопрос. у меня главная сцена состоит из мувиклипов в каждом кадре. а мувиклипы в свою очередь содержат анимацию. когда я вставляю код для паузы - первый раз срабатывает - пауза в том кадре-мувике, который стопится, но по нажатию на плей начинает проигрывать не тот мувик, который остановился, а главная сцена root.
подскажите, как сделать так, чтобы этот код не затрагивал сцену, только мувиклип/кадр? не хотелось бы все переносить на главную сцену( пожалуйста...

Bорон 03.04.2009 16:41

Эм... код, насколько я помню, писался для запуска и останова всех потомков некого мувиклипа. Если запустить нужно один конкретный, то просто обратись к нему и запусти. А код, насколько я, опять таки, помню, - реагирует на объект который ему передашь.
+ а зачем ты сюда приплел таймлайн?

zzz_dmg 03.04.2009 16:53

у меня мультфильм состоит из 25 сцен. каждую сцену я положила в отдельный мувик. вставляю этот код. он останавливает мувик, котырый сейчас на таймлайне, но когда нажимаю плей, то проигрывается основная сцена(

Bорон 03.04.2009 19:05

Вложений: 1
Код AS1/AS2:

stop();
_root.stop_all = function(obj){
        obj.stop();
        for (var i in obj) {
                if (typeof(obj[i]) == "movieclip"){
                        stop_all(obj[i]);
                }
        }
}
 
_root.play_all = function(obj){
        obj.play();
        for(var i in obj) {
                if (typeof(obj[i]) == "movieclip"){
                        play_all(obj[i]);
                }
        }
}
 
_root.stop_it_all.onRelease = function(){
        stop_all(_root.movie_part);
}
 
_root.start_it_all.onRelease = function(){
        play_all(_root.movie_part);
}

Вот код.
Наслаждайтесь.
Во вложении fla примера


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

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