ActionScript 2, список вложенных видеороликов - PullRequest
2 голосов
/ 30 января 2009

кто-нибудь пытался получить список всех видеоклипов (даже вложенных), которые находятся на сцене в указанном остановленном (и текущем) кадре во Flash 8, AS 2?

Я сделал следующее:

for(i in _root){
if(typeof(_root[i])=="movieclip"){
trace(_root[i]);}
}

Но это хорошо для поиска первого уровня: если внутри мувиклипов у вас есть другие мувиклипы, вы не можете их найти. Кроме того, внутри мувиклипа может быть более одного мувиклипа.

Кто-нибудь когда-нибудь пытался сделать то, что я пытаюсь сделать?

Bye!

Ответы [ 6 ]

6 голосов
/ 31 мая 2010

в точности как предложено inkedmn

printStuff сначала проверяет, является ли найденное значение mc, затем, если это так, отслеживает, а затем проверяет внутри него наличие дополнительных mcs.

printStuff = function(object){
    for(var x in object){
        if(typeof(object[x])=="movieclip"){
            trace(object[x]);
            printStuff(object[x]);
        }
    }
}
printStuff(_root);

оу ... и извините за то, что был год и некоторые изменения поздно ...

4 голосов
/ 30 января 2009

Вы просто пытаетесь отследить? Если так, то есть небольшая полезная недокументированная утилита под названием ObjectDumper, которая может сделать это.

Это, пожалуй, лучшее объяснение всего этого

Итак, что вы можете сделать, это:

import mx.data.binding.ObjectDumper;

trace(ObjectDumper.toString(_root));

Там может быть много дополнительных функций (функций, переменных и т. Д.), Поэтому есть дополнительные параметры, которые вы можете использовать:

ObjectDumper.toString(obj, showFunctions, showUndefined, showXMLstructures, maxLineLength, indent)
1 голос
/ 15 июля 2009

Вы можете сделать что-то подобное, добавив функцию в класс MovieClip:

MovieClip.prototype.StopEverything = function()
{
    stop();
    for (var i in this) {
        if (typeof(this[i]) == "movieclip") {
            this[i].StopEverything();
        }
    }
}
ASSetPropFlags(MovieClip.prototype, ["StopEverything"], 1);

Последний бит ASSetPropFlags - это то, что я обнаружил, что позволяет StopEverything перебирать встроенные классы, такие как MovieClip, используя for..in для каждого поля, даже для скрытых свойств и элементов. Без ASSetPropFlags StopEverything () может не попасть в каждый содержащийся фрагмент ролика.

0 голосов
/ 29 марта 2010

Причина того, что недокументированная функция ObjectDumper AS2.0 не перечисляет фрагменты ролика в корне, заключается в том, что она игнорирует пары nameValue на корневом уровне объекта, что является вопиющим недостатком (если не сказать больше), поскольку само определение ассоциированного массив - это массив / объект, который состоит из пар nameValue в его корне.

Например: trace (ObjectDumper.toString ({myName: "myValue"})) // output = "". Неудивительно, что они оставили эту «особенность» без документов. Честно говоря, я думаю, что это удивительно, что не существует встроенного способа простого и надежного перечисления всего содержимого объекта для целей отладки ни в AS2, ни в AS3. Если вы будете искать в сети, все, что вы найдете, это хакерские задания для циклов for ... in, которые смотрят только на корень массива ... ничего рекурсивного.

0 голосов
/ 19 июня 2009

Я сделал что-то очень похожее на это сегодня. Мои клипы были частью навигации и были дубликатами одного мувиклипа. Чтобы узнать, сколько их было, я поместил переменную на главную сцену, которая была увеличена действиями в мувиклипах. Я установил интервал для ожидания, пока все клипы были учтены, а затем использовал цикл, чтобы заполнить интерактивность моей навигации. Работает довольно хорошо тоже. Надеюсь, это кому-нибудь поможет.

0 голосов
/ 30 января 2009

Мой опыт работы с AS2 довольно ограничен (я немного поработал с AS3), но здесь идет речь:

Что если вы написали рекурсивную функцию, которая, если бы она обнаружила мувиклип, просмотрела все его дочерние объекты для других фрагментов ролика (и сделала то же самое для любых найденных там клипов и т. Д.)? Функция может принимать параметр объекта, а также массив «найденных» клипов, которые добавляются при каждом проходе.

Хотелось бы написать код, который бы это делал, но (как я уже сказал) я не большой парень из AS2: \

...