2017-03-03 29 views
2

我是一位新的編碼人員和第一次提問者。我正在研究一個程序,該程序顯示了一個數字問題,其中每個數字都由一個符號表示。爲了更容易地處理問題的大小,我想製作符號「問題」,並將「數字」的符號放在裏面。 「問題」是舞臺上符號「問題」的實例的名稱。不同的數字是符號「數字」的實例,並且被命名爲「digit01,digit02,digit03,digit11 ...」直到「digit33」。我希望程序循環所有數字以使它們停止在第一幀。我無法操縱嵌套在另一個符號內的符號

這是我的代碼的相關部分:

for (var u: int = 0; u < 4;u++) 
{ 
    for (var v: int = 1; v < 4;v++) 
    { 
     this["problem.digit" + u + v].gotoAndStop(1); 
    } 
} 

當我運行此我得到錯誤#1069。 「在Main_Math上找不到問題.digit01,並且沒有默認值。」

problem.digit01.gotoAndStop(1); 
problem.digit02.gotoAndStop(2); 

等。

我明白任何指導,您可以提供:

當我單獨寫數字這樣順便它的工作原理。謝謝!

回答

2

尋址不是這樣工作的。你不能用一個[]操作來解決孩子的孩子。此外,最好使用getChildByName方法,因爲點語法訪問僅適用於發佈選項「自動聲明階段實例」。

for (var u: int = 0; u < 4;u++) 
{ 
    for (var v: int = 1; v < 4;v++) 
    { 
     // Get a reference to a child and typecast it as MovieClip. 
     var aDigit:MovieClip = problem.getChildByName("digit" + u + "" + v) as MovieClip; 
     aDigit.gotoAndStop(1); 
    } 
} 

讓我們解釋一些事情。

首先,影片剪輯是一個動態類,這意味着你可以讀取和寫入其實例成員實際上不聲明它們(點和括號的語法之間的區別就在這裏解釋Using . or [ ] to access Object properties - what's the difference?):

var M:MovieClip = new MovieClip; 

trace(M['a']); // undefined, no error raised 
M['a'] = 1; 
trace(M['a']); // 1 
trace(M.a]); // 1 

其次,影片剪輯是DisplayObjectContainer因此它可以包含子項。這些孩子有名字,你可以通過調用getChildByName(「child name goes here」)方法來引用它們,並且不要忘記對結果進行類型轉換,因爲有各種各樣的孩子,所以它們默認由其基類DisplayObject類輸入。孩子的名字是一回事對象成員名稱(althougt,正如我前面提到的,「自動聲明舞臺實例」分配與幕後的相同名稱的變量子引用):

// We proceed working with M from above. 

// Lets create a child for M. 
var C:MovieClip = new MovieClip; 

// MovieClip C has a name "D" as of now. 
C.name = "D"; 

// C named "D" becomes a child of M. 
M.addChild(C); 

trace(M.C); // undefined, because C is not a member of M object, it's just a local variable 
trace(M.D); // undefined, because D is the name of MovieClip which is child of M MovieClip but not a member of M objest. 
trace(M.getChildByName("C")); // null, because M has no children with name "C". 
trace(M.getChildByName("D")); // [object MovieClip] because there is indeed a child with the name "D" inside of M. 

// We create a field with the name "E" inside M object. 
M.E = C; 
trace(M.getChildByName("E")); // null, because M has no children with name "E". 
trace(M.E); // [object MovieClip] because M now contains a field E with the reference to MovieClip C named "D". 
+0

謝謝Organis,完美的工作! –

+0

@MichaelM不要忘記標記正確的答案。 :) – Aaron

+0

@MichaelM經過一番思考,我添加了一些解釋,這些解釋可能有助於你理解這些東西的工作原理。 – Organis