2016-10-05 7 views
0

要約:ライブラリで定義されているMovieClipクラスオブジェクトを使用して、AS3経由でさまざまなMovieClipsのインスタンスを作成します。AS3 MovieClip名のあいまいさ

各MCがインスタンス化されるとき、私は後で参照できるように配列にプッシュします。

最後に、私はその名前を含む各MCに関連するデータを含むXMLファイルを作成します。これは問題のある部分です。つまり、XMLが読み込まれたときにそれぞれのMCを識別できる名前でなければなりません。別のセッションでは意味のない「instance17」などは不要です。

背景:私はキャリアのOOプログラマーではなく、これは一時的な割り当てであり、私の長期的な利益のごく一部でしかありません。おそらく私の次のFlashプロジェクトの数年前です。

インスタンスを作成

ライブラリオブジェクト 種類:ムービークリップ、リンケージ_brakepipe

スタン

var brakepipe: _brakepipe = new _brakepipe(); 
 
shapes.push(brakepipe);

はその後

var clip: MovieClip = shapes(i); 
 
Trace (clip);

これは、だから、私のクラス名ではなく、MCのインスタンス名を与えている

[object _breakpipe]

が得られます。 MCのどのような特性や方法が「ブレークパイプ」をもたらすのでしょうか? (または "_breakpipe"でも "オブジェクト"接頭辞なし)

+0

を行うことによって、「new」に、実行時にその値を変更することができますが、 'シェイプ[i]は'を意味しますか? –

+0

"breakpipe"という文字列が必要ですか?その場合、Tatacticsメソッドは有望に見えます。私は私も同様のアイデアを投稿します –

+0

名前はなぜ重要ですか? XMLを読み込んだときに同じ位置(例えば位置など)で別のインスタンスを作成していれば、名前を気にする必要はありません(ただし、リストアしたい別のプロパティではなく、コードからそれはそうではないようです) – null

答えて

1

連想配列を使用できます。それは次のようになります。

var shapes:Array = new Array(); 

、その後

shapes.push({item:_brakepipe,_name:"brakepipe"}; 

基本的に波括弧はコロン(:)前Objectインスタンスと名前を作成するに関連付けられているあなたが望むことをあなたが作成する名前ですコロンの後の値。そう

今はループ内でこれを行うことができます

trace(shapes[i]._name+"\n"+shapes[i].item); 
// output: 
// brakepipe 
// [object _brakepipe] 

この方法のいいところは、あなたがこのように、あなたの配列要素に関連付ける任意の数のプロパティのためにそれを拡張することができます:

shapes.push({item:_brakepipe,_name:"brakepipe",urlLink:"http://www.sierra.com",_status:"used",_flagged:"false"}; 

となりまし

shapes[i]._status 

は、「文字列を返しますused "そして、あなたは

shapes[i]._status = "new"; 
+0

別のオプションで 'Array'の代わりに' Object'を使用しています: 'shapes ['brakepipe'] = _brakepipe' – www0z0k

+0

@Neal Davisに同意しますが、オブジェクトクラスをwww0z0kとして使用することは避けます。オブジェクト。 これには、保存したいものすべてが含まれている可能性があり、Vectorクラスよりも効率的ではありません。だから私はNeal Davisの答えをアップアップします! しかし、どうしてですか?オブジェクトは扱いが簡単で、オブジェクトはダイナミクスであるため、必要なものを格納することができます。 ストリングだけを保存したい場合は、次のようなものを使用することをお勧めします。var instanceStore:Vector。 =新しいベクター。 ();代わりに。 – tatactic

+0

@Neal Davis、私は今、そのバリエーションを使用するつもりです。配列スロットあたり1つの要素しか必要としませんが、インスタンス名にはなりません。それは私がMCで作成する別の属性になります。 – Colin

0

インスタンス化/それ以降/これは...私にとっては不明瞭だと思われますが、コードを変更してください...

保存したいインスタンス名がわからないので...

あなたのループでは、クリップがMovieClipの場合にこれを行うことができます! :

var clip: MovieClip = shapes(i); 
clip.name = "breakpipe_" + i 
trace (clip.name); 

// will output : breakpipe_1 - > breakpipe_n... 

必要に応じて、余分な "_number"を削除してclip.nameを処理することができます。

私== 13

var clip: MovieClip = new MovieClip(); 
clip.name = "breakpipe_" + 13 
trace(clip.name); 
// output breakpipe_13 
var pattern:RegExp = /_\d*/g; 
trace(clip.name.replace(pattern,"")); 
//output : 
//breakpipe 

だからここにいる場合は、インスタンス名を使用して配列またはベクターを押すことがあります。 私は間違っていますか?

関連する問題