2011-08-23 62 views
0

以及我創建的主要階段級別的一些變量,像這樣的東西:從下級檢索變量值

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" 
} 

我怎麼做這個工作?我嘗試了很多東西並沒有什麼...

感謝大家

回答

0

在你的情況下,兩個「根」和「本」是你想從訪問瓦爾範圍。所以試試這個:

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

此外,你應該在你的for循環,而不是角子機分號。

0

我想給我的答案提一個建議,你在AS3中使用'Document Class'來使命名空間和繼承等事情更清晰。當使用基於文檔的面向對象編程與通過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];