2017-03-03 3 views
2

私は新しいコーダーと初めての質問質問者です。私は、各数字が記号で表される数学の問題を示すプログラムに取り組んでいます。問題の大きさを操作しやすくするために、私は記号を "問題"にし、 "数字"の記号をその中に入れたいと思っています。 "problem"は、ステージ上のSymbol "Problem"のインスタンスの名前です。異なる数字はSymbol "Number"のインスタンスで、 "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を取得:

これは私のコードの関連部分です。 "problem.digit01がMain_Mathに見つかりませんでした。デフォルト値はありません。"私は個別にこのように数字を書くときちなみにそれが動作

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( "子ネームはここにあります")メソッドを呼び出すことでそれらを参照することができます。また、すべての子があるので結果を型キャストするのを忘れないでください。 。

// 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

ありがとう:子の名前がないオブジェクトのメンバーの名前と同じものです(私は先に述べたように、「自動ステージのインスタンスを宣言」、althougtは舞台裏で同じ名前を持つ変数への子の参照を割り当てます)オルガン、完璧に働いた! –

+0

@MichaelM正解をマークすることを忘れないでください。 :) – Aaron

+0

@MichaelMいくつかの考えの後、私はこれらのことがどのように機能するかを理解するのに役立ついくつかの説明を追加しました。 – Organis

関連する問題