Динамический доступ к вложенным видеоклипам во Flash Actionscript 2
У меня есть вложенный экземпляр фрагмента ролика, к которому я хочу получить доступ. Путь к мувиклипу определяется двумя переменными (аналогично строке и столбцу).
У меня уже есть динамический доступ к родительскому мувиклипу, например так:
eval ("строка" + ActiveRow)
Теперь я хочу получить динамический доступ к одному из потомков строки (#) с именем let(#).
Вот мои лучшие предположения по выполнению задачи (ни один не работает):
var i: число;
eval ("строка" + ActiveRow + ".let" + i) или eval ("строка" + ActiveRow).eval("let" + i)
Большое спасибо за ваши усилия и возможное решение..
3 ответа
Ты можешь попробовать
this["row" + ActiveRow]["let" + i]
Хотя было бы лучше, если бы при создании экземпляров вы помещали их в массив...
var rowClips : Array = [];
for (var i : int = 0; i < 10; i++)
{
var row : MovieClip = this.createEmptyMovieClip("row" + i, i);
rowClips.push(row);
}
Вы можете позвонить по этому
rowClips[i];
Очевидно, что в зависимости от ситуации добавление ваших мувиклипов в массив может быть различной логикой, но по сути это гораздо более приятный способ хранения ссылок на ваши мувиклипы.
Получив доступ к родительскому мувиклипу, просто внесите в него указатель. ActionScript 2 не требует использования eval
функция для поиска динамических свойств. Просто используйте объект и []
(массив) операторы для индексации нужной переменной.
Если ваши "строки" объекты находятся в корне текущего клипа, вы можете просто использовать _root[ "row" + ActiveRow ][ "let" + i ]
,
Однако, так как у вас уже есть начальный мувиклип через eval("row"+ActiveRow)
, вы можете использовать этот объект, чтобы перейти на следующий уровень. Например, eval("row" + ActiveRow)[ "let" + i ]
,
Flash сильно заимствует из JavaScript, и, как и JavaScript, каждый объект по сути является хеш-таблицей. Использование оператора точки эквивалентно использованию оператора [] (массив) с фиксированной строкой.
Прежде всего, кажется, что вы используете табличную структуру данных, поэтому одним простым способом было бы создать двумерный массив и просто сохранить там фрагменты ролика. Тогда вы можете делать поиск по индексу.
Кроме того, вы называете каждый из ваших видеоклипов (используя свойство name) и используете getChildByName.
IE getChildByName("строка"+i).getChildByName("столбец" + i).