Динамический доступ к вложенным видеоклипам во Flash Actionscript 2 - PullRequest
2 голосов
/ 11 февраля 2009

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

У меня уже есть динамический доступ к родительскому мувиклипу, например:

eval ("строка" + ActiveRow)

Теперь я хочу получить динамический доступ к одному из детей строки (#) с именем let (#).

Вот мои лучшие догадки по выполнению задачи (ни одна из них не работает):

var i: number;

eval ("строка" + ActiveRow + ".let" + i) или же eval ("row" + ActiveRow) .eval ("let" + i)

Большое спасибо за ваши усилия и возможное решение ..

Ответы [ 3 ]

8 голосов
/ 11 февраля 2009

вы можете попробовать

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

Очевидно, что в зависимости от ситуации может быть другая логика для добавления ваших мувиклипов в массив, но, по сути, это гораздо более приятный способ хранения ссылок на ваши мувиклипы.

1 голос
/ 11 февраля 2009

Получив доступ к родительскому мувиклипу, просто внесите его в дочерний клип. ActionScript 2 не требует использования функции eval для поиска динамических свойств. Просто используйте объект и операторы [] (массив) для индексации нужной переменной.

Если ваши объекты-строки находятся в корне текущего фрагмента ролика, вы можете просто использовать _root[ "row" + ActiveRow ][ "let" + i ].

Однако, поскольку у вас уже есть начальный мувиклип через eval("row"+ActiveRow), вы можете использовать этот объект для перехода на следующий уровень. Например, eval("row" + ActiveRow)[ "let" + i ].

Flash заимствует из JavaScript, и, как и JavaScript, каждый объект по сути является хеш-таблицей. Использование оператора точки эквивалентно использованию оператора [] (массив) с фиксированной строкой.

0 голосов
/ 12 февраля 2009

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

В качестве альтернативы, вы называете каждый из ваших видеоклипов (используя свойство name) и используете getChildByName.

I.E getChildByName ("строка" + i) .getChildByName ("столбец" + i).

...