我在主关卡中创建了一些变量,如下所示:
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"
}
我怎样才能使它工作?我试了很多方法,但都没有……
谢谢大家
在您的示例中,"root"one_answers"this"都是您希望从中访问变量的作用域。所以试试这个:
var third_var:MovieClip;
for(j = 0; j < 3; j++)
{
third_var = MovieClip(root)[var_num_ + j];
trace(third_var);
}
并且你应该在你的for循环中使用分号而不是角。
我想在我的回答之前提出一个建议,你可以使用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
您需要使用两个句号、一个句号和一个set方括号或两个set方括号来移动两层继承。句点.
和一组方括号[]
都完成了向更深一层移动的任务,因此将.
放在用于调用变量的字符串中是行不通的。
解释:
下面三个例子都返回相同的变量:
myMovieClip.my_variable
myMovieClip["my_variable"]
var str:String = "my_variable";
myMovieClip[str];