2012-05-03 5 views
0

によってだから私は、私がステージに追加したマイライブラリでムービークリップを与え、それがより多くの成分が含まれており、私が使用してこれらの情報を入手することができました:子のActionScript 3つのアセスの子が、インデックス

try 
{ 
    for (i = 0; i < musicControls.numChildren; i++){ 
     trace ('\t|\t ' +i+'.\t name:' + musicControls.getChildAt(i).name + '\t type:' + typeof (musicControls.getChildAt(i))+ '\t' + musicControls.getChildAt(i));  
    } 
} 
catch (error:Error) 
{ 
    trace("Failed:", error.message); 
} 

上記のスクリプトは、以下の情報を返しました。これらの子どもたちをインデックスでアクセスする方法があるかどうか尋ねたいと思います。たとえば、ムービークリップ内のコンポーネントの1つがプログレスバーです。どのように参照すればいいですか?私はgetChildByNameを使ってみましたが、うまく動作しませんでした。これがbasiucの質問であれば、すごくうまくいけません。

| 0. name:plyControl  type:object [object Button] 
| 1. name:stopControl type:object [object Button] 
| 2. name:nextControl type:object [object Button] 
| 3. name:prevControl type:object [object Button] 
| 4. name:progressControl type:object [object ProgressBar] 
| 5. name:volControl  type:object [object Slider] 
| 6. name:__id11_ type:object [object MovieClip] 
| 7. name:__id12_ type:object [object TLFTextField] 
| 8. name:instance71  type:object [object MovieClip] 
| 9. name:vizControl  type:object [object ComboBox] 
| 10.  name:__id13_ type:object [object MovieClip] 
| 11.  name:__id14_ type:object [object TLFTextField] 
| 12.  name:instance74  type:object [object MovieClip] 
| 13.  name:__id15_ type:object [object MovieClip] 
| 14.  name:timeControl type:object [object TLFTextField] 
| 15.  name:instance75  type:object [object MovieClip] 

編集:またはそれのルックスによって文法やスペルで非常に良い....

+0

インデックスや名前で子を取得する必要はほとんどありません。オブジェクトを作成するときは、そのオブジェクトを参照する必要があります。 – Neil

+0

さて、私がやったのは、ライブラリにムービークリップを作っていたのですが、それを個別にステージに追加しなくてはならず、それぞれのポジショニングに迷惑をかけてしまいました。私に。このような最初の場所に追加する唯一の理由は、フレームを変更したときにフレームを離れるときに子フレームを削除しないと、フレームが残っているため、ステージに手作業ですべてのコンポーネントを配置するだけだったからです。 – Sam

+0

これはうまくいきました – Neil

答えて

2

は、次のコードは動作していないですか?

var progressBar:ProgressBar = musicControls.getChildByName("progressControl") as ProgressBar; 
if(progressBar) 
    // doStuff 

getChildByNameはどのようなエラーメッセージを表示していますか?

+0

これはコンパイル時に得られるものです シーン1、レイヤー '関数'、フレーム1、行137 \t 1046:型が見つからないか、コンパイル時定数ではありません:ProgressBar。 – Sam

+1

ProgressBarの定義が不足しているように見えます。それはカスタムタイプですか?フラッシュコントロール? ProgressBarをインポートすることを確認してください。 –

+0

ああ、インポートすると助けになるかもしれない...私は愚かな私はそれを試みます。 – Sam

1

あなたは正しい方向に向かっており、実際にデモンストレーションによって証明できます。 ライブラリアセットからステージ上でインスタンス化されたオブジェクトは、常に同じインデックス構造を持ちます(基本的に元のものへのプロキシです)。あなたが行うことができ、インデックスによって子の子を取得したい場合は

myPointer = musicControls.getChildAt(4);

:したがって、あなたはあなたのプログレスバーが上にある層知っている場合は、あなたの参照は次のようになり

musicControls.getChildAt(4).getChildAt(0);

そして、(各ステップで)コードが関数呼び出しとそれが返すオブジェクトから解決されるため、操作をdot.notation構文で組み合わせて組み合わせることができます。

this.getChildByName("musicControls").progressControl.getChildAt(0)

私は物事を明確に願っています。

+0

上記のmyPointerが設定されていることがわかっているのは、後でプログレスバーを設定するときに参照する必要があることです。progressBar.setProgress(playbackPercent.value、100); または私は理解していませんか? – Sam

+0

私はこれが何か問題にしようとしていると思います:これは(musicControls。getChildAt(14).text);動作しませんが、これは:(musicControls.getChildAt(14).name);それは私が試みている方法で直接アクセスできない何かにアクセスしようとしているからです。 – Sam

+1

musicControls.getChildAt(14)は、レイヤ14でオブジェクトを返します。 したがって、 'musicControls.getChildAt(14)'は '[オブジェクトTLFTextField]'になります。 TextFieldオブジェクトにはたくさんのプロパティがあり、そのうちの1つはnameプロパティです。名前値は「timeControl」です。 'musicControls.getChildAt(14).text =" Hello World! ";'を実行して、そのテキストフィールドのテキスト値を設定しようとしているのであれば、必要なのがTextFieldだけであれば ' musicControls.getChildAt(14) ' – Atriace

関連する問題