Динамический доступ к вложенным видеоклипам во 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).

Другие вопросы по тегам