- ベストアンサー
AS3.0の深度
AS3.0では深度管理が無くなったといいますが、 では、どのような方法で重なり順を変更するのでしょうか??
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ActionScript3.0での表示オブジェクトの重なり順は DisplayObjectコンテナの表示リスト Index で管理します。 ステージ上に「_mc」というインスタンス名のムービークリップを手動で作成した場合, その「_mc」の Index はその「_mc」が存在する DisplayObject の getChildIndex メソッドで取得できます。 例えば this.getChildIndex(_mc); や MovieClip(root).getChildIndex(_mc) で Index を取得することができます。 表示順を入れ替える場合は逆に, DisplayObject の setChildIndex メソッドを使います。 上のように念仏のような感じで書いても意味がわかりにくいと思います。 次のような実験をして,実感するとわかりやすいと思います。 下の図のように, ステージ上にムービークリップ 「_mc1」,「_mc2」,「_mc3」を重なるように用意します。 ( 無事アップできますように... (~人~)。 ) フレームに次のように書いて[制御]→[ムービープレビュー]すると 図の「結果1」のような結果が得られます。 --------------------------------------------- trace("_mc1のIndex="+this.getChildIndex(_mc1)); trace("_mc2のIndex="+this.getChildIndex(_mc2)); trace("_mc3のIndex="+this.getChildIndex(_mc3)); trace("---this.setChildIndex(_mc1,1);---"); this.setChildIndex(_mc1,1); trace("_mc1のIndex="+this.getChildIndex(_mc1)); trace("_mc2のIndex="+this.getChildIndex(_mc2)); trace("_mc3のIndex="+this.getChildIndex(_mc3)); --------------------------------------------- フレームに次のように書いて[制御]→[ムービープレビュー]すると 図の「結果2」のような結果が得られます。 --------------------------------------------- trace("_mc1のIndex="+this.getChildIndex(_mc1)); trace("_mc2のIndex="+this.getChildIndex(_mc2)); trace("_mc3のIndex="+this.getChildIndex(_mc3)); trace("---this.setChildIndex(_mc1,2);---"); this.setChildIndex(_mc1,2); trace("_mc1のIndex="+this.getChildIndex(_mc1)); trace("_mc2のIndex="+this.getChildIndex(_mc2)); trace("_mc3のIndex="+this.getChildIndex(_mc3)); --------------------------------------------- このような実験を色々してみて感覚で掴んでみてください。 また,DisplayObject の numChildren で表示オブジェクトの個数を調べることができます。 個数がわかれば 「その個数-1」 で一番上にあるオブジェクトの Index がわかるということになります。 これを使えば,具体的な Index 番号がわからなくても, 特定のインスタンスを一番上に表示することができます。 ---------------------------------------------- trace("表示オブジェクトの個数="+this.numChildren); trace("_mc1のIndex="+this.getChildIndex(_mc1)); trace("_mc2のIndex="+this.getChildIndex(_mc2)); trace("_mc3のIndex="+this.getChildIndex(_mc3)); trace("---this.setChildIndex(_mc1,this.numChildren-1);---"); this.setChildIndex(_mc1,this.numChildren-1); trace("_mc1のIndex="+this.getChildIndex(_mc1)); trace("_mc2のIndex="+this.getChildIndex(_mc2)); trace("_mc3のIndex="+this.getChildIndex(_mc3)); ---------------------------------------------- 上のスクリプトによる出力結果↓ ------------------------------------------- 表示オブジェクトの個数=3 _mc1のIndex=0 _mc2のIndex=1 _mc3のIndex=2 ---this.setChildIndex(_mc1,this.numChildren-1);--- _mc1のIndex=2 _mc2のIndex=0 _mc3のIndex=1 ------------------------------------------- 書いている内容は違いますが, 同じようなことを同じような図的説明で書かれてあるページをCS4のヘルプから発見しました。 DisplayObjectContainer - ActionScript 3.0 言語およびコンポーネントリファレンス 「addChildAt () メソッド 」 http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/display/DisplayObjectContainer.html#addChildAt() ↑最後の () までリンクがかからないかもしれません。最後の () までが URL です。 エイチttp://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/display/DisplayObjectContainer.html#addChildAt()
お礼
お礼が遅くなりまして申し訳ございません! もの凄く丁寧に教えていただき本当に感謝感謝です。 画像やURLもとても参考になります。 AS2.0の時よりは管理がややこしくないですね。 ありがとうございました!!!!