получение значения переменной с нижнего уровня - PullRequest
0 голосов
/ 23 августа 2011

Ну, я создал несколько переменных на уровне главной сцены, примерно так:

for(i=0,i<10,i++){
    var var_name="var_num_"+i;
    this[var_name]="some value";
}//<-----------------------------------------------------works

, поэтому я получаю 10 переменных с именами "var_num0", "var_num1", "var_num2", каждая из которых имеет определенное значение. и я могу получить к ним доступ в любом месте, называя это

var second_var=MovieClip(root).var_num0;//<--------------works

моя проблема возникает, когда я хочу вызвать все переменные с более низкого уровня или из другого фрейма или где-то еще, используя другой цикл:

var third_var;
for(j=0,j<3,j++){
third_var=this["MovieClip(root).var_num_"+j];//<---------DOSNT WORK
trace(this["MovieClip(root).var_num_"+j]);//<------------returns "undefined"
}

как я могу заставить это работать? я много чего перепробовал и ничего ...

спасибо вам всем

Ответы [ 2 ]

0 голосов
/ 23 августа 2011

Я хотел бы предвосхитить мой ответ предложением использовать «Класс документа» с AS3, чтобы сделать такие вещи, как пространства имен и наследование, намного понятнее.Вы точно знаете, где что-то доступно, когда используете документное, объектно-ориентированное программирование, а не программирование по временной шкале, доступное через Flash IDE (это доступно только благодаря AS1 / 2).Тут: http://www.kirupa.com/forum/showthread.php?223798-ActionScript-3-Tip-of-the-Day/page14

Ответ на вопрос: вы пытаетесь переместить два уровня наследования в один набор [] Другой способ написания вашей первой строки "Не работает":

this.myMovieClip["var_num"+j"];

Вы также можете использовать: this["MovieClip"]["var_num"+j];

По сути, вам нужно извлечь «MovieClip (root)» из строки, которую вы используете для вызова вашей переменнойпотому что вы проходите через два уровня наследования: this-> MovieClip-> targetVar

Вам нужно использовать два периода, точку и квадратную скобку или два квадратных скобки, чтобы переместить два уровня наследования.Точка . и набор квадратных скобок [] оба решают задачу перемещения на один уровень глубже, поэтому размещение . внутри строки, используемой для вызова вашей переменной, не будет работать.

Объяснение:

Следующие три примера возвращают одну и ту же переменную:

myMovieClip.my_variable

myMovieClip["my_variable"]

var str:String = "my_variable";
myMovieClip[str];
0 голосов
/ 23 августа 2011

В вашем случае и "root", и "this" - это область, из которой вы хотите получить доступ к переменным. так попробуйте это:

var third_var:MovieClip;
for(j = 0; j < 3; j++)
{
    third_var = MovieClip(root)[var_num_ + j];
    trace(third_var);
}

Также у вас должны быть точки с запятой, а не комеры.

...