- ベストアンサー
flash actionscriptでステージ上の複数のmcを一括で削除する方法
- flash actionscriptを使用して、ステージ上の複数のmcを一括で削除したい場合、removeMovieClip()やunloadMovie()を使う方法がありますが、30個のmcがある場合は手間がかかります。
- 代わりに、配列を使って簡単に削除する方法があります。まず、mcを配列に格納し、それぞれのmcに対してremoveMovieClip()を実行することで一括で削除することができます。
- 以下のようなスクリプトを使用することで、30個のmcを一括で削除することができます。 var mcArray:Array = [type1, type2, type3, ..., type30]; for (var i:int = 0; i < mcArray.length; i++) { mcArray[i].removeMovieClip(); }
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>> 緊急だったりするので。。 その緊急の状態はもう過ぎてしまったでしょうか? この質問に気づくのに遅れてしまいました。 removeMovieClip(); は、 深度(レイヤーのような上下関係)が正の数であるムービークリップしか消せません。 ステージ上に手動で用意したものの深度はすべて負の数です。 duplicateMovieClip や MovieClip.attachMovie などのスクリプトで、複製または生成された物の深度は普通、正の数です。 だから、removeMovieClip はスクリプトによって複製や生成されたムービークリップを消すものだと思うと良いと思います。 でも、MovieClip.swapDepths (ムービークリップの深度を変えるスクリプト) で深度を正の数に持って行けば、removeMovieClip でも消せます。 しかし今回の場合は面倒くさくなるだけだと思うので、説明では省略します。 >> 簡単に、何行かで済んでしまうようなスクリプトを教えていただきたいです。 これ↓で良いのではないでしょうか(コピペ可)。 ----------------------------------- on (release) { for (var i = 1; i<=30; i++) { _parent["type"+i].unloadMovie(); } } ----------------------------------- わざわざ配列を作らなくても、単なる for文 で良いと思います。 for(変数の初期値; 値の範囲; 次の値){ } 変数i(初期値1) を 30 になるまで、1ずつ加えていきながら、{ }内を繰り返し計算するという文です。 [ ] の名前は、配列アクセス演算子ですが、配列を作らなくても使用可能です。 これを使うと、インスタンス名や変数などを、動的に設定,取得できます。 またこの演算子を使用してオブジェクトのプロパティにアクセスすることもできます。 _parent["type"+i].unloadMovie(); の部分ですが、意味合いが変わりますけど、 _parent["type"+i]._visible = false; でも、 _parent["type"+i]._alpha = 0; でも、非表示にはできます。 非表示にしたものを再表示させたいときには、こちらの方が便利です。 それぞれ、 _parent["type"+i]._visible = true; と、 _parent["type"+i]._alpha = 100; で復活します。 _visible = false の場合は、非表示状態でボタンとしての機能も失われてしまいます。 ボタンの機能だけは残して、表示だけを非表示にしたい場合は、 _alpha = 0 で消す方が良いでしょう。 緊急の状態をもう過ぎてしまったかもしれませんが、一応回答しておきました。
お礼
丁寧なご回答ありがとうございました! こちらに質問させていただいた後、4時間くらいネットで調べたり本をあさったりして、もしかしてこれでいける?と思ってやって自己解決出来たのが、まさに、sassakunさんのおっしゃった「for文」でした。 ご報告遅れてしまいスミマセン… 他にもいろいろな解決法を提示くださって、感謝です。 _alpha = 0でボタン機能を残す→なんていうのは、あ~そういえばそうだな、と納得してしまいまいた。 聞くとわかるけど、思い付かないです。。(常識なの?) ここで〆切らせていただきます。 どうもありがとうございました。